Consul 是一个分布式,高可用,支持多数据中心的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源。 在Consul的文档上,Consul 支持Service Discovery, Health Checking, Key/Value Store, Multi DataCenter。运用Consul,可以在系统中build复杂的应用和服务的发现等。
Consul 的优势
使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft.
支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等. zookeeper 和 etcd 均不提供多数据中心功能的支持.
支持健康检查. etcd 不提供此功能.
支持 http 和 dns 协议接口. zookeeper 的集成较为复杂, etcd 只支持 http 协议.
官方提供web管理界面, etcd 无此功能.
consul 架构
从图中可以看出,consul是支持多数据中心的,并且多数据中心是一个非常common的用户场景。公司的项目中采用consul这是比较重要的一个考虑,之前的项目一直用的是zookeeper,实现多数据中心会有比较多的问题。
Agent - 运行在consul集群的每个node上的daemon,agent可以run在server或者是client上,每个agent都可以提供DNS或者是HTTP的接口,负责health check和service发现等。用consul agent命令可以启动,具体可run "consul agent --help"查看参数。
Client - client把所有的RPCs转发到server端,是相对无状态的。唯一在后台运行的时client端执行了LAN gossip pool,只消耗极少的资源和网络带宽。
Server - server 负责维护cluster state, RPC quiries, 和其他数据中心交换WAN gossip,转发queries给leader或者其他数据中心。
Datacenter -这里文档里面指的时网络环境是私有,低延迟,高带宽的,排除和公网的通信。其实我认为和vmware的概念有些类似,vmware的一台server下面的虚拟机也可以定义为一个datacenter,不同的server可以构成不同的datacenter,这里面还包含逻辑功能的划分。对于我们测试人员来说,单个人的测试环境可以作为一个datacenter。
Serf:consul是基于Serf上实现的,Serf是一个服务发现,编配(应用集群管理等)工具,它去中心化,高可用并且能故障恢复(容忍), Serf使用Gossip协议,采用Go语言编写。Serf提供成员关系,纠错检查,广播的功能。gossip包含的任意node-to-node间的通信,主要是基于UDP。
LAN Gossip - 指 LAN gossip pool 包含哪些都在同一局域网或者是datacenter的node。which contains nodes that are all located on the same local area network or datacenter.
WAN Gossip - 指 WAN gossip pool 包含哪些都在同一局域网或者是datacenter的node。
RPC - Remote Procedure Call. 客户端和服务器端的请求/应答机制。
本文暂时没有评论,来添加一个吧(●'◡'●)