概述
Eureka 参数调优问题
- 1、说明
- 2、案例一
- 2.1 问题描述
- 2.2 原因与解决
- 3、案例二
- 3.1 问题描述
- 3.2 原因与解决
- 4、补充说明
1、说明
1、 本篇博文建议参考 《SpringCloud 服务注册和发现 Eureka组件》 阅读
2、本文主要讲解了以下两个调优的案例 :
- Eureka-client服务已经下线了,但是Eureka-Server接口返回的信息还是会存在。
- 新服务上线了,Eureka-Client服务不能及时获取到。
2、案例一
2.1 问题描述
问题:Eureka-client服务已经下线了,但是Eureka-Server接口返回的信息还是会存在。
2.2 原因与解决
Eureka-Server中的 注册列表(registry)会存留过期的实例。具体原因来自以下几个方面:
- 1、Eureka_Client应用实例异常挂掉了,但是没有能在挂掉前告知Eureka-Server服务,所以Eureka-Server服务没有下线挂掉的Eureka-Client服务实例信息。解决该问题可以依赖Eureka-Server 的 EvictionTask 去剔除已下线的Eureka-client服务实例信息。
解决方案:
可以在Eureka-Server服务中调整EvictionTask的调度频率,比如将调度间隔从默认的60秒,调整为5秒,即添加以下配置:
eureka:
server:
eviction-interval-timer-in-ms: 5000
- 2.Eureka-Client应用实例下线时告知Eureka-Server了,但是 Eureka-Server 的 REST API 有 response cache 缓存,所以需要等待缓存过期后才能更新。
解决方案:
可以根据情况考虑在Eureka-Server服务中关闭readOnlyCacheMap,即修改或添加以下配置:
eureka:
server:
use-read-only-response-cache: false
或者调整 readWriteCacheMap 的过期时间,即修改或添加以下配置:
eureka:
server:
response-cache-auto-expiration-in-seconds: 60
- 3.Eureka-Server 服务由于开启了Self Preservation 模式(自我保护模式),导致注册列表(registry)的信息不会因为过期而被剔除,直到退出自我保护模式(Self Preservation)。
解决方案:
在测试环境中可在Eureka-Server服务中关闭自我保护模式,即修改或添加以下配置:
eureka:
server:
enable-self-preservation: false
或
eureka:
server:
enableSelfPreservation: false
在生产环境下可以在Eureka-Server服务中把leaseRenewalIntervalInSeconds 和 renewal-percent-threshold 参数调小,从而提高触发自我保护机制的门槛,即修改或添加以下配置:
eureka:
server:
renewal-percent-threshold: 0.49 ## 指定每分钟需要收到的续约次数的阀值,默认值为0.85
以及
eureka:
instance:
leaseRenewalIntervalInSeconds: 10 # 默认值为30
3、案例二
3.1 问题描述
问题:新服务上线了,Eureka-Client服务不能及时获取到。
3.2 原因与解决
-
原因1:Eureka Client注册延迟
Eureka Client启动后,不是立即向Eureka Server注册的,而是有一个延迟向服务端注册的时间。通过跟踪源码,可以发现默认的延迟时间为40秒,源码在eureka-client-1.6.2jar的DefaultEurekaClientConfig类中。解决方案:
将实例信息变更同步到 Eureka Server的初始延迟时间,从默认的40秒修改到10秒,即修改或添加以下配置:
eureka:
client:
## InstanceInfoReplicator 将实例信息变更同步到 Eureka Server的初始延迟时间 ,默认为40秒
initial-instance-info-replication-interval-seconds: 10
- 原因2: Eureka Client缓存
Eureka Client保留注册表信息的缓存。该缓存每30秒更新一次。故Eureka Client刷新本地缓存并发现其他新注册的实例可能需要30秒。
解决方案:
在测试环境下,可以在Eureka-Client服务中适当提高 Eureka-Client端拉取 Server注册信息的频率,比如将默认频率由30秒改为5秒,即修改或添加以下配置:
eureka:
client:
registry-fetch-interval-seconds: 5
4、补充说明
除以上问题外,本人还遇到了另一个问题。即前端请求后端接口,通过gateway网关调用具体业务服务器时,比如登录时调用 users 服务,经常会在网关层面走熔断机制。于是对配置文件做了如下调整:
具体的业务服务(如 users 服务),添加或修改以下配置 :
eureka:
client:
## http 连接超时时间,默认为5秒,这里设置为30秒
eureka-server-connect-timeout-seconds: 30
网关服务( gateway),添加或修改以下配置 :
## eureka 服务注册中心配置
eureka:
client:
## InstanceInfoReplicator 将实例信息变更同步到 Eureka Server的初始延迟时间 ,默认为40秒
initial-instance-info-replication-interval-seconds: 10
server:
## 连接超时时间,节点之间连接超时时长(ms) 默认 200
peer-node-connect-timeout-ms: 5000
## 设置hystrix超时时间(毫秒) ,默认只有2秒,设置为30秒
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 30000
以上是本人在试点微服务时,测试阶段遇到的诸多问题,和一点薄见,欢迎各位大牛批评指正
.
最后
以上就是幸福香烟为你收集整理的Eureka 参数调优问题(注册延迟、缓存等)1、说明2、案例一3、案例二4、补充说明的全部内容,希望文章能够帮你解决Eureka 参数调优问题(注册延迟、缓存等)1、说明2、案例一3、案例二4、补充说明所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复