深入理解Eureka - Eureka Server缓存机制

http://www.majunwei.com/view/201808131007529750.html

 

深入理解Eureka - Eureka Server缓存机制

马军伟   Spring Cloud深入原理   1368   2018-08-13 / 2018-08-13

目录 


为了提高Eureka Server注册中心的性能,Eureka Server提供了二级缓存机制,将服务注册信息保存在二级缓存中。

第一层缓存:readOnlyCacheMap,本质上是ConcurrentHashMap

第二层缓存:readWriteCacheMap,本质上是Guava缓存

缓存逻辑

Register、Cancel、Evict时都会清空二级缓存readWriteCacheMap。

 
  1. private void invalidateCache(String appName, @Nullable String vipAddress, @Nullable String secureVipAddress) {
  2. // invalidate cache
  3. responseCache.invalidate(appName, vipAddress, secureVipAddress);
  4. }

然后TimerTask定时(默认30S)将readWriteCacheMap同步到readOnlyCacheMap。

 
  1. if (shouldUseReadOnlyResponseCache) {
  2. timer.schedule(getCacheUpdateTask(),
  3. new Date(((System.currentTimeMillis() / responseCacheUpdateIntervalMs) * responseCacheUpdateIntervalMs)
  4. + responseCacheUpdateIntervalMs),
  5. responseCacheUpdateIntervalMs);
  6. }

缓存用途

Eureka Client获取注册列表时,首先判断是否开启了二级缓存,如果开启了则从readOnlyCacheMap中获取,否则从readWriteCacheMap中获取。

 
  1. /**
  2. * Get the payload in both compressed and uncompressed form.
  3. */
  4. @VisibleForTesting
  5. Value getValue(final Key key, boolean useReadOnlyCache) {
  6. Value payload = null;
  7. try {
  8. if (useReadOnlyCache) {
  9. final Value currentPayload = readOnlyCacheMap.get(key);
  10. if (currentPayload != null) {
  11. payload = currentPayload;
  12. } else {
  13. payload = readWriteCacheMap.get(key);
  14. readOnlyCacheMap.put(key, payload);
  15. }
  16. } else {
  17. payload = readWriteCacheMap.get(key);
  18. }
  19. } catch (Throwable t) {
  20. logger.error("Cannot get value for key : {}", key, t);
  21. }
  22. return payload;
  23. }

如何配置二级缓存

可通过eureka.server.shouldUseReadOnlyResponseCache配置决定是否开启二级缓存。默认是开启的(true)

待讨论问题

这里的二级缓存是通过TimerTask更新的(默认30S更新一次),也就是说在更新间隔内如果有register、cancel、evit操作,则一级缓存和二级缓存存在一定时间的不一致性,也就是获取到的不一定是最新的。如果对注册中心没有特别的性能需求,建议关闭。

 

Spring Cloud实战项目Jbone地址

github地址:https://github.com/417511458/jbone

码云地址:https://gitee.com/majunwei2017/jbone

 

原创文章,转载请注明出处:转载自小马过河 - 深入理解Eureka - Eureka Server缓存机制

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值