参考:http://blog.didispace.com/consul-service-discovery-exp/

1 Consul是什么

Consul是基于GO语言开发的开源工具,主要面向分布式、服务化的系统提供服务注册、服务发现和配置管理的功能。

Consul的功能都很实用,其中包括:

  • 服务注册/发现
  • 健康检查
  • Key/Value存储
  • 多数据中心
  • 分布式一致性保证等。

Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,在执行对应的启动脚本即可。

2 Consul工作原理

引用官网的一张图:
初识Consul
工作原理要点

  • Consul支持多数据中心。在上图中有两个DataCenter,他们通过网络互连,同时请注意为了提高通信效率,只有Server节点才加入跨数据中心的通信。
  • 在单个数据中心中,Consul分为ServerClient两种节点(所有的节点也被称为AgentServer节点保存注册的服务信息数据,Client节点存在于应用服务中,负责服务注册、健康检查、转发数据请求到ServerServer节点有一个Leader和多个FollowerLeader节点会将数据同步到FollowerServer的数量推荐是3个或者5个,在Leader挂掉的时候会启动选举机制产生一个新的Leader
  • Consul集群内的节点通过gossip协议(流言协议)维护成员关系。也就是说某个节点了解集群内现在还有哪些节点,这些节点是Client还是Server。单个数据中心的流言协议同时使用TCPUDP通信,并且都使用8301端口。跨数据中心的流言协议也同时使用TCPUDP通信,端口使用8302
  • 集群内数据的读写请求既可以直接发到Server,也可以通过Client使用RPC转发到Server,请求最终会到达Leader节点。在允许数据轻微陈旧的情况下,读请求也可以在普通的Server节点完成,集群内数据的读写和复制都是通过TCP8300端口完成。

3 Consul服务注册/发现的原理

Consul可用于分布式系统中的服务注册/发现。
下图参考:http://blog.didispace.com/consul-service-discovery-exp/
初识Consul
服务注册/发现原理:

  • 首先在Server1Server2Server3三个服务器上面分别部署了一个Consul Server,组成一个Consul集群。这个集群中有leader,也有follower,假设他们选举了Server2上的Consul Server节点为Leader。这些服务器上最好只部署Consul程序,以尽量维护Consul Server的稳定。
  • 然后在服务器Server4Server5上通过Consul Client分别注册Service AService BService C,这里每个Service分别部署在了两个服务器上,这样可以避免Service的单点问题。服务注册到Consul可以通过HTTP API(8500端口)的方式,也可以通过Consul配置文件的方式。Consul Client可以认为是无状态的,它将注册信息通过RPC转发到Consul Server,注册过的服务信息真实的保存在Consul Server的各个节点中,并且通过Raft算法实现了强一致性。
  • 最后在服务器Server6中有一个Service D服务,需要访问Service B。这时候Service D首先会访问本机Consul Client提供的HTTP API,本机的Consul Client会将请求转发到Consul Server(由集群中的leader来处理请求),Consul Server查询到Service B当前的服务信息并返回,最终Service D拿到了Service B的所有部署的IP和端口,然后就可以从中选择Service B的其中一个部署实例并向其发起请求了。
  • 如果服务发现采用的是DNS方式,则Service D中直接使用Service B的服务发现域名,域名解析请求首先到达本机DNS代理,然后转发到本机Consul Client,本机Consul Client会将请求转发到Consul ServerConsul Server查询到Service B当前的信息返回,最终Service D拿到了Service B的某个部署的IP和端口。

相关文章:

  • 2021-06-04
  • 2021-10-01
  • 2022-01-14
  • 2021-07-22
  • 2021-05-22
  • 2021-04-25
  • 2022-01-29
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-22
  • 2022-02-14
  • 2021-07-16
相关资源
相似解决方案