Spring Cloud-为什么Eureka Client获取服务实例这么慢

  1. Eureka Client的注册延迟
    Eureka Client启动之后, 不是立即向Eureka Server注册的, 而是有一个延迟的向服务端注册的时间, 通过源码, 可以发现默认的延迟时间是40s, 源码在eureka-client-xx.jar的DufaultEurekaClientConfig类中, 代码如下:
 public int getInitialInstanceInfoReplicationIntervalSeconds() {
        return this.configInstance.getIntProperty(this.namespace + "appinfo.initial.replicate.time", 40).get();
 }
  1. Eureka Server的响应缓存
    Eureka Server每隔30s更新一次响应缓存, 可通过配置eureka.server.response-cache-update-interval-ms来修改, 所以即便是刚刚注册的服务实例, 也不会立即出现在注册列表中
  2. Eureka Client的缓存
    Eureka Client保留注册列表信息的缓存, 该缓存每隔30s去更新(向Eureka Server请求)一次, 因此, Eureka Client刷新本地缓存并发现其他服务实例的时间可能需要30s
  3. LoadBalancer的缓存
    Ribbon的负载平衡器从本地的Eureka Cient获取服务注册列表信息, Ribbon本身还维护了缓存, 以避免每个请求都需要从Eureka Client获取服务注册列表信息, 此缓存每隔30s刷新一次(可由ribbon的相关配置修改), 所以可能需要至少30s的时间才能使用新注册的实例

综上因为, 一个新注册的实例, 默认延迟40s向服务中心注册, 所以不能马上被Eureka Server发现. 另外, 刚注册的Eureka Client也不能立即被其他服务调用, 原因是调用方由于各种缓存没有及时获取到最新的服务注册列表信息

posted @   KILLNPE  阅读(345)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示