查看原文
其他

面试题:Eureka 自我保护机制 是什么?

点击蓝字关注☞ 面试专栏 2021-08-29

本篇是1000期面试系列文章的第75,持续更新中.....

面试专栏:第11-20期

回复“面试”获取优质面试资源!

今天来分享一道Eureka的加分面试题,不清楚,那本文讲带你搞清楚。

自我保护机制出现的背景

Eureka的自我保护机制是为了防止误杀服务。当注册中心发生故障,服务不能够正常的续约,但是服务运行正常,默认情况下,Eureka会将超过90s未续约的服务进行移除。这样做明显不合理,所以Eureka提供了一个自我保护机制。

Eureka自我保护机制是什么?

  • Eureka在运行期间会统计心跳失败的比例,在15分钟内是否低于85%,如果出现了低于的情况,Eureka Server会将当前的实例注册信息保护起来,同时提示一个警告,表明进入了保护模式。

  • 一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据。也就是不会注销任何微服务。

  • 我们在开发测试阶段,需要频繁地重启发布,如果触发了保护机制,则旧的服务实例没有被删除,这时请求有可能跑到旧的实例中,而该实例已经关闭了,这就导致请求错误,影响开发测试。所以,在开发测试阶段,我们可以把自我保护模式关闭,只需在eureka server配置文件中加上如下配置即可:

eureka.server.enable-self-preservation = false
  • 自我保护模式可以让集群更加健壮。故障恢复时,自动退出自我保护模式。

  • 生产环境,不会频繁重启,所以,一定要把自我保护机制打开,否则网络一旦中断,就无法恢复。

Eureka服务端与客户端如何沟通?

服务注册

进行服务注册时,Eureka Client会向Eureka Server发送第一次心跳,会将服务的实例信息注册到注册中心

服务注册

Eureka Client 每30秒来发送一次心跳来更新实例信息。通知Eureka Server该实例仍然存在。如果超过90秒没有发送更新,则服务器将从注册信息中将此服务移除。续约时间可以更改,建议不要更改。

获取注册表

Eureka Client从Eureka Server获取注册表信息并在本地缓存它,之后,客户端使用该信息来查找其他服务。此信息会定期更新,30s更新一次,每次发送心跳的时候,就会与Eureka Server进行信息同步。

取消请求

Eureka Client在关闭时,会发送一个shutdown请求。这将从Eureka Server的实例注册表中删除实例,从而有效地使实例脱离流量。

定时刷新

Eureka Server会定时来刷新缓存,来确保注册服务的可用性。Eureka Client会定期来拉取(Fetch)注册信息。

福利时刻

公众号后台回复“1234”,免费获取下面优质面试资源(部分截图):

精彩推荐

面试官问:缓存与数据库一致性如何解决?

面试官:项目中有用过多线程吗

面试官:你有什么要问我的吗?

面试官:内存耗尽后Redis会会发生什么

    : . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存