SpringCloud面试题, Eureka 是怎么实现高可用的?
SpringCloud面试题, Eureka 是怎么实现高可用的?
QA
Step 1
Q:: Eureka 是怎么实现高可用的?
A:: Eureka 通过集群来实现高可用。Eureka 集群中的每个节点既是一个服务注册中心,同时也会向其他节点注册自己。在服务注册时,服务实例会将自己的元数据(如主机名、IP 地址、端口号、状态等)注册到 Eureka Server。当 Eureka Server 集群中的一个节点宕机时,其他节点依然可以提供服务,从而保证了高可用性。此外,Eureka 还采用了心跳机制和自我保护机制。当服务实例注册到 Eureka Server 后,会定期发送心跳请求来表明自己仍然存活。如果 Eureka Server 在一定时间内没有收到服务实例的心跳请求,就会认为该实例已经不可用并将其从注册表中剔除。而自我保护机制的引入,可以防止因为网络问题导致的误判。
Step 2
Q:: Eureka 的自我保护机制是什么?
A:: Eureka 的自我保护机制是一种容错保护模式,当 Eureka Server 在短时间内丢失了大量客户端心跳连接时,会触发该机制。Eureka Server 会停止移除服务注册表中的实例,这样做的目的是为了保护已经注册的微服务实例,防止因为网络分区或者短时间内的大量实例宕机而导致的服务不可用。在自我保护模式下,Eureka Server 仍然能够提供注册和发现服务,但不会剔除任何实例,直到网络恢复正常或者系统管理员手动解除该模式。
Step 3
Q:: Eureka 的服务注册和发现流程是怎样的?
A:: 在 Eureka 中,服务实例启动后,会将自己的信息(如 IP 地址、端口、版本号等)注册到 Eureka Server 中,并在 Eureka Server 中维护一个租约(Lease),租约的有效期通常是 90 秒。Eureka Client 会每隔 30
秒向 Eureka Server 发送一次心跳请求以续约租期。在注册和续约的过程中,如果 Eureka Server 没有在规定时间内收到服务实例的心跳请求,那么 Eureka Server 会将该实例标记为不可用并最终从注册表中移除。服务发现的过程是:当一个服务实例需要调用另一个服务时,它会向 Eureka Server 查询可用的服务列表,并从中选择一个实例进行调用。
Step 4
Q:: Eureka 的自我保护机制的优缺点是什么?
A:: 自我保护机制的优点是可以防止网络分区问题导致的大规模服务下线,确保在网络恢复之前服务能够继续运行。但缺点是当自我保护机制被触发时,Eureka Server 可能会保留已经不可用的服务实例信息,这会导致客户端调用失败。因此,在开启自我保护机制时,需要权衡服务的可用性和一致性。