面试题-dubbo+zookeeper与 eureka的区别

CAP 定理

分布式系统有三个指标:Consistency、 Availability、 Partition tolerance,它们的第一个字母分别是 C、A、P含义分别是一致性、可用性、分区容错,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。

P

分布式系统一般分布在多个子网络。每个子网络就叫做一个区(partition)。分区容错的意思是,区间通信可能失败。比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。一般来说,分区容错无法避免,因此 CAP 的 P 总是成立的。根据CAP 定理,剩下的 C 和 A 无法同时做到。

C和A的矛盾

一致性和可用性,为什么不可能同时成立?答案很简单,因为可能通信失败(即出现分区容错)。

面试题-dubbo+zookeeper与 eureka的区别

如图:如果保证 G2 的一致性,那么 G1 必须在写操作时,锁定 G2 的读操作和写操作。只有数据同步后,才能重新开放读写。锁定期间,G2 不能读写,没有可用性不。如果保证 G2 的可用性,那么势必不能锁定 G2,所以一致性不成立。

综上所述,G2 无法同时做到一致性和可用性。系统设计时只能选择一个目标。如果追求一致性,那么无法保证所有节点的可用性;如果追求所有节点的可用性,那就没法做到一致性。

 

区别

Zookeeper保证CP

zookeeper服务注册功能对可用性的要求要高于一致性。zk当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。

Eureka保证AP

Eureka在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。

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

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

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

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

Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。

 

上一篇:Java生成验证码图片


下一篇:2021年G2电站锅炉司炉新版试题及G2电站锅炉司炉找解析