热key自动发现与处理
最新版本支持热点读的自动发现并触发客户端自动缓存,可有效保护服务端不被热点打穿,大幅提升缓存整体可用性,目前已经在线上稳定运行半年时间,欢迎大家使用。
热key的问题
秒杀、促销活动或突发的热点事件可能导致瞬间大量的请求去访问某个key。如此大的压力打到一个实例上,会导致该实例CPU飙升,响应变慢,甚至最终无法提供服务。当缓存无法提供服务的时候,请求会打到后端的DB上,会把DB打穿。
很多业务无法预先识别出这些热key。当热key发生不能有效地处理。
我们的方案
提供了毫秒级热key自动发现和热读自动处理的能力。
我们的优势
- 毫秒级热key自动发现的能力,自动触发客户端本地缓存。
- 服务端原生支持热key发现和推送,几乎不带来额外的开销,也不引入任何第三方服务的依赖。
- 业务无需提前判断热key。
- 服务端会记录历史上出现过的热点,为业务优化提供依据。
- 丰富的命令支持
- 本地缓存支持String/Hash所有类型的读命令exists、dump、mget、get、getRange、getBit、bitCount、strLen、hGet、hMGet、hExists、hLen、hKeys、hVals、hGetAll等(其中hash类型的 结构field数量默认最多支持5000)
- 支持同步、异步方式读取数据
- API完全兼容历史版本
- 最大程度保持数据一致性
- 数据发生修改,会通知客户端取消本地缓存。
- key的热度变冷,会通知客户端取消本地缓存。
- 无缝升级
- 2.x版本的升级无需修改任何代码,最新的2.1.10在API层兼容所有2.x版本。
- 1.x版本升级只需要少量代码调整。
注意事项
热key的自动处理需要业务能容忍一定程度的一致性问题。如果客户端和服务器已经是当前最新版本(版本在本文最后一节),热key功能默认是开启的。如果要求强一致的业务请关闭热key功能。
历史热key查询
工作方式
1、在客户端web页面的管理配置上点击“启用热Key缓存”(默认是开启的)。
2、服务端发现热key后,会通过tcp长连接通知到客户端sdk,客户端sdk会将热key自动缓存到本地。
3、如果热key发生了写操作,服务端会通知客户端将发生变化的热key从本地缓存删除,直到key再次被打热,如下图所示:
版本要求
客户端:jimclient2.1.10版以上,使用方法见:https://cf.jd.com/pages/viewpage.action?pageId=367705622
服务端:端的版本>=4.1.34。对此有诉求的业务方请联系@sunshanqing进行升级。