作为服务注册中心,Eureka 比 Zookeeper 好在哪里

1、关系型数据库 (mySql,oracle,SqlServer 等)遵循的原则是 ACID 原则

  • A: 原子性
  • C: 一致性
  • I: 独立性
  • D: 持久性。

2、非关系型数据库( redis,mogoDB等 ),又称 NoSQL ,遵循的原则是 CAP原则

  • C: 强一致性
  • A: 可用性
  • P: 分区容错性

3、在 分布式 领域有一个很著名的 CAP定理

CAP 是 Consistency 、Availablity 和 Partition Tolerance 的缩写 。

  • C:数据一致性
  • A:服务可用性
  • P:分区容错性(服务对网络分区故障的容错性)

CAP 理论 在分布式存储系统中,最多只能实现以上两点。
由于当前网络延迟故障会导致丢包等问题,所以我们 分区容错性 是必须实现的,也就是NoSqL数据库 分区容错性(P) 肯定要有。 我们只能在 一致性(C)可用性(A) 中进行选择,没有哪个 NoSQL 数据库 能同时保证三点。(==> AP 或者 CP )

提出一个想法,当你面对双十一这种业务处理时,你是选择 CP 还是 AP 呢?

举个例子,淘宝系统在面对 “双十一” 的这种业务处理时,先保证可用性也就是AP原则(服务器不能瘫痪),还是必须保证数据一致(CP), 服务器瘫痪,宕机都是次要的?
毫无疑问,肯定选择是AP,先保证 服务器的正常运行,再过了双十一高峰,再核对数据,保证数据一致性。

前面铺垫了那么多也就是想说下,Eureka 和 Zookeeper 就是 CAP定理中的实现,Eureka(保证AP),Zookeeper(保证CP)。

4、作为服务注册中心,Eureka 比 Zookeeper 好在哪里

4.1、Zookeeper 保证 CP

当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接 down 掉不可用。也就是说,==服务注册功能对 可用性(A) 的要求要高于 一致性(C) == 。但是 zk 会出现这样一种情况,当 master 节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举 leader 的时间太长,30 ~ 120s, 且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。

4.2、Eureka 保证 AP

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

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

  1. Eureka 不再从注册列表中移除因为长时间没收到心跳而应该过期的服务 。
  2. Eureka 仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用) 。
  3. 当网络稳定时,当前实例新的注册信息会被同步到其它节点中 。

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

猜你喜欢

转载自blog.csdn.net/xiaojin21cen/article/details/86666208