三级缓存实操系列(四)

简介: 三级缓存实操系列(四)

TMC 本地缓存

如何透明TMC是如何减少对业务应用系统的入侵,做到透明接入的?

对于公司Java应用服务,在缓存客户端使用方式上分为两类:

(1)、基于spring.data.redis包,使用RedisTemplate编写业务代码;(2)、基于youzan.framework.redis包,使用RedisClient编写业务代码;

不论使用以上哪种方式,最终通过JedisPool创建的Jedis对象与缓存服务端代理层做请求交互。

TMC 对原生jedis包的JedisPool和Jedis类做了改造,

在JedisPool初始化过程中, 集成TMC“热点发现”+“本地缓存”功能 Hermes-SDK 包的初始化逻辑,

使Jedis客户端与缓存服务端代理层交互时, 先与Hermes-SDK交互,从而完成 “热点探测”+“本地缓存”功能的透明接入。

对于Java应用服务,只需使用特定版本的jedis-jar包,无需修改代码,即可接入TMC使用“热点发现”+“本地缓存”功能,做到了对应用系统的最小入侵。

整体结构

d3ef0aface2ab16db6a1f619ff33fbce.png

模块划分

TMC本地缓存整体结构分为如下模块:

(1)、Jedis-Client:Java应用与缓存服务端交互的直接入口,接口定义与原生 Jedis-Client 无异;

(2)、Hermes-SDK:自研“热点发现+本地缓存”功能的SDK封装, Jedis-Client 通过与它交互来集成相应能力;

(3)、Hermes服务端集群:接收Hermes-SDK 上报的缓存访问数据,进行热点探测,将热点key推送给Hermes-SDK做本地缓存;

(4)、缓存集群:由代理层和存储层组成,为应用客户端提供统一的分布式缓存服务入口;

(5)、基础组件:etcd集群、 Apollo配置中心,为TMC提供“集群推送”和“统一配置”能力

基本流程

(1)、Key值获取

1、 Java 应用调用 Jedis-Client 接口获取key的缓存值时,Jedis-Client 会询问 Hermes-SDK 该 key 当前是否是 热点key;

2、对于热点key ,直接从Hermes-SDK的热点模块获取热点key在本地缓存的 value值,不去访问缓存集群 ,从而将访问请求前置在应用层;

3、对于非热点key ,Hermes-SDK会通过Callabl 回调Jedis-Client的原生接口,从缓存集群拿到value值;

4、对于 Jedis-Client 的每次key值访问请求,Hermes-SDK都会通过其 通信模块将key访问事件异步上报给Hermes服务端集群 ,以便其根据上报数据进行“热点探测”;

(2)、key值过期

1、Java 应用调用 Jedis-Client 的 set() del() expire() 接口时会导致对应 key值失效,Jedis-Client会同步调用Hermes-SDK的invalid() 方法告知其“ key 值失效”事件;

2、对于热点key ,Hermes-SDK的热点模块会先将key在本地缓存的 value 值失效,以达到本地数据强一致。同时通信模块会异步将“ key 值失效”事件通过etcd集群推送给Java应用集群中其他Hermes-SDK 节点;

3、其他Hermes-SDK节点的通信模块收到 “ key 值失效”事件后,会调用 热点模块将key在本地缓存的value 值失效,以达到集群数据最终一致;

(3)、热点发现

1、Hermes服务端集群不断收集Hermes-SDK上报的 key访问事件,对不同业务应用集群的缓存访问数据进行周期性(3s一次)分析计算,以探测业务应用集群中的热点key列表;

2、对于探测到的热点key列表,Hermes服务端集群将其通过 etcd集群 推送给不同业务应用集群的Hermes-SDK通信模块,通知其对热点key列表进行本地缓存;

(4)、配置读取

1、Hermes-SDK在启动及运行过程中,会从Apollo配置中心读取其关心的配置信息(如:启动关 闭配置、黑白名单配置、etcd地址...);

2、Hermes服务端集群在启动及运行过程中,会从 Apollo配置中心读取其关心的配置信息(如:业务应用列表、热点阈值配置、 etcd地址...);

稳定性

TMC本地缓存稳定性表现在以下方面:

1、数据上报异步化:Hermes-SDK 使用 rsyslog技术 对“ key 访问事件”进行异步化上报,不会阻塞业务;

2、通信模块线程隔离:Hermes-SDK的通信模块使用独立线程池+有界队列,保证事件上报&监听 的I/O操作与业务执行线程隔离,即使出现非预期性异常也不会影响基本业务功能;

3、缓存管控:Hermes-SDK的热点模块对本地缓存大小上限进行了管控,使其占用内存不超过64MB(LRU),杜绝 JVM 堆内存溢出的可能;

一致性

TMC本地缓存一致性表现在以下方面:

1、Hermes-SDK的热点模块仅缓存热点key数据,绝大多数非热点key数据由缓存集群存储;

2、热点key变更导致value失效时,Hermes-SDK同步失效本地缓存,保证本地强一致;

3、热点key 变更导致 value 失效时,Hermes-SDK通过etcd集群广播事件,异步失效业务应用集群中其他节点的本地缓存,保证集群最终一致;

相关文章
|
8天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
4天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2463 14
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
4天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1502 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19274 29
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18822 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17515 13
Apache Paimon V0.9最新进展
|
6天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
365 11
|
1月前
|
存储 人工智能 前端开发
AI 网关零代码解决 AI 幻觉问题
本文主要介绍了 AI Agent 的背景,概念,探讨了 AI Agent 网关插件的使用方法,效果以及实现原理。
18697 16
|
2天前
|
算法 Java
JAVA并发编程系列(8)CountDownLatch核心原理
面试中的编程题目“模拟拼团”,我们通过使用CountDownLatch来实现多线程条件下的拼团逻辑。此外,深入解析了CountDownLatch的核心原理及其内部实现机制,特别是`await()`方法的具体工作流程。通过详细分析源码与内部结构,帮助读者更好地理解并发编程的关键概念。
|
2天前
|
SQL 监控 druid
Druid连接池学习
Druid学习笔记,使用Druid进行密码加密。参考文档:https://github.com/alibaba/druid
195 82