consul概述:
consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务,consul属于微服务架构的基础设置中用于发现和配置服务的一个工具。
consul的核心功能:
服务发现:consul的某些客户端可以提供一个服务,其他客户端可以使用consul去发现这个服务的提供者。
健康检查:consul客户端可以提供一些健康检查,这些健康检查可以关联到一个指定的服务,比如心跳包的检测。
键值存储:应用实例可以使用consul提供的分层键值存储,比如动态配置,特征标记,协作等。通过HTTP API的方式获取。
多数据中心:consul对多数据中心有非常好的支持。
consul内部原理:
- consul支持多数据中心,多个数据中心通过Internet互联,同时为了提高通信效率,只有server节点才加入跨数据中心通信。
- 在单个数据中心中,consul分为server和agent两种节点(所有的节点也被称为agent),server节点保存数据,client负责健康检查,及转发数据请求到server。
- server节点有一个Leader和多个Follower,Leader节点会将数据同步到Follower,server节点的数量推荐是3个或者5个,在Leader挂掉的时候会启动选举机制产生一个新的Leader。
- 集群内consul节点通过gossip协议(流言协议)维护成员关系,也就是说每个节点了解集群内现在还有那些节点,这些节点是client还是server。
- 单个数据中心的流言协议同时使用TCP和UDP通信,并且都使用8301端口,跨数据中心的流言协议也同时使用TCP和UDP通信,端口使用8302。
- 集群内数据的读写请求既可以直接发送到server,也可以使用RPC转发到server,请求最终会到达Leader节点。
- 在允许轻微陈旧的情况下,读请求也可以在普通的server节点内完成,集群内数据的读写和复制都是通过TCP的8300端口完成的。