当前位置: 首页 > news >正文

Docker-Consul容器服务更新与发现

前言

Docker Compose 则进一步简化了多个容器应用的编排与管理。另一方面,Consul 作为一款先进的服务发现工具,为分布式和微服务架构提供了可靠的服务注册与发现机制。本文将探讨 Docker Compose 和 Consul 在容器化环境中的协同作用,以及它们如何共同帮助开发人员更高效地构建、部署和管理其应用程序。

Docker Compose相关介绍请参考:

Docker-Compose单机多容器应用编排与管理-CSDN博客

目录

一、概述

1. 服务注册与发现

2. 什么是 consul

3. 服务架构

3.1 传统架构

3.2 consul 架构

4. 关键特性

二、Consul 部署

1. 容器服务更新与发现拓扑图

2. 部署信息

3. consul 服务器

3.1 建立 consul 服务

3.2 查看集群信息

3.3 通过 http api 获取集群信息

4. registrator 服务器

4.1 安装 Gliderlabs/Registrato

4.2 测试服务发现功能是否正常

4.3 验证 http 和 nginx 服务是否注册到 consul 

5. consul-template 

5.1 准备 template nginx 模板文件

5.2 安装配置 nginx 服务

5.3 配置并启动 template

5.4 访问 template-nginx

5.5 增加一个 nginx 容器节点

6. consul 多节点

6.1 安装 docker 

6.2 拷贝 consul 相关服务文件,启动 consul 服务

6.3 查看集群信息


一、概述

1. 服务注册与发现

① 服务注册:在Docker中运行的应用程序可以通过Consul客户端向Consul服务注册自己的信息,包括服务名称、IP地址、端口号等。这样,Consul就会维护一个服务目录,记录着所有可用的服务实例及其位置信息。

② 服务发现:其他Docker容器或应用程序可以通过Consul客户端查询Consul服务注册中心,动态地发现和连接到需要的服务。Consul根据服务名称、标签、健康状态等条件来选择合适的服务实例,实现服务间的通信和协作。

2. 什么是 consul

Consul 是一种开源的服务发现和配置管理工具,由 HashiCorp 开发。它提供了一系列功能,包括服务注册、服务发现、健康检查、KV存储等,旨在简化构建和管理分布式系统的过程。

① 服务注册与发现:Consul 允许服务实例向 Consul 注册其信息,包括服务名称、网络位置(IP地址和端口号)、健康状态等。其他服务或客户端可以通过 Consul 查询服务注册中心,动态地发现和连接到需要的服务,从而实现服务间的通信。

② 健康检查:Consul 可以定期对服务实例进行健康检查,以确保服务的可用性。如果一个服务实例不健康,Consul 会将其标记为不可用,同时通知其他服务实例进行相应的调整,保证系统的稳定性。

③ KV 存储:Consul 提供了一个分布式的键值存储系统,允许用户存储和检索配置信息、应用程序状态等。这个功能对于动态配置和共享状态在分布式系统中是非常有用的。

④ 多数据中心支持:Consul 支持多数据中心部署,可以轻松地在不同地理位置的数据中心中管理和发现服务,提高系统的可用性和容错性。

3. 服务架构

3.1 传统架构

在 upstream 块中,需要指定后端服务器的 IP 地址和端口号,即 ip:port;在proxy_pass指令中,需要指定转发请求的目标;

当需要添加新的后端服务器时,需要修改代理端配置文件,且需要重启服务才可以生效,有一定的局限性。

3.2 consul 架构

后端服务 A-N 可以把当前自己的网络位置注册到服务发现模块,服务发现就以 K-V 的方式记录下来,K 一般是服务名,V 就是 ip:port。服务发现模块定时的进行健康检查,轮询查看这些后端服务能不能访问的了。前端在调用后端服务 A-N 的时候,会先询问服务发现模块后端服务的网络位置,然后再调用它们的服务。 

4. 关键特性

  • 服务注册与发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册;
  • 健康检查:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面;
  • Key/Value存储:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
  • 多数据中心:无需复杂的配置,即可支持任意数量的区域。

二、Consul 部署

1. 容器服务更新与发现拓扑图

Consul Template

  • Consul Template守护进程是Consul Template工具的一部分,用于监视Consul中的键值存储(KV)中的变化,并根据这些变化来更新本地的配置文件。它可以在后台运行,并定期检查Consul中的数据,以确保生成的配置文件与最新的配置信息保持同步;
  • 是一个配置文件模板,可以获取注册中心所有的服务发现,然后将服务发现的名称:端口号转发给 Nginx,并且更新 nginx.conf 文件。

Consul Server

  • 作为注册中心,Consul Server 负责维护服务目录,记录当前可用的服务实例及其位置信息;
  • 负责执行健康检查来确保服务的可用性,定期检查服务实例的健康状态,如果某个服务实例出现故障或不可用,Consul会将其标记为不健康,并从服务目录中移除;同时服务实例新增或者恢复,Consul会将其加入到服务目录中;
  • 提供了KV存储,用于存储配置信息、应用程序状态等。这个分布式键值存储可以用于共享配置、动态更新应用程序参数等场景;
  • 支持事件处理机制,可以发布和订阅各种事件,例如服务状态变更、健康检查结果等。

Consul Agent

  • 是一个轻量级的代理程序,用于运行在每个部署了服务的节点上。它负责与Consul集群通信,并执行各种任务,包括服务注册、健康检查、服务发现和处理来自其他节点的RPC请求等。 

Registrator

  • 是一个服务注册器,它是一个独立的进程,运行在容器编排环境中;它的主要作用是监视运行中的服务实例,并将它们注册到服务发现系统中,例如Consul或etcd。通过这种注册,其他服务可以发现并与这些服务进行通信,而无需事先知道它们的位置或IP地址。

2. 部署信息

服务节点ip安装运行服务docker版本
consul 服务器192.168.190.107运行consul服务、nginx服务、consul-template守护进程26.0.2
registrator 服务器192.168.190.108运行registrator容器、运行nginx容器20.10.17
consul 服务器192.168.190.106运行consul服务26.0.2

3. consul 服务器

3.1 建立 consul 服务

① 二进制包直接安装

[root@consul ~]# mkdir /opt/consul
[root@consul ~]# cd /opt/consul/
[root@consul consul]# ls
consul_0.9.2_linux_amd64.zip       # 准备二进制包
[root@consul consul]# unzip consul_0.9.2_linux_amd64.zip
[root@consul consul]# mv consul /usr/local/bin/

② 设置代理,后台启动 consul 服务端

[root@consul consul]#  consul agent \
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.190.107 \
> -client=0.0.0.0 \
> -node=consul-server01 &> /var/log/consul.log &
[1] 7694

③ 启动 consul 后默认会监听5个端口

[root@consul consul]# netstat -natp | grep consul
tcp        0      0 192.168.190.107:8300    0.0.0.0:*               LISTEN      37870/consul        
tcp        0      0 192.168.190.107:8301    0.0.0.0:*               LISTEN      37870/consul        
tcp        0      0 192.168.190.107:8302    0.0.0.0:*               LISTEN      37870/consul        
tcp6       0      0 :::8500                 :::*                    LISTEN      37870/consul        
tcp6       0      0 :::8600                 :::*                    LISTEN      37870/consul  
# 8300:replication、leader farwarding的端口
# 8301:lan cossip的端口
# 8302:wan gossip的端口
# 8500:web ui界面的端口
# 8600:使用dns协议查看节点信息的端口

3.2 查看集群信息

① 查看members状态

[root@consul consul]# consul members
Node             Address               Status  Type    Build  Protocol  DC
consul-server01  192.168.190.107:8301  alive   server  0.9.2  2         dc1

② 查看集群状态

[root@consul consul]# consul operator raft list-peers # 获取Consul集群中Raft协议的节点列表
Node             ID                    Address               State   Voter  RaftProtocol
consul-server01  192.168.190.107:8300  192.168.190.107:8300  leader  true   2
[root@consul consul]# consul info | grep leaderleader = trueleader_addr = 192.168.190.107:8300

3.3 通过 http api 获取集群信息

[root@consul consul]# curl 127.0.0.1:8500/v1/status/peers
["192.168.190.107:8300"]
# 查看集群server成员
[root@consul consul]# curl 127.0.0.1:8500/v1/status/leader
"192.168.190.107:8300"
# 集群 server-leader
[root@consul consul]# curl 127.0.0.1:8500/v1/catalog/services
{"consul":[]}
# 注册的所有服务
[root@consul consul]# curl 127.0.0.1:8500/v1/catalog/nginx
# 查看 nginx 服务信息
[root@consul consul]# curl 127.0.0.1:8500/v1/catalog/nodes
[{"ID":"f17caaee-ff27-b4e8-c592-afcdad3a2e47","Node":"consul-server01","Address":"192.168.190.107","Datacenter":"dc1","TaggedAddresses":{"lan":"192.168.190.107","wan":"192.168.190.107"},"Meta":{},"CreateIndex":5,"ModifyIndex":6}]
# 集群节点详细信息

4. registrator 服务器

4.1 安装 Gliderlabs/Registrato

Gliderlabs/Registrator 可检查容器运行状态自动注册,还可注销 docker 容器的服务到服务配置中心。目前支持 Consul、Etcd 和 SkyDNS2。运行一个 Registrator 容器,开启自动发现服务:

[root@registrator ~]# docker run -d \  # 运行Docker容器并将其设置为后台运行
> --name=registrator \                 # 指定名称为"registrator"
> --net=host \                         # 使用主机网络模式
> -v /var/run/docker.sock:/tmp/docker.sock \
# 将主机的Docker守护进程的Unix套接字映射到容器内的/tmp/docker.sock,这样Registrator容器就可以与 Docker守护进程通信
> --restart=always \               # 容器遇到错误或意外退出时自动重启
> gliderlabs/registrator:latest \  # 使用镜像gliderlabs/registrator来运行容器,:latest表示使用最新版本的镜像
> --ip=192.168.190.108 \           # 设置Registrator容器的IP地址为192.168.10.13
> consul://192.168.190.107:8500      # 192.168.190.107:8500是Consul的地址和端口

4.2 测试服务发现功能是否正常

[root@registrator ~]# docker run -itd -p:1080:80 --name nginx-01 -h nginx1 nginx
[root@registrator ~]# docker run -itd -p:1081:80 --name nginx-02 -h nginx2 nginx
[root@registrator ~]# docker run -itd -p:1082:80 --name apache-01 -h apache1 httpd
[root@registrator ~]# docker ps -a
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                   NAMES
3004e92d23e4   httpd                           "httpd-foreground"       8 seconds ago    Up 7 seconds    0.0.0.0:1082->80/tcp, :::1082->80/tcp   apache-01
108612e81495   nginx                           "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    0.0.0.0:1081->80/tcp, :::1081->80/tcp   nginx-02
dfbfe87308ed   nginx                           "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    0.0.0.0:1080->80/tcp, :::1080->80/tcp   nginx-01
53166bf2c442   gliderlabs/registrator:latest   "/bin/registrator --…"   23 minutes ago   Up 23 minutes                                           registrator
# 一个发现服务,两个容器服务

4.3 验证 http 和 nginx 服务是否注册到 consul 

[root@consul consul]# curl 127.0.0.1:8500/v1/catalog/services 
{"consul":[],"httpd":[],"nginx":[]}

5. consul-template 

Consul-Template是基于Consul的自动替换配置文件的应用。Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。更新完成以后,可以选择运行 shell 命令执行更新操作,重新加载 Nginx。

Consul-Template可以查询Consul中的服务目录、Key、Key-values 等。这种强大的抽象功能和查询语言模板可以使 Consul-Template 特别适合动态的创建配置文件。例如:创建Apache/Nginx Proxy Balancers 、 Haproxy Backends等。

5.1 准备 template nginx 模板文件

在consul服务器上操作:

[root@consul consul]# vim /opt/consul/nginx.ctmpl
upstream http_backend {{{range service "nginx"}}server {{.Address}}:{{.Port}};{{end}}
}
# 定义nginx upstream一个模板server {listen 8000;server_name localhost 192.168.190.107;access_log /var/log/nginx/kgc.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;}
}
# 定义一个server,监听8000端口,反向代理到upstream

5.2 安装配置 nginx 服务

在 consul 节点安装: 

[root@consul consul]# yum install -y epel-release.noarch
[root@consul consul]# yum install -y nginx
[root@consul consul]# vim /etc/nginx/nginx.conf
http {include             vhost/*.conf;  # 添加虚拟主机目录创建虚拟主机目录:
[root@consul consul]# cd /etc/nginx/
[root@consul nginx]# mkdir vhost
启动nginx服务:
[root@consul nginx]# systemctl start nginx.service

5.3 配置并启动 template

在 consul 节点操作: 

[root@consul opt]# ls
consul-template_0.19.3_linux_amd64.zip # 准备安装包
[root@consul opt]# unzip consul-template_0.19.3_linux_amd64.zip
[root@consul opt]# mv consul-template /usr/local/bin/在前台启动template服务,启动后不要按ctrl+c中止consul-template进程:
consul-template --consul-addr 192.168.190.107:8500 \
--template "/opt/consul/nginx.ctmpl:/etc/nginx/vhost/fqlnginx.conf:/usr/sbin/nginx -s reload" \
--log-level=info另外打开一个终端查看生成配置文件:
[root@consul opt]# cd /etc/nginx/vhost/
[root@consul vhost]# ls
fqlnginx.conf
[root@consul vhost]# cat fqlnginx.conf 
upstream http_backend {server 192.168.190.108:1080;server 192.168.190.108:1081;}server {listen 8000;server_name localhost 192.168.190.107;access_log /var/log/nginx/kgc.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.4 访问 template-nginx

在 registrator 节点操作: 

[root@registrator ~]# docker ps -a
CONTAINER ID   IMAGE                           COMMAND                  CREATED        STATUS        PORTS                                   NAMES
3004e92d23e4   httpd                           "httpd-foreground"       15 hours ago   Up 15 hours   0.0.0.0:1082->80/tcp, :::1082->80/tcp   apache-01
108612e81495   nginx                           "/docker-entrypoint.…"   15 hours ago   Up 15 hours   0.0.0.0:1081->80/tcp, :::1081->80/tcp   nginx-02
dfbfe87308ed   nginx                           "/docker-entrypoint.…"   15 hours ago   Up 15 hours   0.0.0.0:1080->80/tcp, :::1080->80/tcp   nginx-01
53166bf2c442   gliderlabs/registrator:latest   "/bin/registrator --…"   15 hours ago   Up 15 hours                                           registrator[root@registrator ~]# docker exec -it nginx-01 /bin/bash
root@nginx1:/# echo "this is web1 nginx_01" > /usr/share/nginx/html/index.html 
root@nginx1:/# exit
[root@registrator ~]# docker exec -it nginx-02 /bin/bash
root@nginx2:/# echo "this is web2 nginx_02" > /usr/share/nginx/html/index.html
root@nginx2:/# exit

访问 192.168.190.107:8000/ 查看轮询结果:

[root@registrator ~]# curl http://192.168.190.107:8000
this is web1 nginx_01
[root@registrator ~]# curl http://192.168.190.107:8000
this is web2 nginx_02
[root@registrator ~]# curl http://192.168.190.107:8000
this is web1 nginx_01
[root@registrator ~]# curl http://192.168.190.107:8000
this is web2 nginx_02

5.5 增加一个 nginx 容器节点

① 增加一个 nginx 容器节点,测试服务发现及配置更新功能

[root@registrator ~]# docker run -itd -p:1083:80 --name nginx-03 -h nginx3 nginx
# 观察template服务,会从模板更新/usr/local/nginx/conf/vhost/kgc.conf文件内容,并且重载nginx服务

② 查看 cousul 节点 template 更新的配置文件内容

[root@consul vhost]# pwd
/etc/nginx/vhost
[root@consul vhost]# ls
fqlnginx.conf
[root@consul vhost]# cat fqlnginx.conf 
upstream http_backend {server 192.168.190.108:1080;server 192.168.190.108:1081;server 192.168.190.108:1083;  # 新增了一个nginx服务}
……

③ 访问 192.168.190.107:8000/ 查看轮询结果

[root@registrator ~]# docker exec -it nginx-03 /bin/bash
root@nginx3:/# echo "this is web3 nginx_03" > /usr/share/nginx/html/index.html
root@nginx3:/# exit[root@registrator ~]# curl http://192.168.190.107:8000
this is web1 nginx_01
[root@registrator ~]# curl http://192.168.190.107:8000
this is web2 nginx_02
[root@registrator ~]# curl http://192.168.190.107:8000
this is web3 nginx_03
[root@registrator ~]# curl http://192.168.190.107:8000
this is web2 nginx_02
[root@registrator ~]# curl http://192.168.190.107:8000
this is web3 nginx_03
[root@registrator ~]# curl http://192.168.190.107:8000
this is web1 nginx_01

④ 停用 nginx-01 服务,查看 template 更新的配置文件内容,以及轮询结果

[root@registrator ~]# docker stop nginx-01
nginx-01
[root@registrator ~]# docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED         STATUS         PORTS                                   NAMES
a9814459efac   nginx                           "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   0.0.0.0:1083->80/tcp, :::1083->80/tcp   nginx-03
108612e81495   nginx                           "/docker-entrypoint.…"   15 hours ago    Up 9 minutes   0.0.0.0:1081->80/tcp, :::1081->80/tcp   nginx-02
53166bf2c442   gliderlabs/registrator:latest   "/bin/registrator --…"   15 hours ago    Up 9 minutes                                           registrator[root@consul vhost]# cat fqlnginx.conf 
upstream http_backend {server 192.168.190.108:1081;server 192.168.190.108:1083;}
……[root@registrator ~]# curl http://192.168.190.107:8000
this is web2 nginx_02
[root@registrator ~]# curl http://192.168.190.107:8000
this is web3 nginx_03
[root@registrator ~]# curl http://192.168.190.107:8000
this is web2 nginx_02
[root@registrator ~]# curl http://192.168.190.107:8000
this is web3 nginx_03

6. consul 多节点

添加一台 docker 环境的服务器 192.168.190.106/24 加入已有的群集中,实际是为了扩展 consul 集群的规模和容量,以提高系统的可用性和可靠性。

6.1 安装 docker 

安装依赖包:
yum install -y yum-utils device-mapper-persistent-data lvm2 
设置阿里云镜像源:
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
安装最新版本:
yum install -y docker-ce docker-ce-cli containerd.io  systemctl start docker.service
systemctl enable docker.service 

6.2 拷贝 consul 相关服务文件,启动 consul 服务

192.168.190.107:
[root@consul vhost]# scp /usr/local/bin/consul 192.168.190.106:/usr/local/bin/
192.168.190.106:
[root@ha02 ~]# consul agent \
> -server \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.190.106 \           # 指定Consul agent监听的IP地址,用于节点间通信
> -client=0.0.0.0 \
> -node=consul-server02 \           # 指定当前节点的名称为"consul-server02"
> -enable-script-checks=true  \
> -datacenter=dc1  \                # 指定Consul集群所属的数据中心名称为"dc1"
> -join 192.168.190.107 &> /var/log/consul.log &
# 加入已知的Consul节点,这里指定加入IP地址为192.168.190.107的节点
[1] 3171

6.3 查看集群信息

查看members状态:
[root@ha02 ~]# consul members
Node             Address               Status  Type    Build  Protocol  DC
consul-server01  192.168.190.107:8301  alive   server  0.9.2  2         dc1
consul-server02  192.168.190.106:8301  alive   server  0.9.2  2         dc1
查看集群状态:
[root@ha02 ~]# consul operator raft list-peers
Node             ID                    Address               State     Voter  RaftProtocol
consul-server01  192.168.190.107:8300  192.168.190.107:8300  leader    true   2
consul-server02  192.168.190.106:8300  192.168.190.106:8300  follower  true   2
# 192.168.190.106状态为follower

相关文章:

Docker-Consul容器服务更新与发现

前言 Docker Compose 则进一步简化了多个容器应用的编排与管理。另一方面,Consul 作为一款先进的服务发现工具,为分布式和微服务架构提供了可靠的服务注册与发现机制。本文将探讨 Docker Compose 和 Consul 在容器化环境中的协同作用,以及它…...

练习题(2024/5/6)

1路径总和 II 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], target…...

利用matplotlib和networkx绘制有向图[显示边的权重]

使用Python中的matplotlib和networkx库来绘制一个有向图,并显示边的权重标签。 1. 定义了节点和边:节点是一个包含5个节点的列表,边是一个包含各个边以及它们的权重的列表。 2. 创建了一个有向图对象 G。 3. 向图中添加节点和边。 4. 设置了…...

Springboot+Vue项目-基于Java+MySQL的教学资料管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…...

从NoSQL到NewSQL——10年代大数据浪潮下的技术革新

引言 在数字化浪潮的推动下,数据库技术已成为支撑数字经济的坚实基石。腾讯云 TVP《技术指针》联合《明说三人行》特别策划的直播系列——【中国数据库前世今生】,我们将通过五期直播,带您穿越五个十年,深入探讨每个时代的数据库演…...

巴菲特股东大会5万字完整版来了!

北京时间5月4日晚22:15,一年一度的伯克希尔股东大会在美国小镇奥马哈重磅开幕。 在今年的伯克希尔股东大会上,比尔盖茨、苹果CEO蒂姆库克等商界大佬均现身大会现场。 在股东大会上,巴菲特先后谈到了已故老搭档芒格、减持苹果、AI影响、现金储…...

LY/T 1860-2022 非甲醛类热塑性树脂胶合板检测

热塑性树脂胶合板是指以木质单板为原料,以聚乙烯、聚丙烯等非甲醛类热塑性树脂为胶黏剂制备的一种普通胶合板。 LY/T 1860-2022非甲醛类热塑性树脂胶合板测试项目: 测试项目 测试方法 外观 GB/T 9846 尺寸 GB/T 9846 含水率 GB/T 17657 胶合强度…...

信息管理与信息系统就业方向及前景分析

信息管理与信息系统(IMIS)专业的就业方向十分广泛,包含计算机方向、企业信息化管理、数据处理和数据分析等,随着大数据、云计算、人工智能、物联网等技术的兴起,对能够处理复杂信息系统的专业人才需求激增,信息管理与信息系统就业…...

TCP的三次握手过程

TCP是面向连接的、可靠的、基于字节流的传输层通信协议。 TCP是面向连接的协议,所以使用 TCP前必须先建立连接,而建立连接是通过三次握手来进行的。 TCP包头结构 在讲解三次握手的过程之前,我们先来看一下 TCP包的结构: TCP包…...

Microsoft 推出 Phi-3 系列紧凑型语言模型

本心、输入输出、结果 文章目录 Microsoft 推出 Phi-3 系列紧凑型语言模型前言Phi-3 基础参数模型对比突破性训练技术降低人工智能安全风险Microsoft 推出 Phi-3 系列紧凑型语言模型 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 如果觉得本文对你…...

Retrofit库中,Call​;Retrofit使用举例;@GET,@PUT区别;

目录 在Retrofit库中,Call​ Retrofit使用举例 Call> listRepos(@Path("user") String user); Call是什么:...

# 怎么关闭 win10 系统中自带的【文件预览】功能?关闭WIN10【文件预览】功能的方法

怎么关闭 win10 系统中自带的【文件预览】功能?关闭WIN10【文件预览】功能的方法 win10 系统中自带的【文件预览】功能,默认是开启状态的,如果需要关闭它,一步搞定。 1、打开电脑文件浏览器,随便进入有文件的一个文件…...

强化学习玩flappy_bird

强化学习玩flappy_bird(代码解析) 游戏地址:https://flappybird.io/ 该游戏的规则是: 点击屏幕则小鸟立即获得向上速度。 不点击屏幕则小鸟受重力加速度影响逐渐掉落。 小鸟碰到地面会死亡,碰到水管会死亡。&#…...

JavaWeb请求响应概述

目录 一、请求响应流程-简述 二、深入探究 三、DispatcherServlet 四、请求响应流程-详细分析 一、请求响应流程-简述 web应用部署在tomcat服务器中,前端与后端通过http协议进行数据的请求和响应。前端通过http协议向后端发送数据请求,就可以访问到部…...

【IDEA】IDEA常用快捷键

Windows系统 快捷键功能备注CtrlShiftEnter格式化本行,并鼠标跳转到下一行CtrlAltL格式化代码Ctrli快速实现接口方法CtrlShiftU快速实现大小写转换CtrlAlt鼠标左键快速进入方法实现内部CtrlAlt←退回上一步鼠标所在地方CtrlAlt→回到刚才鼠标所在地方Ctrl空格代码智…...

Redission分布式锁 watch dog 看门狗机制

为了避免Redis实现的分布式锁超时,Redisson中引入了watch dog的机制,他可以帮助我们在Redisson实例被关闭前,不断的延长锁的有效期。 自动续租:当一个Redisson客户端实例获取到一个分布式锁时,如果没有指定锁的超时时…...

人脸识别系统架构

目录 1. 系统架构 1.1 采集子系统 1.2 解析子系统 1.3 存储子系统 1.4 比对子系统 1.5 决策子系统 1.6 管理子系统 1.7 应用开放接口 2. 业务流程 2.1 人脸注册 2.2 人脸验证 2.2.1 作用 2.2.2 特点 2.2.3 应用场景 2.3 人脸辨识 2.3.1 作用 2.3.2 特点 2.3.3…...

数塔问题(蛮力算法和动态规划)

题目:如下图是一个数塔,从顶部出发在每一个节点可以选择向左或者向右走,一直走到底层,要求找出一条路径,使得路径上的数字之和最大,及路径情况。(使用蛮力算法和动态规划算法分别实现) #include…...

启动 Redis 服务和连接到 Redis 服务器

启动 Redis 服务和连接到 Redis 服务器的步骤通常依赖于你的操作系统和 Redis 的安装方式。以下是一些常见的步骤: ### 启动 Redis 服务 对于大多数 Linux 发行版,Redis 服务可以通过以下命令启动: 1. 如果 Redis 是通过包管理器安装的&am…...

我独自升级崛起在哪下载 我独自升级电脑PC端下载教程分享

将于5月8日在全球舞台闪亮登场的动作角色扮演游戏《我独自升级崛起》,灵感源自同名热门动画与网络漫画,承诺为充满激情的游戏玩家群体带来一场集深度探索与广阔体验于一身的奇幻旅程。该游戏以独特的网络武侠世界观为基底,展现了一位普通人踏…...

STM32F4xx开发学习—GPIO

GPIO 学习使用STM32F407VET6GPIO外设 寄存器和标准外设库 1. 寄存器 存储器映射 存储器本身是不具有地址的,是一块具有特定功能的内存单元,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就叫做存储区映射。给内存单元分配地址之后…...

引领农业新质生产力,鸿道(Intewell®)操作系统助力农业机器人创新发展

4月27日至29日,2024耒耜国际会议在江苏大学召开。科东软件作为特邀嘉宾出席此次盛会,并为江苏大学-科东软件“农业机器人操作系统”联合实验室揭牌。 校企联合实验室揭牌 在开幕式上,江苏大学、科东软件、上交碳中和动力研究院、遨博智能研究…...

扩展学习|一文读懂知识图谱

一、知识图谱的技术实现流程及相关应用 文献来源:曹倩,赵一鸣.知识图谱的技术实现流程及相关应用[J].情报理论与实践,2015, 38(12):127-132. (一)知识图谱的特征及功能 知识图谱是为了适应新的网络信息环境而产生的一种语义知识组织和服务的方…...

ubuntu中的docker记录(3)——如何安装nvidia-docker以更好地支持GPU加速计算应用程序的运行

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、nvidia-docker2的安装1. 安装docker2. 安装nvidia-docker2(1) 添加密钥(2) 更新软件列表(3) 安装nvidia-docker2(4) 测试nvidia-docker2 二、可能的报错及解…...

MLP实现fashion_mnist数据集分类(1)-模型构建、训练、保存与加载(tensorflow)

1、查看tensorflow版本 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())2、fashion_mnist数据集下载与展示 (train_image,train_label),(test_image,test_label) tf.keras.datasets.fashion_mnist.l…...

ChatGPT-税收支持新质生产力

Prompt: 税收发展助力新质生产力 Response: 是的,税收发展可以促进新质生产力的发展。通过税收政策的调整和优化,政府可以提供更好的创新环境,激发企业投资研发,推动新技术、新产品的出现,从而推动经济结构升级和新…...

Linux下深度学习虚拟环境的搭建与模型训练

在深度学习实践中,环境配置是十分重要且免不了的一步。本文以 YOLOv4 模型,介绍在Linux下虚拟环境配置到模型训练的过程。 安装Miniconda: Miniconda是Anaconda的一个轻量级版本,非常适合用于科学计算和数据处理。 wget https:…...

Map-Reduce是个什么东东?

MapReduce是一种用于使用并行分布式算法在集群计算机上处理大型数据集的编程模型及其相关实现。这一概念首先由Google普及,并随后作为Apache Hadoop项目的一部分开源发布。 MapReduce的基本工作流程: 映射(Mapping):这是第一阶段&#xff0c…...

上位机工作感想-从C#到Qt的转变-2

2.技术总结 语言方面 最大收获就是掌握了C Qt编程,自己也是粗看了一遍《深入理解计算机系统》,大致了解了计算机基本组成、虚拟内存、缓存命中率等基基础知识,那本书确实有的部分看起来很吃力,等这段时间忙完再研读一遍。对于封装…...

【C++】C++ 中 的 lambda 表达式(匿名函数)

C11 引入的匿名函数,通常被称为 Lambda 函数,是语言的一个重要增强,它允许程序员在运行时创建简洁的、一次性使用的函数对象。Lambda 函数的主要特点是它们没有名称,但可以捕获周围作用域中的变量,这使得它们非常适合在…...

如何在电脑上登录wordpress/百度seo关键词排名优化工具

1. 概述 ENVI 5.1波谱库中新增了2443种的Aster的波谱文件,同时对应的波谱工具也有了很大的该进,可以帮助用户直观的看到每一种波谱库中的文件个数,以及更为方便的查看每一种波谱文件的波谱曲线。 ENVI 5.1的波谱库浏览器具有的特点&#xf…...

购物网站建设规划论文/免费网络推广软件

原题 城市里的间谍 分析 动态规划,dp[i][j]表示你在时刻i,车站j,最少还要等待的时间. 边界条件d[T][n]0 已经到达,其他d[T][i]inf不可达. 在一个站点时,有以下三种决策: 等一分钟搭乘往左开的车(前提是有)搭乘往右开的车AC代码 #include "bits/stdc.h" using namespa…...

徐州网站平台/原创文章代写

转自:http://www.pinlue.com/article/2019/09/1413/469615040316.html...

购买域名后怎么做网站/百度下载app下载

全部下一个。我试图为python安装cv2模块,但失败了。我正在使用Python3.6(64位)我在命令中键入了以下命令:C:\Users\leahj>C:\Users\leahj\AppData\Local\Programs\Python\Python36\Scripts\pip3 install cv2Collecting cv2Could not find a version t…...

有什么免费企业网站是做企业黄页的/三亚百度推广地址

今天,我们就来谈一谈“张冠李戴”这种事情,主角是中国威锋网一位名为“xyq058775”的用户,他兴奋地承认在全新的iPhone上面安装了Windows 95系统。他使用一款名为iDos(类似于DOSBox的开源应用)的工具安装了Windows 95系统。他发现在iPhone 6 …...

微信网站开发测试号/极速建站网站模板

打开CMD.exe命令行窗口 。通过chcp命令改变代码页,chcp 65001。(65001为UTF-8的代码页)修改窗体属性,改变字体,将字体修改为True Type字体“Lucida Console”。改变命令行窗体大小或者重启命令行窗体尝试操作。...