网站建设开发公司有哪些/seo推广培训资料
文章目录
- 一.docker consul的注册与发现介绍
- 1.什么是服务注册与发现
- 2.什么是consul
- 3.docker consul的应用场景
- 4.consul提供的一些关键特性
- 5.数据流向
- 二.consul部署
- 1.consul服务器(192.168.198.12)
- (1)建立 Consul 服务
- 启动consul后默认会监听5个端口
- (2)查看集群信息
- (3)通过 http api 获取集群信息
- 2.registrator服务器(192.168.198.11)
- (1)安装 Gliderlabs/Registrator
- (2)测试服务发现功能是否正常
- (3)验证 http 和 nginx 服务是否注册到 consul
- 三.consul-template守护进程
- 1.consul-template介绍
- 2.Consul-Template作用
- 四.consul-template配置
- 1.准备 template nginx 模板文件
- 2.编译安装nginx
- 3.配置 nginx
- 4.配置并启动 template
- 5.访问 template-nginx
- 6.增加一个 nginx 容器节点
- (1)增加一个 nginx 容器节点,测试服务发现及配置更新功能。
- (2)查看/usr/local/nginx/conf/vhost/kgc.conf 文件内容
- (3)查看三台 nginx 容器日志,请求正常轮询到各个容器节点上
- 五.consul 多节点
一.docker consul的注册与发现介绍
1.什么是服务注册与发现
(1)服务注册与发现是微服务架构中不可或缺的重要组件。
(2)为解决服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问的问题
2.什么是consul
(1)consul是google开源的一个使用go语言开发的服务管理软件。支持多数据中心、分布式高可用的、服务发现和配置共享。
(2)采用Raft算法,用来保证服务的高可用。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。
(3)服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server 和 client。 每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行。
(4)在client模式下,所有注册到当前节点的服务会被转发到server节点,本身是不持久化这些信息。
(5)在server模式下,功能和client模式相似,唯一不同的是,它会把所有的信息持久化到本地,这样遇到故障,信息是可以被保留的。
server-leader是所有server节点的老大,它和其它server节点不同的是,它需要负责同步注册的信息给其它的server节点,同时也要负责各个节点的健康监测。
3.docker consul的应用场景
(1)服务发现:Consul可以帮助容器化的应用程序找到和连接到其他服务实例。当新的服务实例启动或停止时,Consul会自动更新服务目录,使得其他应用可以动态地发现和使用这些服务。
(2)配置管理:Consul允许将配置信息存储在集中的键值存储中,应用程序可以通过API从该存储库中读取配置。这样做可以使得配置信息与应用程序代码分离,方便进行配置的版本控制和管理。
(3)健康检查:Consul可以定期对服务进行健康检查,如果某个服务实例发生故障或不可用,Consul会自动将其从服务目录中移除,避免请求被发送到不可用的实例。
(4)一致性协议:Consul通过提供一致性协议来保证数据的强一致性。这使得多个节点之间可以同步数据,并在网络分区情况下提供正确的读写操作。
总:在大型网站、微服务中应用,Docker Consul可以用于构建高可用、灵活、可扩展的分布式系统,降低服务之间的依赖关系,提高系统的健壮性和可维护性。
4.consul提供的一些关键特性
(1)服务注册与发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
(2)健康检查:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
(3)Key/Value存储:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
(4)多数据中心:无需复杂的配置,即可支持任意数量的区域。
安装consul是用于服务注册,也就是容器本身的一些信息注册到consul里面,其他程序可以通过consul获取注册的相关服务信息,这就是服务注册与发现。
总:服务的端口+IP放入到sock中,通过自动发现添加自动模块(包括自动发现新的机器、自动更新状态,为容器提供服务出添加、删除)
5.数据流向
nginx服务会把信息(IP+端口号)写入到sock,regitrator自动发现监听sock(docker sock是docker节点服务里的)中的数据是否有新的数据,一旦sock中有新的数据会将数据写入到consul服务器中,consul会注册信息(名称、IP、端口)
二.consul部署
服务器 | 地址 | 搭建服务 |
---|---|---|
consul服务器 | 192.168.198.12 | 运行consul服务、nginx服务、consul-template守护进程 |
registrator服务器 | 192.168.198.11 | 运行registrator容器、运行nginx容器 |
#两台机器关闭防火墙
systemctl stop firewalld.service
setenforce 0
1.consul服务器(192.168.198.12)
本台可不需要安装docker
hostnamectl set-hostname consul-server
su
(1)建立 Consul 服务
#创建consul服务目录
mkdir /opt/consul
cd /opt/consul
#将consul_0.9.2_linux_amd64.zip安装包导入创建的目录下
#解压压缩包
unzip consul_0.9.2_linux_amd64.zip
#将解压的文件移动到后台
mv consul /usr/local/bin/
#设置代理,在后台启动 consul 服务端
consul agent \
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.198.12 \
> -client=0.0.0.0 \
> -node=consul-server01 &> /var/log/consul.log &
注释:
-server: 以server身份启动。默认是client。
-bootstrap :用来控制一个server是否在bootstrap模式,在一个数据中心中只能有一个server处于bootstrap模式,当一个server处于 bootstrap模式时,可以自己选举为 server-leader。
-bootstrap-expect=2 :集群要求的最少server数量,当低于这个数量,集群即失效。
-ui :指定开启 UI 界面,这样可以通过 http://localhost:8500/ui 这样的地址访问 consul 自带的 web UI 界面。
-data-dir :指定数据存储目录。
-bind :指定用来在集群内部的通讯地址,集群内的所有节点到此地址都必须是可达的,默认是0.0.0.0。
-client :指定 consul 绑定在哪个 client 地址上,这个地址提供 HTTP、DNS、RPC 等服务,默认是 127.0.0.1。
-node :节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名。
-datacenter :指定数据中心名称,默认是dc1。
#查看启动的服务端口
netstat -antp|grep consul
启动consul后默认会监听5个端口
注释:
启动consul后默认会监听5个端口:
8300:replication(代表副本同步)、leader (领导者)farwarding(转发的端口)——对内开放
8301:lan cossip的端口——内部同一数据中心端口通信
8302:wan gossip的端口——不通数据中心端口通信
8500:web ui界面的端口——对外开放的web端口,用户http接口和web
8600:使用dns协议查看节点信息的端口,用于已注册的服务发现
(2)查看集群信息
#查看members状态
consul members
Node Address Status Type Build Protocol DC
consul-server01 192.168.198.12:8301 alive server 0.9.2 2 dc1
#查看集群状态
consul operator raft list-peers
Node ID Address State Voter RaftProtocol
consul-server01 192.168.198.12:8300 192.168.198.12:8300 leader true 2consul info | grep leaderleader = trueleader_addr = 192.168.198.12:8300
(3)通过 http api 获取集群信息
#查看集群server成员
curl 127.0.0.1:8500/v1/status/peers
#集群 server-leader
curl 127.0.0.1:8500/v1/status/leader
#注册的所有服务
curl 127.0.0.1:8500/v1/catalog/services
#查看 nginx 服务信息
curl 127.0.0.1:8500/v1/catalog/nginx
#集群节点详细信息
curl 127.0.0.1:8500/v1/catalog/nodes
2.registrator服务器(192.168.198.11)
需提前安装docker容器并下载好镜像
docker pull centos:7
hostnamectl set-hostname registrator
su
容器服务自动加入 Nginx 集群
(1)安装 Gliderlabs/Registrator
Gliderlabs/Registrator 可检查容器运行状态自动注册,还可注销 docker 容器的服务到服务配置中心。目前支持 Consul、Etcd 和 SkyDNS2。
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=192.168.198.11 \
consul://192.168.198.12:8500
注释:
–net=host :把运行的docker容器设定为host网络模式。
-v /var/run/docker.sock:/tmp/docker.sock :把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中。
–restart=always :设置在容器退出时总是重启容器。
–ip :刚才把network指定了host模式,所以我们指定ip为宿主机的ip。consul :指定consul服务器的IP和端口。
(2)测试服务发现功能是否正常
#-h:设置容器主机名
docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx
docker run -itd -p:88:80 --name test-03 -h test03 httpd
docker run -itd -p:89:80 --name test-04 -h test04 httpd
(3)验证 http 和 nginx 服务是否注册到 consul
浏览器中,输入http://192.168.198.12:8500,在 Web 页面中“单击 NODES”,然后单击“consurl-server01”,会出现 5 个服务。
#在consul服务器使用curl测试连接服务器
curl 127.0.0.1:8500/v1/catalog/services
{"consul":[],"httpd":[],"nginx":[]}
三.consul-template守护进程
1.consul-template介绍
(1)Consul-Template是基于Consul的自动替换配置文件的应用。
(2)Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。更新完成以后,可以选择运行 shell 命令执行更新操作,重新加载 Nginx。
2.Consul-Template作用
Consul-Template可以查询Consul中的服务目录、Key、Key-values 等。这种强大的抽象功能和查询语言模板可以使 Consul-Template 特别适合动态的创建配置文件。例如:创建Apache/Nginx Proxy Balancers 、 Haproxy Backends等。
四.consul-template配置
1.准备 template nginx 模板文件
在consul服务器上操作
vim /opt/consul/nginx.ctmpl
#定义nginx upstream一个简单模板
upstream http_backend {{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}#定义一个server,监听8000端口,反向代理到upstream
server {listen 8000;server_name localhost 192.168.198.12;access_log /var/log/nginx/sky.com-access.log; #修改日志路径#如果此处是java需index.jspindex index.html index.php;location / {proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Client-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://http_backend;}
}
2.编译安装nginx
在consul服务器上操作
#下载相关依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
#创建一个用户名为 "nginx" 的用户
useradd -M -s /sbin/nologin nginx
#将nginx压缩包导入并解压到/opt/目录下
tar zxvf nginx-1.12.0.tar.gz -C /opt/
#编译安装nginx
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make -j && make install
#做软连接
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
3.配置 nginx
在consul服务器上操作
vim /usr/local/nginx/conf/nginx.conf
......
http {include mime.types;include vhost/*.conf; #添加虚拟主机目录default_type application/octet-stream;
......
#创建虚拟主机目录
mkdir /usr/local/nginx/conf/vhost
#创建日志文件目录
mkdir /var/log/nginx
#启动nginx
nginx
4.配置并启动 template
在consul服务器上操作
#将consul-template_0.19.3_linux_amd64.zip导入到/opt/下解压
unzip consul-template_0.19.3_linux_amd64.zip -d /opt/
cd /opt/
mv consul-template /usr/local/bin/
#在前台启动 template 服务,启动后不要按 ctrl+c 中止 consul-template 进程。
consul-template --consul-addr 192.168.198.12:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/sky.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info
#另外打开一个终端查看生成配置文件
vim /usr/local/nginx/conf/vhost/sky.conf
upstream http_backend {server 192.168.198.11:83;server 192.168.198.11:84;}#定义一个server,监听8000端口,反向代理到upstream
server {listen 8000;server_name localhost 192.168.198.12;access_log /var/log/nginx/sky.com-access.log; #修改日志路径index index.html index.php;location / {proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Client-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://http_backend;}
}
5.访问 template-nginx
在registrator服务器上操作
docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7fdb1057cebe httpd "httpd-foreground" About an hour ago Up About an hour 0.0.0.0:89->80/tcp, :::89->80/tcp test-04
7e791b32cfa3 httpd "httpd-foreground" About an hour ago Up About an hour 0.0.0.0:88->80/tcp, :::88->80/tcp test-03
610fa76283c6 nginx "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:84->80/tcp, :::84->80/tcp test-02
dbb68e20f583 nginx "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:83->80/tcp, :::83->80/tcp test-01
762a01222cf2 gliderlabs/registrator:latest "/bin/registrator --…" About an hour ago Up About an hour registrator
docker exec -it dbb68e20f583 bash
echo "this is test1 web" > /usr/share/nginx/html/index.html
exit
docker exec -it 610fa76283c6 bash
echo "this is test2 web" > /usr/share/nginx/html/index.html
exit
浏览器访问:http://192.168.198.12:8000/,并不断刷新。
6.增加一个 nginx 容器节点
(1)增加一个 nginx 容器节点,测试服务发现及配置更新功能。
在registrator服务器上操作
docker run -itd -p:85:80 --name test-05 -h test05 nginx
#观察 template 服务,会从模板更新/usr/local/nginx/conf/vhost/skyconf 文件内容,并且重载 nginx 服务。
(2)查看/usr/local/nginx/conf/vhost/kgc.conf 文件内容
在consul服务器上操作
cat /usr/local/nginx/conf/vhost/sky.confupstream http_backend {server 192.168.198.11:83;server 192.168.198.11:84;server 192.168.198.11:85;}
(3)查看三台 nginx 容器日志,请求正常轮询到各个容器节点上
在registrator服务器上操作
在浏览器不断刷新,查看日志
docker logs -f test-01
docker logs -f test-02
docker logs -f test-05
五.consul 多节点
在服务器192.168.198.13操作
先要安装consul
scp /usr/local/bin/consul 192.168.198.13:/usr/local/bin/
consul --version
#添加一台已有docker环境的服务器192.168.198.13/24加入已有的群集中
consul agent \
-server \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.198.13 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.198.12 &> /var/log/consul.log &
注释:
-enable-script-checks=true :设置检查服务为可用
-datacenter : 数据中心名称-join :加入到已有的集群中
consul members
consul operator raft list-peers
consul info | grep leader
http://192.168.198.12:8500查看是否存在第二台consul
docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:85:80 --name test-1 -h test1 nginx
netstat -natp | grep consul
查看server中的consul第二台添加的服务
http://192.168.198.12:8500/ui/#/dc1/nodes/consul-server01
相关文章:

Docker容器:docker consul的注册与发现及consul-template守护进程
文章目录 一.docker consul的注册与发现介绍1.什么是服务注册与发现2.什么是consul3.docker consul的应用场景4.consul提供的一些关键特性5.数据流向 二.consul部署1.consul服务器(192.168.198.12)(1)建立 Consul 服务启动consul后…...

Blazor 依赖注入妙用:巧设回调
文章目录 前言依赖注入特性需求解决方案示意图 前言 依赖注入我之前写过一篇文章,没看过的可以看看这个。 C# Blazor 学习笔记(10):依赖注入 依赖注入特性 只能Razor组件中注入所有Razor组件在作用域注入的都是同一个依赖。作用域可以看看我之前的文章。 需求 …...

Python 基础 -- Tutorial(三)
7、输入和输出 有几种方法可以表示程序的输出;数据可以以人类可读的形式打印出来,或者写入文件以备将来使用。本章将讨论其中的一些可能性。 7.1 更花哨的输出格式 到目前为止,我们已经遇到了两种写值的方法:表达式语句和print()函数。(第三种方法是使…...

基于STM32的四旋翼无人机项目(二):MPU6050姿态解算(含上位机3D姿态显示教学)
前言:本文为手把手教学飞控核心知识点之一的姿态解算——MPU6050 姿态解算(飞控专栏第2篇)。项目中飞行器使用 MPU6050 传感器对飞行器的姿态进行解算(四元数方法),搭配设计的卡尔曼滤波器与一阶低通滤波器…...

微信小程序开发教学系列(1)- 开发入门
第一章:微信小程序简介与入门 1.1 简介 微信小程序是一种基于微信平台的应用程序,可以在微信内直接使用,无需下载和安装。它具有小巧、高效、便捷的特点,可以满足用户在微信中获取信息、使用服务的需求。 微信小程序采用前端技…...

Nginx虚拟主机(server块)部署Vue项目
需求 配置虚拟主机,实现一个Nginx运行多个服务。 实现 使用Server块。不同的端口号,表示不同的服务;同时在配置中指定,Vue安装包所在的位置。 配置 Vue项目,放在 html/test 目录下。 config中的配置如下…...

JAVA开发环境接口swagger-ui使用总结
一、前言 swagger-ui是java开发中生产api说明文档的插件,这是后端工程师和前端工程师联调接口的桥梁。生成的文档就减少了很多没必要的沟通提高开发和测试效率。 二、 swagger-ui的使用 1、引入maven依赖 <dependency><groupId>io.springfox</grou…...

mongodb 数据库管理(数据库、集合、文档)
目录 一、数据库操作 1、创建数据库 2、删除数据库 二、集合操作 1、创建集合 2、删除集合 三、文档操作 1、创建文档 2、 插入文档 3、查看文档 4、更新文档 1)update() 方法 2)replace() 方法 一、数据库操作 1、创建数据库 创建数据库…...

分布式与集群的定义及异同
分布式与集群的定义及异同 分布式定义优点不足 集群优点不足 异同 分布式 定义 分布式是指将一个系统或应用程序分散到多个计算机或服务器上进行处理和管理的技术。它是指多个系统协同合作完成一个特定任务的系统。例如,可以将一个大业务拆分成多个子业务…...

电脑端teams一直在线小程序,简单好用易上手
居家办公的你,会不会想要摸鱼!!会不会想要下楼拿快递!!会不会想要出去下馆子!!!然而,teams的5分钟不操作电脑状态就变为离开大大的阻挡了你幸福生活的脚步!&a…...

YOLOv5算法改进(4)— 添加CA注意力机制
前言:Hello大家好,我是小哥谈。注意力机制是近年来深度学习领域内的研究热点,可以帮助模型更好地关注重要的特征,从而提高模型的性能。在许多视觉任务中,输入数据通常由多个通道组成,例如图像中的RGB通道或…...

无涯教程-PHP - XML GET
XML Get已用于从xml文件获取节点值。以下示例显示了如何从xml获取数据。 Note.xml 是xml文件,可以通过php文件访问。 <SUBJECT><COURSE>Android</COURSE><COUNTRY>India</COUNTRY><COMPANY>LearnFk</COMPANY><PRICE…...

Spark Standalone环境搭建及测试
🥇🥇【大数据学习记录篇】-持续更新中~🥇🥇 篇一:Linux系统下配置java环境 篇二:hadoop伪分布式搭建(超详细) 篇三:hadoop完全分布式集群搭建(超详细…...

【PHP】流程控制-ifswitchforwhiledo-whilecontinuebreak
文章目录 流程控制顺序结构分支结构if分支switch分支 循环结构for循环while循环do-while循环continue和break 流程控制 顺序结构:代码从上往下,顺序执行。(代码执行的最基本结构) 分支结构:给定一个条件,…...

Pytorch-day04-模型构建-checkpoint
PyTorch 模型构建 1、GPU配置2、数据预处理3、划分训练集、验证集、测试集4、选择模型5、设定损失函数&优化方法6、模型效果评估 #导入常用包 import os import numpy as np import torch from torch.utils.data import Dataset, DataLoader from torchvision.transfor…...

使用Xshell7控制多台服务同时安装ZK最新版集群服务
一: 环境准备: 主机名称 主机IP 节点 (集群内通讯端口|选举leader|cline端提供服务)端口 docker0 192.168.1.100 node-0 2888 | 3888 | 2181 docker1 192.168.1.101 node-1 2888 | 388…...

python numpy array dtype和astype类型转换的区别
Python3 本身对整数的支持做了提升,可以支持无限长度的整数:比如: b 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffPython的模块numpy array定义的数组在windows和MACOS上默认长度是…...

浮动属性样式
🍓浮动属性 属性名称中文注释备注float设置盒子浮动left左浮动,right右浮动,none不浮动clear清除浮动left清除左浮动,right清除右浮动,both左右浮动都清除(注意:clear清除浮动一般只有作用在块…...

keepalived双机热备 (四十五)
一、概述 Keepalived 是一个基于 VRRP 协议来实现的 LVS 服务高可用方案,可以解决静态路由出现的单点故障问题。 原理 在一个 LVS 服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器…...

SpringBoot整合阿里云OSS,实现图片上传
在项目中,将图片等文件资源上传到阿里云的OSS,减少服务器压力。 项目中导入阿里云的SDK <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version>…...

Dynaminc Programming相关
目录 3.1 最长回文子串(中等):标志位 3.2 最大子数组和(中等):动态规划 3.3 爬楼梯(简单):动态规划 3.4 买卖股票的最佳时机(简单)࿱…...

使用 Elasticsearch 轻松进行中文文本分类
本文记录下使用 Elasticsearch 进行文本分类,当我第一次偶然发现 Elasticsearch 时,就被它的易用性、速度和配置选项所吸引。每次使用 Elasticsearch,我都能找到一种更为简单的方法来解决我一贯通过传统的自然语言处理 (NLP) 工具和技术来解决…...

MNN学习笔记(八):使用MNN推理Mediapipe模型
1.项目说明 最近需要用到一些mediapipe中的模型功能,于是尝试对mediapipe中的一些模型进行转换,并使用MNN进行推理;主要模型包括:图像分类、人脸检测及人脸关键点mesh、手掌检测及手势关键点、人体检测及人体关键点、图像嵌入特征…...

主力吸筹指标及其分析和使用说明
文章目录 主力吸筹指标指标代码分析使用说明使用配图主力吸筹指标 VAR1:=REF(LOW,1); VAR2:=SMA(MAX(LOW-VAR1,0),3,1)/SMA(ABS(LOW-VAR1),3,1)*100; VAR3:=EMA(VAR2,3); VAR4:=LLV(LOW,34); VAR5:=HHV(VAR3,34); VAR7:=EMA(IF(LOW<=VAR4,(VAR3+VAR5*2)/2,0),3); /*底线:0,…...

Python高光谱遥感数据处理与高光谱遥感机器学习方法教程
详情点击链接:Python高光谱遥感数据处理与高光谱遥感机器学习方法教程 第一:高光谱基础 一:高光谱遥感基本 01)高光谱遥感 02)光的波长 03)光谱分辨率 04)高光谱遥感的历史和发展 二:高光谱传感器与数据获取 01)高光谱遥感…...

【洛谷】P1678 烦恼的高考志愿
原题链接:https://www.luogu.com.cn/problem/P1678 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 将每个学校的分数线用sort()升序排序,再二分查找每个学校的分数线,通过二分找到每个同学估分附近的分数线。 最后…...

开机自启CPU设置定频
sudo apt-get install expect sudo apt-get install cpufrequtils具体步骤如下: 安装 cpufrequtils 工具 ⚫ sudo apt-get install cpufrequtils ⚫ 需要联网下载修改配置文件 ⚫ sudo vi /etc/init.d/cpufrequtils ⚫ 将 GOVERNOR“ondemand” 改为: &g…...

嵌入式Linux开发实操(十二):PWM接口开发
# 前言 使用pwm实现LED点灯,可以说是嵌入式系统的一个基本案例。那么嵌入式linux系统下又如何实现pwm点led灯呢? # PWM在嵌入式linux下的操作指令 实际使用效果如下,可以通过shell指令将开发板对应的LED灯点亮。 点亮3个LED,则分别使用pwm1、pwm2和pwm3。 # PWM引脚的硬…...

消息中间件介绍
消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如ActiveMQ、RabbitMQ,Kafka,还有阿里巴巴…...

[Unity] 基础的编程思想, 组件式开发
熟悉 C# 开发的朋友, 在刚进入 Unity 开发时, 不可避免的会有一些迷惑, 例如不清楚 Unity 自己的思想, 如何设计与架构一个应用程序之类的. 本篇文章简要的介绍一下 Unity 的基础编程思想. 独立 Unity 很少使用 C# 的标准库, 例如 C# 的网络, 事件驱动, 对象模型, 这些概念在 …...