01简介在上一篇《Golang语言微服务的服务注册与发现组件Consul》中,我们已经介绍过什么是服务注册与发现。Golang语言微服务为什么服务架构需要使用服务注册与发现组件,Golang语言开发的服务注册与发现组件Consul的主要特点和基本介绍。在这篇文章中,我们介绍一下Consul的系统架构。读者阅读本文后可以了解Consul的工作原理。02Consul术语在介绍Consul系统架构之前,我先介绍几个Consul术语,以方便读者理解Consul系统架构的介绍。DatacenterDatacenterClusterClusterServerServerClientClientAgentAgentConsul原生支持多个数据中心,数据中心包含Consul集群,这些集群由客户端、服务器或客户端和服务器混合的节点组成。部署和运行Agents的多个节点组成一个ConsulCluster,该集群包含Client、Server,或者Client和Server的混合体。如果节点上运行的Agent开启了Server模式,那么该节点就是一个Server。如果节点上运行的Agent不是Server模式,那么该节点就是Client。Agent是运行在Consul集群所有节点上的守护进程,负责维护成员信息、注册服务、运行健康检查、响应查询等。03Consul系统架构Consul官方给我们提供了一张Consul系统架构图。在这个图中,我们可以看到有两个数据中心被标记为DATACENTER1和DATACENTER2。可以看出Consul原生支持多数据中心。每个数据中心都包含一个Consul集群。DATACENTER1中的集群由6个部署和运行Agent的节点组成,其中三个以Server模式运行,另外三个以Client模式运行。DATACENTER2中的集群由部署和运行Agent的3个节点组成,这三个节点都运行在Server模式下。由此可以得出结论,DATACENTER中的集群可以是Client和Server的混合体,也可以只有Server节点。需要注意的是,对于Consul数据中心的每个集群,官方建议是将以Server模式运行的节点数控制在3到5个,因为当3到5个Server节点出现故障时,可以提供一致性和可用性,并且Server节点的Leader选举是基于Raft协议。Server节点越多,Leader选举越慢。Client节点的数量没有限制,是一个轻量级的过程,我们甚至可以创建上千个Client节点。Server负责基于Raft协议选举Leader,维护集群状态,响应RPC查询,与其他DATACENTER交换WANGossip,将查询请求转发给Leader或远程DATACENTER。Client是无状态的,负责将所有查询请求转发给Server,Client不需要和其他DATACENTER交换WANGossip,只需要参与LANGossip,资源开销很小,只消耗少量资源网络带宽。04总结在这篇文章中,我们介绍了Consul的系统架构。我们首先从宏观的角度来了解Consul的工作原理,即先把握大纲,再详细学习Consul的组成部分。
