首页 > hot资讯 > Eureka与Zookeeper比较

Eureka与Zookeeper比较

更新时间:2020-09-21 17:24 浏览109次 来源:动力节点

Spring Cloud是java微服务架构中目前最流行的框架之一,Spring Cloud提供了多种服务注册与发现的实现方式,有Eureka、Consul和Zookeeper。前面学习了Eureka与Zookeeper的基本内容,这篇文章是关于Eureka与Zookeeper比较分析,学习二者之间有什么区别。

image.png

著名的CAP理论指出,一个分布式系统不可能同时满足 C(一致性)、A(可用性) 和 P(分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡,在此 Zookeeper 保证的是 CP, 而 Eureka则是 AP。

Eureka与Zookeeper比较,可分为以下两个方面:

1、Zookeeper保证CP

在ZooKeeper中,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举,但是问题在于,选举leader需要一定时间, 且选举期间整个ZooKeeper集群都是不可用的,这就导致在选举期间注册服务瘫痪。

在云部署的环境下,因网络问题使得 ZooKeeper 集群失去 master 节点是大概率事件,虽然服务最终能够恢复,但是在选举时间内导致服务注册长期不可用是难以容忍的。

2、Eureka 保证AP

Eureka优先保证可用性,Eureka各个节点是平等的,某几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而 Eureka 的客户端在向某个Eureka 注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。所以Eureka在网络故障导致部分节点失去联系的情况下,只要有一个节点可用,那么注册和查询服务就可以正常使用,而不会像zookeeper那样使整个注册服务瘫痪,Eureka优先保证了可用性。

除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:

(1)Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务;

(2)Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用);

(3)当网络稳定时,当前实例新的注册信息会被同步到其它节点中。

以上就是Eureka与Zookeeper比较的内容,总的来说,Zookeeper的设计理念就是分布式协调服务,保证数据(配置数据,状态数据)在多个服务系统之间保证一致性,Eureka是吸取Zookeeper问题的经验,先保证可用性。希望这篇关于Eureka与Zookeeper比较的文章,可以帮助到大家。


热门课程推荐

全部班型支持免费试学

动力节点在线报名表(此信息已加密,请放心填写)

返回顶部