SpringCloud面试题, Eureka 和 Zookeeper 的区别是什么?
SpringCloud面试题, Eureka 和 Zookeeper 的区别是什么?
QA
Step 1
Q:: Eureka 和 Zookeeper 的区别是什么?
A:: Eureka 和 Zookeeper 都是用于服务注册与发现的工具,但它们有一些关键的区别:
1.
一致性保证:Zookeeper 保证强一致性,当一个节点失效时,Zookeeper 会将该节点标记为不可用。Eureka 则选择了最终一致性,它允许短时间的服务不一致以提高系统的可用性。当一个节点失效时,Eureka 并不会立即标记为不可用,而是给它一段时间来恢复,这样可以防止网络分区等短暂问题影响系统的稳定性。
2.
设计目标:Zookeeper 设计目标是为了确保分布式系统中的一致性,因此它在分布式协调服务中表现出色。Eureka 设计目标是为了提高可用性,即使在部分节点失效的情况下,系统仍然可以继续运行。
3.
CAP 定理:根据 CAP 定理,Zookeeper 更倾向于 CP(一致性和分区容忍性),而 Eureka 更倾向于 AP(可用性和分区容忍性)。
Step 2
Q:: 为什么在微服务架构中使用 Eureka 而不是 Zookeeper?
A:: 在微服务架构中,服务的数量和状态是动态变化的,因此需要一个能够快速响应并允许服务在短时间内恢复的注册中心。Eureka 提供了高可用性,并允许服务在短暂网络故障或节点失效的情况下继续运行,这非常适合微服务的场景。Zookeeper 的强一致性虽然在某些场景下很有用,但在高可用性要求更高的场景下,Eureka 更加合适。
Step 3
Q:: Eureka 是如何处理网络分区的?
A:: Eureka 采用了一种称为自我保护模式(Self-
Preservation Mode)的机制来处理网络分区。当 Eureka 服务器无法接收到预期数量的心跳(即服务实例的健康检查)时,它会进入自我保护模式。在这种模式下,Eureka 服务器不会从其注册表中移除任何服务实例,这样做的目的是为了防止在网络分区期间误删除仍然健康的服务实例。当网络恢复正常后,Eureka 会退出自我保护模式并恢复正常操作。