consul使用go语言编写,因此具有天然可移植性(支持Linux、Windows、Mac OS X)。按照包仅包含一个可执行文件,方便部署,与docker等轻量级容器可无缝融合。
1.consul的特性
与其他分布式服务注册与发现相比,consul的方案更体现“一站式”。consul内置了服务注册与发现框架、分布式一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如zookeeper),使用起来比较简单。
2.consul的优势
与同类组件进行对比,consul主要有以下5点优势:
(1)使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft。
(2)支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等。 zookeeper 和 etcd 均不提供多数据中心功能的支持。
(3)支持健康检查。 etcd 不提供此功能。
(4)支持 http 和 dns 协议接口。 zookeeper 的集成较为复杂, etcd 只支持 http 协议。
(5)官方提供 web 管理界面, etcd 无此功能。
综合比较, Consul 作为服务注册和配置管理的新星, 比较值得关注和研究。
3.Consul架构解析
下面是从官网中找到的consul的架构图。
从架构图中可知,consul主要有两种角色——client和server。
consul client是无状态的,主要是将HTTP和DNS接口请求转发给局域网内的服务端集群。
consul server是一个高可用集群,主要是保存配置信息,在局域网内与本地客户端通信,通过广域网与其他数据中心通讯。每个数据中心的server数量推荐为3个或5个。