1、Consul 简介
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案, consul 的方案更“一站式”,内置了服务注册 与服务发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等,使用起来也较为简单。
Consul 用 Golang 实现,因此具有天然可移植性(支持 Linux、windows 和 Mac Os X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。其一致 性协议采用 Raft 算法,用来保证服务的高可用。使用 GOSSIP 协议管理成员和广播消息,并且支持ACL 访问控制。
1.1 Consul 的使用场景
-
服务通信地址域名化,动态迁移服务
-
SaaS 应用的服务发现与配置共享
-
与 consul-template 服务集成,动态生成 nginx 和 haproxy 配置文件
1.2 Consul 的优势
-
使用 Raft 算法来保证一致性,比复杂的 Paxos 算法更直接
-
支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障而其部署则需要考虑网络延迟,分片等情况等。 zookeeper 和 etcd 均不提供多数据中心功能的支持
-
支持健康检查,Etcd 不提供此功能
-
支持 HTTP 和 DNS 协议接口,Zookeeper 的集成较为复杂,Etcd 只支持 HTTP 协议
-
官方提供 Web 管理界面,Etcd 无此功能
常用注册中心对比如下图:

2、 Consul 架构
2.1 Consul 角色
-
client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。
-
server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据中心通讯。
Consul 客户端、服务端还支持跨中心的使用,更加提高了它的高可用性。
2.2 Consul 架构

2.3 工作原理

-
1、当 Producer 启动的时候,会向 Consul 发送一个 post 请求,告诉 Consul 自己的 IP 和 Port;
-
2、Consul 接收到 Producer 的注册后,每隔10s(默认)会向 Producer 发送一个健康检查的请求,检验Producer是否健康;
-
3、当 Consumer 发送 GET 方式请求 /api/address 到 Producer 时,会先从 Consul 中拿到一个存储服务 IP 和 Port 的临时表,从表中拿到 Producer 的 IP 和 Port 后再发送 GET 方式请求 /api/address;
-
4、该临时表每隔10s会更新,只包含有通过了健康检查的 Producer
网友评论