Consul is built to be region and datacenter aware. For example, when doing service discovery it can be instructed to only return services present in the current datacenter to limit latency.
consul-discovery
consul-config
consul-bus
Consul使用Go语言编写。
Consul 使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接。
Consul Cluster集群
Consul Cluster集群架构图Consul 强一致性(C)带来的是:
服务注册相比 Eureka 会稍慢一些。因为 Consul 的 raft 协议要求必须过半数的节点都写入成功才认为注册成功。 Leader 挂掉时,重新选举期间整个 Consul 不可用。保证了强一致性但牺牲了可用性。
Eureka 保证高可用(A)和最终一致性:
服务注册相对要快,因为不需要等注册信息 replicate 到其它节点,也不保证注册信息是否 replicate 成功 当数据出现不一致时,虽然 A, B 上的注册信息不完全相同,但每个 Eureka 节点依然能够正常对外提供服务,这会出现查询服务信息时如果请求 A 查不到,但请求 B 就能查到。如此保证了可用性但牺牲了一致性。
Reference
Spring Cloud(二)Consul 服务治理实现
基于nginx和consul构建高可用及自动发现的docker服务架构
springcloud(十三):注册中心 Consul 使用详解
现有系统如何集成Consul服务发现
Consul微服务的配置中心体验篇
Consul Config 使用Git做版本控制的实现
Spring Cloud Consul 之Greenwich版本全攻略
Nacos 注册中心的设计原理详解
服务发现框架选型,Consul还是Zookeeper还是etcd
consul 源码解析(一)raft 协议实现
网友评论