镜像详情地址:https://cloud.hainiubl.com/#/excellentImageDetail?id=24929&imageType=excellent
点击镜像详情页面最下方的“添加到实验配置”按钮可直接运行该实战镜像
一、需求说明
在开发中,热点缓存失效问题确实是一个常见且棘手的挑战。特别是在高并发的情况下,当热点商品地址数据的缓存失效时,所有请求都会直接到数据库,可能导致性能下降甚至宕机。该案例使用 JDHotKey 计算出热点商品并将热点商品缓存到jvm中,从jvm中获取缓存数据来解决缓存击穿问题。
二、环境介绍
机器介绍
- 缓存击穿镜像:共需要4台机器
- 一台12核16GB内存的机器:Idea、Etcd、Work、Dashboard
- 一台1核1G内存的机器:Mysql
- 一台1核1GB内存的机器:Redis
- 一台2核2GB内存的机器:Jmeter
流程介绍
- 解决缓存击穿问题
组件介绍
-
该案例采用SpringBoot+MyBatis+Redis+数据库(MySQL)来演示设置缓存TTL的方式来还原热点数据在过期场景
-
采用SpringBoot+MyBatis+Redis+JDHotKey+数据库(MySQL)来演示解决热点缓存失效问题
-
etcd:存放规则配置和各work的ip地址
-
work:定期上报⾃⼰的ip信息到etcd,供client端获取地址并进⾏⻓连接。对各个client发来的待测key进⾏累加计算,当达到etcd⾥设定的rule阈值后,将热key推送各个client。
-
dashboard:是⼀个带可视化界⾯的Java程序,连接到etcd,之后在控制台设置各个APP的key规则。当work探测出来热key后,会将key发往etcd,dashboard也会监听热key信息,进⾏⼊库保存记录。
- JDHotKey:对任意突发性的无法预先感知的热点请求,包括并不限于热点数据(如突发大量请求同一个商品)、热用户(如爬虫、刷子)、热接口(突发海量请求同一个接口)等,进行毫秒级精准探测到。然后对这些热数据、热用户等,推送到该应用部署的所有机器JVM内存中,以大幅减轻对后端数据存储层的冲击,并可以由客户端决定如何使用这些热key(譬如对热商品做本地缓存、对热用户进行拒绝访问、对热接口进行熔断或返回默认值)。这些热key在整个应用集群内保持一致性。
- jmeter:是一款压力测试软件,模拟高并发请求
您没有该镜像的运行权限,所以无权查看该笔记
版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-海牛博士,http://hainiubl.com/topics/76601