本文简单介绍了 Consul 的原理,但愿能吸引感兴趣的朋友一块儿探讨研究。html
须要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六java
Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源. Consul 支持健康检查,并容许 HTTP 和 DNS 协议调用 API 存储键值对. 命令行超级好用的虚拟机管理软件 vgrant 也是 HashiCorp 公司开发的产品.nginx
一致性协议采用 Raft 算法,用来保证服务的高可用. 使用 GOSSIP 协议管理成员和广播消息, 而且支持 ACL 访问控制.算法
Consul 的使用场景docker
docker 实例的注册与配置共享分布式
coreos 实例的注册与配置共享微服务
vitess 集群命令行
SaaS 应用的配置共享3d
与 confd 服务集成,动态生成 nginx 和 haproxy 配置文件cdn
Consul概览
首先Consul支持多数据中心,在上图中有两个DataCenter,他们经过Internet互联,同时请注意为了提升通讯效率,只有Server节点才加入跨数据中心的通讯。
在单个数据中心中,Consul分为Client和Server两种节点(全部的节点也被称为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,也能够经过Client使用RPC转发到Server,请求最终会到达Leader节点,在容许数据轻微陈旧的状况下,读请求也能够在普通的Server节点完成,集群内数据的读写和复制都是经过TCP的8300端口完成。 java B2B2C 源码 Springcloud多租户电子商城系统