赞
踩
1、 本篇博文建议参考 《SpringCloud 服务注册和发现 Eureka组件》 阅读
2、本文主要讲解了以下两个调优的案例 :
- Eureka-client服务已经下线了,但是Eureka-Server接口返回的信息还是会存在。
- 新服务上线了,Eureka-Client服务不能及时获取到。
问题:Eureka-client服务已经下线了,但是Eureka-Server接口返回的信息还是会存在。
Eureka-Server中的 注册列表(registry)会存留过期的实例。具体原因来自以下几个方面:
eureka:
server:
eviction-interval-timer-in-ms: 5000
eureka:
server:
use-read-only-response-cache: false
或者调整 readWriteCacheMap 的过期时间,即修改或添加以下配置:
eureka:
server:
response-cache-auto-expiration-in-seconds: 60
解决方案:
在测试环境中可在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
问题:新服务上线了,Eureka-Client服务不能及时获取到。
原因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
eureka:
client:
registry-fetch-interval-seconds: 5
除以上问题外,本人还遇到了另一个问题。即前端请求后端接口,通过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
以上是本人在试点微服务时,测试阶段遇到的诸多问题,和一点薄见,欢迎各位大牛批评指正
.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。