热key自动发现与处理

最新版本支持热点读的自动发现并触发客户端自动缓存,可有效保护服务端不被热点打穿,大幅提升缓存整体可用性,目前已经在线上稳定运行半年时间,欢迎大家使用。

 

热key的问题

秒杀、促销活动或突发的热点事件可能导致瞬间大量的请求去访问某个key。如此大的压力打到一个实例上,会导致该实例CPU飙升,响应变慢,甚至最终无法提供服务。当缓存无法提供服务的时候,请求会打到后端的DB上,会把DB打穿。

很多业务无法预先识别出这些热key。当热key发生不能有效地处理。

 

我们的方案

提供了毫秒级热key自动发现和热读自动处理的能力。

 

我们的优势

  •   毫秒级热key自动发现的能力,自动触发客户端本地缓存。
  1.  服务端原生支持热key发现和推送,几乎不带来额外的开销,也不引入任何第三方服务的依赖。
  2.  业务无需提前判断热key。
  3.   服务端会记录历史上出现过的热点,为业务优化提供依据。
  •  丰富的命令支持
  1.  本地缓存支持String/Hash所有类型的读命令exists、dump、mget、get、getRange、getBit、bitCount、strLen、hGet、hMGet、hExists、hLen、hKeys、hVals、hGetAll等(其中hash类型的 结构field数量默认最多支持5000)
  2.   支持同步、异步方式读取数据
  3.   API完全兼容历史版本
  •   最大程度保持数据一致性
  1. 数据发生修改,会通知客户端取消本地缓存。
  2.  key的热度变冷,会通知客户端取消本地缓存。
  • 无缝升级
  1. 2.x版本的升级无需修改任何代码,最新的2.1.10在API层兼容所有2.x版本。
  2. 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进行升级。

posted @ 2021-02-05 10:12  姚春辉  阅读(304)  评论(1编辑  收藏  举报