微服务——Eureka与Zookeeper的区别(二)

生态

在微服务的开发过程中,如果使用的是 Dubbo 那就必须使用到 Zookeeper ,在使用 Spring Cloud Eureka 时,自然其功能更强大得多。Spring Cloud Eureka 后来者居上,Dubbo 早在几年前停止了维护,在其停止了维护的几年里正是互联网发展的大好时期,Eureka 借机快速发展,夺得了一大片市场,可以说已经超越了 Dubbo 了,17 年的时候,阿里巴巴又突然宣布重启对 Dubbo 的维护,在其重启的发布会上,其主导维护者也表示,将希望加入 Eureka 的生态…

CAP 定理

原理

一个系统不可能同时满足一致性(C)、可用性(A)、分区容错性(P)

Eureka与Zookeeper的区别_2019-11-28-10-31-07.png

三个指标

  • 一致性:在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)。
  • 可用性:在一个分布式系统的集群中一部分节点故障后,该集群是否还能够正常响应客户端的读写请求。(对数据更新具备高可用性)。
  • 分区容错性:大多数的分布式系统都分布在多个子网络中,而每个子网络就叫做一个区(partition)。分区容错的意思是,区间通信可能失败。在一个分布式系统中一般分区容错是无法避免的,因此可以认为 CAP 中的 P 总是成立的。CAP 理论告诉我们,在 C 和 A 之间是无法同时做到。

Zookeeper 保证 CP

  • 任何时候对 Zookeeper 的访问请求能得到一致的数据结果,同时系统对网络分割具备容错性
  • 在使用 Zookeeper 获取服务列表时,如果此时的 Zookeeper 集群中的 Leader 宕机了,该集群就要进行 Leader 的选举,又或者 Zookeeper 集群中半数以上服务器节点不可用(例如有三个节点,如果节点一检测到节点三挂了 ,节点二也检测到节点三挂了,那这个节点才算是真的挂了),那么将无法处理该请求。所以说,Zookeeper 不能保证服务可用性。

Eureka 保证 AP

  • 各个节点是平等的,几个节点挂掉,其他节点依然可以提供服务,首先报证可用性。
  • 每个 Eureka Client 本地都有一份它最新获取到的服务注册表的缓存信息,即使所有的 Eureka Server 都挂掉了,依然可以根据本地缓存的服务信息正常工作。
  • 如果 Eureka 服务节点在短时间里丢失了大量的心跳连接(注:可能发生了网络故障),那么这个 Eureka 节点会进入自我保护模式。 此时,这个 Eureka 节点对于新的服务还能提供注册服务,对于”死亡“的仍然保留,以防还有客户端向其发起请求。当网络故障恢复后,这个 Eureka 节点会退出自我保护模式。
  • Eureka 不能保证每次获取的服务列表都是最新的

总结

对于服务发现来讲,保证服务的高可用尤为重要,哪怕返回前几分钟的服务信息,也比出现网络故障要好。

参考资料

为什么不应该使用 Zookeeper 做服务发现

文章目录
  1. 1. 生态
  2. 2. CAP 定理
    1. 2.1. 原理
    2. 2.2. 三个指标
  3. 3. Zookeeper 保证 CP
  4. 4. Eureka 保证 AP
  5. 5. 总结
  6. 6. 参考资料
|