SpringCloud面试题, Eureka 的实现原理说一下?
SpringCloud面试题, Eureka 的实现原理说一下?
QA
Step 1
Q:: Eureka 的实现原理是什么?
A:: Eureka 是 Netflix 开源的一个服务发现框架,属于 Spring Cloud 的子项目之一。Eureka 的实现原理基于一种去中心化的设计理念,每个 Eureka 客户端既是一个服务的注册者,也是一个服务的消费者。Eureka 的服务端是一个注册中心,它存储了所有可用服务的实例信息。服务实例在启动时会向 Eureka 注册,并定期发送心跳以证明其存活。当消费者想要调用服务时,会从 Eureka 获取服务实例列表,进行负载均衡和调用。如果某个服务实例不可用,Eureka 将通过 '自我保护模式'
来减少误判,以确保高可用性。
Step 2
Q:: Eureka 的自我保护模式是什么?为什么需要这个模式?
A:: Eureka 的自我保护模式是为了防止误删服务实例。当 Eureka 服务端在一定时间内没有收到某些服务实例的心跳时,通常会认为这些服务实例不可用了,并将它们从注册表中剔除。然而,在网络波动或短暂故障的情况下,服务实例可能只是暂时无法联系,而实际并未下线。此时,如果 Eureka 服务端剔除了这些服务实例,会导致整个系统的可用性降低。自我保护模式允许 Eureka 暂时保留这些无法联系的服务实例,以确保服务的高可用性。这个模式在微服务架构中,特别是网络环境不稳定的场景下非常重要。
Step 3
Q:: Eureka 和 Zookeeper 相比有什么优势和劣势?
A:: Eureka 和 Zookeeper 都是服务注册与发现的解决方案。Eureka 的主要优势是其在设计上更适应云原生环境,尤其是它的 AP(可用性分区)模式,更适合于高可用性要求较高的场景。相比之下,Zookeeper 更偏向于一致性保证,在 CP(一致性分区)模式下表现更好,因此更适合于一致性要求较高的场景。Eureka 的劣势在于一致性可能会在极端情况下被牺牲,而 Zookeeper 的劣势则是它的可用性在网络分区或故障时可能会受到较大影响。