Eureka服务下线后快速感知配置

简介:   现在由于eureka服务越来越多,发现服务提供者在停掉很久之后,服务调用者很长时间并没有感知到变化,依旧还在持续调用下线的服务,导致长时间后才能返回错误,因此需要调整eureka服务和客户端的配置,以便实现服务下线后快速感知。

  现在由于eureka服务越来越多,发现服务提供者在停掉很久之后,服务调用者很长时间并没有感知到变化,依旧还在持续调用下线的服务,导致长时间后才能返回错误,因此需要调整eureka服务和客户端的配置,以便实现服务下线后快速感知。

  需要调整服务注册中心、服务提供者和服务消费者三个配置。

服务注册中心EurekaServer

先上要更改的配置:

eureka:
  server:  #配置属性,但由于 Eureka 自我保护模式以及心跳周期长的原因,经常会遇到 Eureka Server 不剔除已关停的节点的问题
    enable-self-preservation: false # 设为false,关闭自我保护
    eviction-interval-timer-in-ms: 5000 # 清理间隔(单位毫秒,默认是60*1000)启用主动失效,并且每次主动失效检测间隔为3s

1.先要关闭自我保护 enable-self-preservation: false

2.eviction-interval-timer-in-ms 启用主动失效,并且每次主动失效检测间隔为5s

  Eureka Server会定时(间隔值是eureka.server.eviction-interval-timer-in-ms,默认值为0,默认情况不删除实例)进行检查,如果发现实例在在一定时间(此值由客户端设置的eureka.instance.lease-expiration-duration-in-seconds定义,默认值为90s)内没有收到心跳,则会注销此实例。

  有些文档指出还需要设置下面的两个参数(上下两种写法),但都测试后暂时没发现什么强关联性,这里暂时先不设置。

Eureka服务提供方、Eureka服务调用方修改如下配置:

eureka:
  instance:
    prefer-ip-address: true
    lease-renewal-interval-in-seconds: 4
    lease-expiration-duration-in-seconds: 12
  client:
    serviceUrl:
      defaultZone: http://localhost:1025/eureka
    fetch-registry: true
    registry-fetch-interval-seconds: 8

  客户端通过eureka.instance.lease-renewal-interval-in-seconds 每隔这个时间会主动心跳一次,默认值为30s,更新自己的状态。Eureka Server收到心跳后,会通知集群里的其它Eureka Server更新此实例的状态。

  lease-expiration-duration-in-seconds 设置服务过期时间配置,超过这个时间没有接收到心跳EurekaServer就会将这个实例剔除,一般是lease-renewal-interval-in-seconds的3倍。

  Eureka Server会定时(间隔值是eureka.server.eviction-interval-timer-in-ms,默认值为0,默认情况不删除实例)进行检查,如果发现实例在在一定时间(此值由eureka.instance.lease-expiration-duration-in-seconds定义,默认值为90s)内没有收到心跳,则会注销此实例。
经过测试设置4s上报一次心跳,12s内无跳就让注册中心剔除服务比较合理,上报时间若为2s,1000个服务会造成对注册中心请求的压力,且2s有可能网络抖动,整个时长6s无响应就判为下线会造成并发压力。

  消费端为了能快速响应服务请求会从Eureka Server拉取服务地址清单后缓存到本地(后面会增量获取),fetch-registry要设置为true,定期的更新客户端的服务清单时间 registry-fetch-interval-seconds: 8,这是消费端的设置。

测试总结

  • 只设置服务端Eureka Server的配置是无效的,还需要设置客户端来配合。
  • 调用方访问一个在注册中心不存在服务ID响应是非常快的,但如果访问一个ID还存在,但对应ip服务已经挂了的服务就是404,长时间无响应。
  • 服务提供者进程意外退出或服务完全卡住(是整个服务无法响应)情况是一样的,都是在指定服务的lease-expiration-duration-in-seconds时间内无心跳就会从注册中心剔除。
  • 注册中心把服务剔除后,调用方还需要时间刷新到本地缓存。

 

目录
相关文章
|
存储 运维 监控
超级好用的C++实用库之日志类
超级好用的C++实用库之日志类
272 0
|
传感器 机器学习/深度学习 弹性计算
Agent与大模型的区别
本文详细对比了人工智能领域的两个重要概念——Agent和大模型。大模型如GPT-3、BERT等,擅长自然语言处理任务,如文本生成、翻译等;Agent则是自主的软件实体,能够在特定环境中感知、决策并执行任务,如管理日程、控制智能家居等。文章介绍了它们的定义、功能、技术架构及应用场景,并总结了两者的核心差异和未来发展方向。
10748 26
|
算法 Java API
浅谈日出日落的计算方法以及替代工具 - 日出日落 API
如果你想知道精确的日落日出时间,又或者你想设计一个日出日落时间查询的应用,又或者你只是好奇点进来了,还是可以过来围观一下涨涨知识,今天想跟大家聊一聊的是日出日落的计算方法以及替代工具 - 日出日落 API 。
2405 0
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
6547 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
自然语言处理 JavaScript 开发者
通义灵码插件:VSCode 的智能编程助手
通义灵码插件:VSCode 的智能编程助手
11013 5
|
jenkins 持续交付
Jenkins(2)- 更改插件源为国内源
Jenkins(2)- 更改插件源为国内源
1621 0
Jenkins(2)- 更改插件源为国内源
|
安全 Java Spring
Spring Boot 关闭 Actuator ,满足安全工具扫描
Spring Boot 关闭 Actuator ,满足安全工具扫描
2436 0
|
Web App开发 JavaScript 前端开发
react18【系列实用教程】搭建开发环境(2024版)Vite+React (官方推荐)(含@配置,react-developer-tools 和 Redux DevTools 下载安装)
react18【系列实用教程】搭建开发环境(2024版)Vite+React (官方推荐)(含@配置,react-developer-tools 和 Redux DevTools 下载安装)
1264 1
|
Prometheus 监控 Cloud Native
Prometheus 安装与配置
Prometheus 安装与配置