面试题答案
一键面试服务续约实现
- 客户端:
- 微服务客户端会定期(默认30秒)向Eureka Server发送心跳请求,这个过程就是服务续约。客户端通过向Eureka Server表明自己仍然存活,告知Eureka Server该服务实例正常运行。
- 客户端在启动时,会从配置文件中读取Eureka Server的地址,并建立连接,后续按照设定的续约间隔时间发送心跳。
- 服务端:
- Eureka Server在接收到客户端的心跳请求后,会更新该服务实例的最后一次心跳时间戳。如果Eureka Server在一定时间内(默认90秒,即3个续约周期)没有收到某个服务实例的心跳,就会将该实例标记为过期。
服务剔除实现
- 自我保护机制:
- Eureka Server在运行过程中有一个自我保护机制。当在15分钟内,超过85%的客户端心跳续约失败时,Eureka Server会进入自我保护模式。在这种模式下,Eureka Server不会轻易剔除服务实例,以防止因网络故障等原因导致大量服务实例被误删。
- 正常剔除:
- 当服务实例没有按时发送心跳(超过90秒)且Eureka Server未处于自我保护模式时,Eureka Server会将该服务实例从服务注册表中剔除。Eureka Server有一个后台线程,会定时(默认每隔60秒)检查服务实例的状态,对于过期的实例进行剔除操作。
对系统稳定性的影响
服务续约影响
- 积极影响:
- 保证服务发现准确性:通过服务续约,Eureka Server能实时了解服务实例的存活状态,确保服务消费者从Eureka Server获取到的服务列表中的实例都是存活且可用的,使得服务调用能够正常进行,减少因调用已停止服务实例而导致的失败,增强系统的稳定性。
- 动态感知服务状态:服务续约机制可以让系统动态感知服务实例的状态变化,如服务的启动、停止、重启等,从而更好地进行资源分配和负载均衡。例如,当一个新的服务实例启动并成功续约后,负载均衡器可以将请求分配到该实例上,提高系统整体的处理能力。
- 消极影响:
- 网络压力:如果服务实例数量较多,每个实例频繁发送心跳进行服务续约,会产生一定的网络流量,可能对网络造成压力,尤其在网络带宽有限的情况下,可能影响其他重要业务数据的传输,进而影响系统稳定性。
服务剔除影响
- 积极影响:
- 避免无效调用:及时剔除过期的服务实例,能防止服务消费者调用到已经停止或故障的服务实例,避免因调用失败导致的业务中断,提升系统的整体稳定性和可靠性。
- 优化资源使用:剔除不再可用的服务实例,可以减少Eureka Server维护的无效信息,优化内存等资源的使用,提高Eureka Server自身的性能,进而保障整个微服务架构的稳定性。
- 消极影响:
- 误剔除风险:在网络不稳定的情况下,可能会出现服务实例心跳暂时丢失,导致被误剔除。例如,短暂的网络闪断可能使服务实例的心跳请求未能及时到达Eureka Server,从而被误判为过期并剔除,这可能导致服务消费者无法调用到原本正常运行的服务实例,影响系统的稳定性。而自我保护机制就是为了尽量减少这种误剔除情况的发生。