在Eureka机制下客户端服务优雅停机实践

本文详细介绍了如何在Eureka架构中实现客户端服务的优雅停机,包括服务端配置如清除失效服务时间和自我保护机制,以及客户端配置如心跳间隔和流量控制。讨论了正常下线和异常下线的不同耗时情况,以及如何配合其他组件进行流量节流和停机期间的请求处理。
摘要由CSDN通过智能技术生成

Eureka服务端配置

配置名称配置作用
eureka.server.eviction-interval-timer-in-ms定时清除服务失效的间隔时间
eureka.server.use-read-only-response-cache是否使用Eureka缓存
eureka.server.response-cache-update-interval-msEureka缓存更新间隔时间
eureka.server.enable-self-preservation自我保护机制,默认开启

Eureka客户端配置

配置名称配置作用
eureka.instance.lease-renewal-interval-in-seconds服务续约心跳间隔,默认30s
eureka.instance.lease-expiration-duration-in-seconds没有心跳的淘汰时间,默认为3个心跳,90s
eureka.client.registry-fetch-interval-seconds拉取服务注册信息间隔,默认

优雅停机实现原理

需求:当客户端需要停机时,需要将服务在Eureka服务端下线,然后将已经请求到服务的流量处理完成后再停机。
需求拆分:

  1. 停止节流:Eureka服务端下线服务,需要在尽可能短的时间将服务从服务注册表中删除,同时Eureka服务端还需具备抵御网络抖动的能力
  2. 处理完成已经打到服务的请求,服务需要留足够多的时间来处理请求
  3. 停机

Eureka配置

服务端
eureka.server.eviction-interval-timer-in-ms600000(1min)
eureka.server.use-read-only-response-cachetrue
eureka.server.response-cache-update-interval-ms10000(10s)
eureka.server.enable-self-preservationtrue
客户端
eureka.instance.lease-renewal-interval-in-seconds5
eureka.instance.lease-expiration-duration-in-seconds15
eureka.client.registry-fetch-interval-seconds5

分析不同下线情况下耗时
正常下线耗时:20s = 5s(客户端上报服务下线)+ 10s(Eureka缓存刷新时间) + 5s(客户端拉取注册信息表数据)
异常下线耗时:30s = 15s(客户端3周期没有续约) + 10s(Eureka缓存刷新时间) + 5s(客户端拉取注册信息表数据)

其余线上流量

除调整Eureka配置外,还需要将其余承接线上流量的组件关闭节流,使用@PreDestroy关闭节流。

停机配置

在关闭接流期间打到服务的请求,需要留足够多的时间来处理,因此在使用容器部署的服务需要将容器销毁的等待时间设置为30s以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值