著名的CAP
理论指出,一个分布式系统不可能同时满足
C(
一致性
)
、
A(
可用性
)
和
P(
分区容错性
)
。
由于分区容错性在是分布式系统中必须要保证的,因此我们只能在
A
和
C
之间进行权衡,在此
Zookeeper
保证的是
CP,
而
Eureka
则是
AP
。
Zookeeper保证数据一致性和分区容错性
在ZooKeeper
中,当
master
节点因为网络故障与其他节点失去联系时,剩余节点会重新进行
leader
选举,但是问题在于,选举
leader
需要一定时间
,
且选举期间整个
ZooKeeper
集群都是不可用
的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得
ZooKeeper
集群失去
master
节点是大概率事件,虽然服务最终能够恢复,但是在选举时间内导致服务注册长期不可用是难以容忍的。
Eureka保证可用性和分区容错性
Eureka优先保证可用性,
Eureka
各个节点是平等的,某几个节点挂掉不会影响正常节点的工作, 剩余的节点依然可以提供注册和查询服务。而Eureka
的客户端在向某个
Eureka
注册或时如果发现连接 失败,则会自动切换至其它节点,只要有一台Eureka
还在,就能保证注册服务可用
(
保证可用性
)
,只不 过查到的信息可能不是最新的(
不保证强一致性
)
。
所以Eureka
在网络故障导致部分节点失去联系的情况下,只要有一个节点可用,那么注册和查询服务就 可以正常使用,而不会像zookeeper
那样使整个注册服务瘫痪,
Eureka
优先保证了可用性。
总结
Eureka会造成短暂的数据不一致性,这是可以容忍的,但是zookeeper在主服务器down的时候,要选取新的主服务器,造成的时间导致服务注册长期不可用时难以容忍的,所以推荐使用Eureka,再加上Eureka集成Spring Cloud是十分方便的,所以推荐大家使用Eureka作为服务注册中心。