SpringCloud组件:Eureka服务注册中心的失效剔除与自我保护机制

Eureka作为一个成熟的服务注册中心当然也有合理的内部维护服务节点的机制,比如我们本章将要讲解到的服务下线失效剔除自我保护,也正是因为内部有这种维护机制才让Eureka更健壮、更稳定。

本章目标

了解Eureka是怎么保证服务相对较短时长内的有效性。

服务下线

迭代更新终止访问某一个或者多个服务节点时,我们在正常关闭服务节点的情况下,Eureka Client会通过PUT请求方式调用Eureka ServerREST访问节点/eureka/apps/{appID}/{instanceID}/status?value=DOWN请求地址,告知Eureka Server我要下线了,Eureka Server收到请求后会将该服务实例运行状态UP修改为DOWN,这样我们在管理平台服务列表内看到的就是DOWN状态的服务实例。

有关Eureka Server内部的REST节点地址,请访问SpringCloud组件:Eureka服务注册中心内置REST节点列表来了解详情。

失效剔除

Eureka Server在启动完成后会创建一个定时器每隔60秒检查一次服务健康状况,如果其中一个服务节点超过90秒未检查到心跳,那么Eureka Server会自动从服务实例列表内将该服务剔除

由于非正常关闭不会执行主动下线动作,所以才会出现失效剔除机制,该机制主要是应对非正常关闭服务的情况,如:内存溢出杀死进程服务器宕机非正常流程关闭服务节点时。

自我保护

Eureka Server自我保护机制会检查最近15分钟内所有Eureka Client正常心跳的占比,如果低于85%就会被触发。
我们如果在Eureka Server的管理界面发现如下的红色内容,就说明已经触发了自我保护机制

1
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

当触发自我保护机制Eureka Server就会锁定服务列表,不让服务列表内的服务过期,不过这样我们在访问服务时,得到的服务很有可能是已经失效的实例,如果是这样我们就会无法访问到期望的资源,会导致服务调用失败,所以这时我们就需要有对应的容错机制熔断机制,我们在接下来的文章内会详细讲解这块知识点。

我们的服务如果是采用的公网IP地址,出现自我保护机制的几率就会大大增加,所以这时更要我们部署多个相同InstanId的服务或者建立一套完整的熔断机制解决方案。

自我保护开关

如果在本地测试环境,建议关掉自我保护机制,这样方便我们进行测试,也更准备的保证了服务实例有效性!!!

关闭自我保护只需要修改application.yml配置文件内参数eureka.server.enable-self-preservation将值设置为false即可。

总结

我们通过本章的讲解,了解到了Eureka Server对服务的治理,其中包含服务下线失效剔除自我保护等,对自我保护机制一定要谨慎的处理,防止出现服务失效问题。

源码位置

有问题要问?

如果你有技术相关的问题想要咨询恒宇少年,请去博客首页左侧导航栏,点击知识星球微信扫码加入我的星球。

与恒宇少年面对面

如果你喜欢恒宇少年的相关文章,那么就去微信公众号(恒宇少年)关注我吧!!!
当然你也可以去 SpringCloud码云源码 项目底部扫描微信公众号二维码关注我,感谢阅读!!!

学习目录推荐

开源信息

这段时间一直在编写开源的相关框架,致力于公司使用的框架升级以及开源计划,将公司使用到的工具以及插件进行升级重构并且开源。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×