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

代码狂魔 2021-06-09 14:49:22 ⋅ 3473 阅读

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端

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

client端

## 心跳间隔,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


全部评论: 0

    我有话说:

    Spring Cloud(Greenwich版)-03-编写高可用Eureka Server(集群)

    前言 一章Spring Cloud(Greenwich版)-02-服务注册与服务发现-Eureka入门,我们实现了将User和Goods微服务都注册到了Eureka,那么在生产环境中为了达到高

    Spring Cloud快速搭建开放平台解决方案

    基于Spring Cloud开放平台解决方案 SOP

    码云推荐:一个优秀的分布式spring boot/Spring Cloud API限流框架,特别适合微服务架构

    一个优秀的分布式spring boot/Spring Cloud API限流框架,特别适合微服务架构.

    Spring Cloud(Greenwich版)-06-Spring Cloud集成Feign

    Spring Cloud系列教程第6节-Spring Cloud集成Feign

    深入理解 Spring Cloud 核心组件 底层原理

    搜云库技术团队:https://mp.weixin.qq.com/s/_KCBWTPvFQ2QsM4P8-gqTQ 之前一直在看 Spring Cloud 及微服务架构 对 Spring Cloud

    构建数据集成和实时数据处理流水线工具Spring Cloud Data Flow

    Spring Cloud Data Flow 是基于原生云对 Spring XD 的重新设计

    Spring Cloud Alibaba 发布毕业后的首个版本

    方剑,花名洛夜,GitHub ID @fangjian0423,开源爱好者,阿里巴巴高级开发工程师,阿里云产品 EDAS 开发,Spring Cloud Alibaba 开源项目负责人。

    【轻阅读】基于 Java Spring cloud的开源在线教育系统调试实战

    转载自:https://www.toutiao.com/i6759167063090004483开篇之前分享

    架构实战篇(十七):Spring Boot Assembly 整合 thymeleaf

    如何服务器sprig boot 项目升级变的方便快捷

    如何实现单服务器300万个连接的?

    有没有试验单机能抗300万个连接的操作?分享一下

    「转载」微服务分布式架构中,如何实现日志链路跟踪?

    背景 开发排查系统问题用得最多的手段就是查看系统日志,在分布式环境中一般使用ELK来统一收集日志,但是在并发大使用日志定位问题还是比较麻烦,我们来看下面的图     上图

    MateCloud 3.2.8 版本发布,基于 Spring Cloud Alibaba 的微服务平台

    软件简介 MateCloud 是一款基于Spring Cloud Alibaba的微服务架构。目前已经整合 Spring Cloud Gateway、Spring Security

    服务架构学习笔记:gRPC Spring Boot Starter 2.2.0 发布,及使用步骤

    gRPC Spring Boot Starter 项目是一个 gRPC 的 Spring Boot 模块。内嵌一个 gRPC Server 对外提供服务,并支持 Spring Cloud服务发现

    SpringBoot2.0填坑(一):使用CROS解决跨域并解决swagger 访问不了问题

    公司后台是采用SpringBoot2.0 搭建的微服务架构,前端框架用的是vue 使用前后端分离的开发方式,在开发联调的时候需要进行跨域访问,那么使用CROS解决了跨域问题,但是swagger 却用

    Nacos 1.4.1 发布,修复指定特殊 UA 可绕所有鉴权的安全漏洞

    Nacos 1.4.1 已发布,此版本的主要新功能是支持 IPv6 服务注册,以及为 Csharp 客户端提供 UDP push 支持。 更值得关注的是,1.4.1 版本解决了此前被曝出的绕鉴权的