前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud Eureka如何解决服务上下线延时过长问题

Spring Cloud Eureka如何解决服务上下线延时过长问题

作者头像
海涛
发布2019-12-02 21:35:15
3.7K0
发布2019-12-02 21:35:15
举报
文章被收录于专栏:海涛技术日常

简述

1.降低延迟时间

1)中小型的项目建议关闭自我保护(eureka.server.enableSelfPreservation=false)

2)清理无效节点的时间间隔(evictionIntervalTimerInMs=5000)

3)降低心跳间隔(客户需要多长时间发送心跳给eureka服务器,表明它仍然活着,默认为30 秒,LeaseRenewalIntervalInSeconds)

4)降低无效判断时间(Eureka服务器在接收到实例的最后一次发出的心跳后,需要等待多久才可以将此实例删除,默认为90秒,leaseExpirationDurationInSeconds)

5)禁用Eureka的ReadOnlyMap缓存,解决eureka 的双缓存问题

6)降低ribbon缓存时间

2.增加重试机制

方法:

在网关、Fegin或者Ribbon上面添加请求重试机制

最好使用Ribbon来实现,让它重试其它节点

优化后的配置:

server端

代码语言:javascript
复制
## 禁用readOnlyCacheMap
eureka.server. useReadOnlyResponseCache=false
## 中小规模下,自我保护模式坑比好处多,所以关闭它
eureka.server.enableSelfPreservation=false
## 主动失效检测间隔,配置成5秒
eureka.server.evictionIntervalTimerInMs=5000
## 心跳间隔,5秒
eureka.instance.leaseRenewalIntervalInSeconds=5
## 没有心跳的淘汰时间
eureka.instance.leaseExpirationDurationInSeconds=10

client端

代码语言:javascript
复制
## 心跳间隔,5秒
eureka.instance.leaseRenewalIntervalInSeconds=5
## 没有心跳的淘汰时间,10秒
eureka.instance.leaseExpirationDurationInSeconds=10
# 定时刷新本地缓存时间
eureka.client.registryFetchIntervalSeconds=5
# ribbon缓存时间
ribbon.ServerListRefreshInterval=2000

参考 Eureka 参数配置详解:

https://www.cnblogs.com/fangfuhai/p/7070325.html

说明:

正常上线下线客户端最大感知时间:

eureka.client.registryFetchIntervalSeconds+ribbon. ServerListRefreshInterval

异常下线客户端最大感知时间:

2*eureka.instance.leaseExpirationDurationInSeconds+eureka.server.evictionIntervalTimerInMs+eureka.client.registryFetchIntervalSeconds+ribbon. ServerListRefreshInterval

总结:如果对上下线感知要求比较严格,可以考虑换一个(zookeeper或者nacos等)或者自研

附加知识点:使用kill命令优雅关闭微服务, 解决退出时Eureka取消注册操作耗时过长的坑

https://www.jianshu.com/p/c57d186eb454

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档