Consul是一种分布式、高可用且具有数据中心感知能力的服务网络解决方案,用于在动态和分布式基础架构之上连接和配置应用程序。
Consul原理概述。Consul使用基于Raft算法的一致性协议提供一致性,使用Gossip协议来管理成员以及在集群中广播消息。Consul使用了两种不同的Gossip协议,WAN Gossip协议和LAN Gossip协议,分别用于跨数据中心请求与数据中心内部的成员资格管理、分布式故障检测、事件广播等。Consul使用了一个先进的方法来维护服务和健康信息。熵(Entropy)是使系统越来越无序的趋势,Consul的反熵机制Anti-Entropy是设计用来对抗这一趋势的,用来在即使有组件失败的情况下保持集群状态的有序性。Consul使用Serf库计算群集中节点的网络坐标。Serf的网络断层扫描基于Vivaldi[28]并做了改进。使用坐标可以简单地评估节点间的往返时长,从而提供向地理最近的数据中心进行故障转移、寻找距离请求节点最近的服务节点等有用的服务。Consul受Chubby[29]启发,设计了一种细粒度的分布式锁。分布式锁提供的Session机制,可以绑定到节点、健康检查和KV存储。KV存储和Session的集成是使用Session的主要场景。Consul社区认为服务身份应与第4层相关,仅将授权和身份强制实施到第4层,而第7层应用于用于基于路径的路由、流量转移、负载均衡和遥测等。
Consul使用基于代理的模型,其中群集中的每个节点都运行Consul Client。客户端维护一个本地缓存,可以从服务器有效更新。所有安全服务通信API可以达到微秒级响应,并且不需要任何外部通信,这使得可以在边缘端增强连接,而无需与中央服务器进行通信。这极大地提高了Consul的可伸缩性,使其能够高效地分发更新并在边缘执行所有工作。应用程序还可以与Connect协议本地集成,引入Connect的性能开销可忽略不计。