缓存压缩
bitmap缓存权限
热点探测
有赞TMC热key探测
TMC 热点发现流程分为四步:
- 数据收集:收集 Hermes-SDK 上报的 key访问事件;
- 热度滑窗:对 App 的每个 Key ,维护一个时间轮,记录基于当前时刻滑窗的访问热度;
- 热度汇聚:对 App 的所有 Key ,以
<key,热度>
的形式进行 热度排序汇总; - 热点探测:对 App ,从 热Key排序汇总 结果中选出 TopN的热点Key ,推送给 Hermes-SDK;
数据收集
通过本地rsyslog
将 key访问事件 以协议格式放入 kafka ,Hermes服务端集群 的每个节点消费 kafka 消息,实时获取 key访问事件。
访问事件协议格式如下:
- appName:集群节点所属业务应用
- uniqueKey:业务应用 key访问事件 的 key
- sendTime:业务应用 key访问事件 的发生时间
-
时间滑窗与映射任务
时间轮中共10个 时间片,每个时间片记录当前 key 对应 3 秒时间周期的总访问次数;
- 时间轮10个时间片的记录累加即表示当前 key 从当前时间向前 30 秒时间窗口内的总访问次数;
每3秒生成一个映射任务,取出所有key-热度的map, 遍历Map< uniqueKey , 热度 >>
中的 key ,对每个 key 取出其热度存入其 时间轮 对应的时间片中;
热点汇总
- 遍历 App 的所有热 key ,将每个 key 的 时间轮 热度进行汇总(即30秒时间窗口内总热度)得到探测时刻 滑窗总热度;
将
< key , 滑窗总热度 >
以排序集合的方式存入 Redis存储服务 中,即 热度汇聚结果;热点探测
在前几步,每3秒 一次的 映射任务 执行,对每个 App 都会产生一份当前时刻的 热度汇聚结果 ;
- Hermes服务端集群 中的“热点探测”节点,对每个 App ,只需周期性从其最近一份 热度汇聚结果 中取出达到热度阈值的 TopN 的 key 列表,即可得到本次探测的 热点key列表;
混合存储
内存+硬盘存储