多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## consul * 端口:8500 * web管理页面:8600 https://weibo.com/ttarticle/p/show?id=2309351002704321779433768975 ### **服务发现和治理** ![](https://img.kancloud.cn/94/ee/94ee7cd683e15b9036d6af6b1e24f9f7_606x492.png) 1、服务发现以及注册: 当服务Producer 启动时,会将自己的Ip/host等信息通过发送请求告知 Consul,Consul 接收到 Producer 的注册信息后,每隔一段时间会向 Producer 发送一个健康检查的请求,检验Producer是否健康。 2、服务调用: 当 Consumer 请求Product时,会先从 Consul 中拿到存储Product服务的 IP 和 Port 的临时表(temp table),从temp table表中任选一个· Producer 的 IP 和 Port, 然后根据这个IP和Port,发送访问请求;temp table表只包含通过了健康检查的 Producer 信息,并且每隔一段时间更新 ### **consule 核心 agent组件** Agent是一个独立的程序,通过守护进程的方式,运行在consul集群中的每个节点上。每个Consul agent维护它自己的服务集合以及检查注册和健康信息。agent负责执行自己的健康检查和更新本地状态其中,Agent 根据节点的性质,分为: Agent Server 和 Agent Client Agent Client: client将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。 Agent Server: server 保存client的注册信息,集群的配置信息, 维护集群高可用, 在局域网内与本地客户端通讯, 通过广域网与其它数据中心通讯。 每个数据中心的 server 数量推荐为 3 个或是 5 个,通过 Raft 算法来保证一致性。 ### **consul 通信接口** 1. RPC 用于内部通讯Gossip/日志分发/选主等 2. HTTP API 服务发现/健康检查/KV存储等几乎所有功能, 默认端口为8500 2.3 Consul Commands (CLI) consul命令行工具可以与consul agent进行连接,提供部分consul的功能。 实际上Consul CLI 默认就是调用的HTTP API来与consul集群进行通讯。 2.4 DNS 仅用于服务查询 例如: dig @127.0.0.1 -p 8600 web.service.consul 可以通过cosul提供的DNS接口来获取当前的服务“web”对应的可用节点 **Consul 内部端口使用汇总** ![](https://img.kancloud.cn/d4/13/d4139087bbf1404b69f5c4bf8f191f55_628x361.png) ### **Consul 请求调用链路** ![](https://img.kancloud.cn/df/a6/dfa68ee040430b1d38203f3c64701f5b_650x646.png) 从架构上,图片被两个datacenter分成了上下两部分;但这两部分又并不是完全隔离的,他们之间通过WAN GOSSIP在Internet上交互报文。因此,我们了解到consul是可以支持多个数据中心之间基于WAN来做同步的。 再看单个datacenter内部,节点被划分为两种颜色,其中红色为server,紫色为client。它们之间通过GRPC通信(主要用于业务数据)。除此之外,server和client之间,还有一条LAN GOSSIP通信,这是用于当LAN内部发生了拓扑变化时,存活的节点们能够及时感知,比如server节点down掉后,client就会触发将对应server节点从可用列表中剥离出去。 当然,server与server之间,client与client之间,client与server之间,在同一个datacenter中的所有consul agent会组成一个LAN网络(当然它们之间也可以按照区域划分segment),当LAN网中有任何角色变动,或者有用户自定义的event产生的时候,其他节点就会感知到,并触发对应的预置操作。 所有的server节点共同组成了一个集群,他们之间运行raft协议,通过共识仲裁选举出leader。所有的业务数据都通过leader写入到集群中做持久化,当有半数以上的节点存储了该数据后,server集群才会返回ACK,从而保障了数据的强一致性。当然,server数量大了之后,也会影响写数据的效率。所有的follower会跟随leader的脚步,保障其有最新的数据副本。 > Server节点 * 参与共识仲裁(raft) * 存储群集状态(日志存储) * 处理查询 * 维护与周边(LAN/WAN)各节点关系 >Agent节点 * 负责通过该节点注册到consul的微服务的健康检查 * 将客户端注册请求以及查询转化为对server的RPC请求 * 维护与周边(LAN/WAN)各节点关系 >实现原理 * 纵观consul的实现,其核心在于两点: 1. 集群内节点间信息的高效同步机制,其保障了拓扑变动以及控制信号的及时传递 2. server集群内日志存储的强一致性 * 它们主要基于以下两个协议来实现: 1. 使用gossip协议在集群内传播信息 2. 使用raft协议来保障日志的一致性