HotKey探测关键指标
1、实时性
这个很容易理解,key往往是突发性瞬间就热了,根本不给你再慢悠悠手工去配置中心添加HotKey再推 送到jvm的机会。它大部分时间不可预知,来得也非常迅速,可能某个商家上个活动,瞬间HotKey就出现了。如果短时间内没能进到内存,就有redis集群被打爆的风险。所以HotKey探测框架最重要的就是实时性,最好是某个key刚有热的苗头,在10秒内它就已经进到整个 服务集群的内存里了,10秒后就不会再去密集访问redis了。同理,对于刷子用户也一样,刚开始刷,10秒内我就把它给禁掉了。
2、准确性
这个很重要,也容易实现,累加数量,做到不误探,精准探测,保证探测出的HotKey是完全符合用户自己设定的阈值。
3、集群一致性
这个比较重要,尤其是某些带删除key的场景,要能做到删key时整个集群内的该key都会删掉,以避免数据的错误。
4、高性能
这个是核心之一,高性能带来的就是低成本,做HotKey探测目的就是为了降低数据层的负载,提升应用层的性能,节省服务器资源。不然,大家直接去整体扩充本地缓存、或者redis集群规模就好了。理论上,在不影响实时性的情况下,要完成实时HotKey探测,所消耗的机器资源越少,那么经济价值就越大。
如何实现HotKey探测?
HotKey探测方案1:流计算集群
java 应用将访问记录发送到消息队列,如 kafka storm、flink 集群通过算子的方式进行top N基于滑动窗口,时间窗口的算法的计算,把top N 结果存在 redis的有序集合里面,其中的 top N的key,就是热点 key。
HotKey探测方案2:自研无入侵 hotkey 计算框架、多级缓存框架
有赞透明多级缓存解决方案
HotKey探测方案3:结合开源hotkey,做热点探测
比如:结合京东开源hotkey 框架,做缓存热点hotkey的探测, 从而实现 多级缓存框架, 提升本地缓存的命中率