技术分享系统架构

利用zookeeper即时更新本地缓存

2019-10-17  本文已影响0人  无醉_1866

本地缓存

当系统中需要有一些基础数据时,往往会使用本地缓存将这些数据缓存在内存中,以减少对数据库的查询,提升系统性能,但是本地缓存如何处理数据更新的情况呢?当应用集群中某台机器更新了数据,其它机器如何快速响应?

一般更新本地缓存有如下 方式:

本文介绍第三种方式,如何利用zookeeper做缓存的即时更新

基本思路

假设应用有三台机器,分别标记为A\B\C,整个过程遵循如下逻辑:

整体逻辑如下图:

image

实现

将实现分为两部分,第一部分基于zk实现一个可复用的通知服务,用于通知集群中的其它机器,第二部分基于通知服务实现对缓存的封装

通知服务

通知服务抽象出一个资源的概念,用String表示资源Id,一个资源Id对应于zookeeper上的一个节点,针对资源id触发通知服务实际上就是修改资源id对应的节点上的数据,接口如下:

image

接口定义中包含三个方法:

image

缓存封装

因为本地缓存有多种实现方式:

为了支持各种类型的local cache实现,定义CacheProvider接口,用于创建缓存:

image

为zookeeper提供抽象类的支持:

image

不同的local cache实现从此abstract类继承,例如guava的实现:

image

基于ConcurrentHashMap的local cache实现:

image

最后通过一个工具类提供的工厂方法来使用:

image

使用方式

最后看一下使用方式:

image.png
上一篇下一篇

猜你喜欢

热点阅读