12 张图 | 硬刚了一波,三层缓存架构

e655e548271fb1fb8a1d886e205d97f8.png

若有收获,请记得分享和转发哦

一、前言

上一讲我们讲到了 Eureka 注册中心的 Server 端有三级缓存来保存注册信息,可以利用缓存的快速读取来提高系统性能。我们再来细看下:

一级缓存:只读缓存 readOnlyCacheMap,数据结构 ConcurrentHashMap。相当于数据库。

二级缓存:读写缓存 readOnlyCacheMap,Guava Cache。相当于 Redis 主从架构中主节点,既可以进行读也可以进行写。

三级缓存:本地注册表 registry,数据结构 ConcurentHashMap。相当于 Redis 主从架构的从节点,只负责读。

看图更清晰,如下图所示:

0574c8568c84a9708affe3db54b8e088.png

另外 ConcurrenthashMap 也是一种 map 结构,也就是以键值对的方式进行存储,如下图所示:

eb2547b0a65ed2af1b23f419618df85d.png
Map 结构

二、引发的几个思考

我们再来看下 Eureka 源码,其实不难看懂,下面会做解释。

d8d3412ee0067f55652cc798a5f529c0.png

6ef47924bb16bc1272d24d256ec28f3f.png

0d77e687a6c9df0d64b8a9ad1c76b19a.png

我们再来看下其中的一种缓存结构:读写缓存。

四、读写缓存

读写缓存,顾名思义,就是既可以进行读,也可以进行写的缓存。读主要是给只读缓存来读取的。写主要是将缓存更新到自己的 Map 中。

下面分别从写缓存的原理、写缓存的源码、过期时机的原理、过期时机的源码几个方面来分别解答。

dd7b5179cb4fcfcc9e6068ca168d1991.png

746da3f3b413aed1f65ab4681f69e57b.png

14b6e649fd5584e3d7592e27739a961b.png

abb7b47d25de56f30088369cf06f23b0.png

3.3 实时过期

当有新的服务实例进行注册或者下线、发生故障时,就会把这个对应的服务实例的缓存给过期掉。

如下图所示,最上面的是注册中心,下面三个是服务实例。服务实例发生注册、下线、发生故障,注册中心都是可以感知到的,然后就会主动过期读写缓存对应的服务实例。

1a002a64032c71dcf4de7606f815c989.png

7b13b8d15b8afd6cd091770915b7f4a0.png

b21f2416579882aaa8839f03ace1406c.png

1e160a96832d0c4d3fee09060fd513de.png

f515e5ef823d6301f60580ff1c99738c.png

eff3481a45d4ca8a4cc3b225cbf14e1f.png

(2)服务端,我们也可以考虑关闭从只读缓存读注册表信息,Eureka Client 直接从读写缓存读取。

d2eb762add3fbd8955b37b94b4542cbf.png

八、总结

29adcc61539d829b75c73c5160c8338e.png

db081b011e7386f1cbd392e5efdf4595.png

本篇学习了 Eureka 注册中心 Server 端的三层缓存架构,分为 registry、readOnlyCacheMap、readWriteCacheMap,用来保存服务注册信息。

  • 默认情况下,每隔 30 秒从读写缓存将注册信息更新到只读缓存。

  • 默认情况下,客户端读取注册表时,先从只读缓存读,如果没有,则从读写缓存中读取,如果还是没有,则从本地注册表 registry 读取。

  • 默认情况下,每隔 180 秒定时过期读写缓存。

  • 服务实例注册、下线、故障时,会实时过期读写缓存。

  • 引入了多级缓存,也会带来缓存不一致的问题。

a084310b516775bc347e1cc6534800a1.png

烧脑?放松一下,听下音乐吧

0b32cd4e3d2ce168a8b09159f4bb7bc6.png

点击下方

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值