eureka的缓存机制

^_^的我 3月前 ⋅ 273 阅读

Eureka server的三个变量

  • registry
  • readWriteCacheMap
  • readOnlyCacheMap

保存服务注册信息,默认情况下定时每30s将readWriteCacheMap同步至readOnlyCacheMap,每60s清理超过90s未续约的节点,eureka client每30s从readOnlyCacheMap更新服务注册信息,而UI则从registry更新服务注册信息。

三级缓存

  • registry 类型:ConcurrentHashMap

实时更新,类AbstractInstanceRegistry成员变量,UI端请求的是这里的服务注册信

  • readWriteCacheMap 类型:Guava Cache/LoadingCache

实时更新,类ResponseCacheImpl成员变量,缓存时间180秒

  • readOnlyCacheMap 类型:ConcurrentHashMap

周期更新,类ResponseCacheImpl成员变量,默认每30s从readWriteCacheMap更新,Eureka client默认从这里更新服务注册信息,可配置直接从readWriteCacheMap更新

缓存相关配置

  • eureka.server.useReadOnlyResponseCache 默认:true

Client从readOnlyCacheMap更新数据,false则跳过readOnlyCacheMap直接从readWriteCacheMap更新

  • eureka.server.responsecCacheUpdateIntervalMs 默认:30000

readWriteCacheMap更新至readOnlyCacheMap周期,默认30s

  • eureka.instance.leaseExpirationDurationInSeconds 默认:90

清理未续约节点超时时间,默认90s

Eureka Client

Eureka Client存在两种角色:服务提供者和服务消费者,作为服务消费者—般配合Ribbon或Feign (Feign内部使用Ribbon)使用。Eureka Client启动后,作为服务提供者立即向Eureka Server注册,默认情况下每30s续约;作为服务消费者立即向Server全量更新服务注册信息,默认情况下每30s增量更新服务注册信息;Ribbon延时1s向Client获取使用的服务注册信息,默认每30s更新使用的服务注册信息,只保存状态为UP的服务。

  • 二级缓存

    • localRegionApps 类型:AtomicReference

    周期更新,类DiscoveryClient成员变量,Eureka Client保存服务注册信息,启动后立即向Server全量更新,默认每30s增量更新

    • upServerListZoneMap 类型:ConcurrentHashMap

    周期更新,类LoadBalancerStats成员变量,Ribbon保存使用且状态为UP的服务注册信息,启动后延时1s向Client更新,默认每30s更新

  • 缓存相关配置

    • eureka.instance.leaseRenewalIntervalInSeconds 默认:30

    Eureka Client续约周期,默认30s

    • eureka.client.registryFetchIntervalSeconds 默认:30

    Eureka Client增量更新周期,默认30s (正常情况下增量更新,超时或与Server端不一致等情况则全量更新)

    • ribbon.ServerListRefreshInterval 默认:30000

    Ribbon更新周期,默认30s


全部评论: 0

    我有话说: