缓存压缩

bitmap缓存权限

热点探测

有赞TMC热key探测

TMC 热点发现流程分为四步:

  • 数据收集:收集 Hermes-SDK 上报的 key访问事件
  • 热度滑窗:对 App 的每个 Key ,维护一个时间轮,记录基于当前时刻滑窗的访问热度;
  • 热度汇聚:对 App 的所有 Key ,以<key,热度>的形式进行 热度排序汇总
  • 热点探测:对 App ,从 热Key排序汇总 结果中选出 TopN的热点Key ,推送给 Hermes-SDK

image.png

数据收集

通过本地rsyslogkey访问事件 以协议格式放入 kafkaHermes服务端集群 的每个节点消费 kafka 消息,实时获取 key访问事件

访问事件协议格式如下:
  • appName:集群节点所属业务应用
  • uniqueKey:业务应用 key访问事件 的 key
  • sendTime:业务应用 key访问事件 的发生时间
  • weight:业务应用 key访问事件 的访问权值

    时间滑窗与映射任务
  • 时间轮中共10个 时间片,每个时间片记录当前 key 对应 3 秒时间周期的总访问次数;

  • 时间轮10个时间片的记录累加即表示当前 key 从当前时间向前 30 秒时间窗口内的总访问次数;

每3秒生成一个映射任务,取出所有key-热度的map, 遍历Map< uniqueKey , 热度 >>中的 key ,对每个 key 取出其热度存入其 时间轮 对应的时间片中;

热点汇总image.png
  • 遍历 App 的所有热 key ,将每个 key 的 时间轮 热度进行汇总(即30秒时间窗口内总热度)得到探测时刻 滑窗总热度
  • < key , 滑窗总热度 > 以排序集合的方式存入 Redis存储服务 中,即 热度汇聚结果

    热点探测

    image.png

  • 在前几步,每3秒 一次的 映射任务 执行,对每个 App 都会产生一份当前时刻的 热度汇聚结果

  • Hermes服务端集群 中的“热点探测”节点,对每个 App ,只需周期性从其最近一份 热度汇聚结果 中取出达到热度阈值的 TopN 的 key 列表,即可得到本次探测的 热点key列表

混合存储

内存+硬盘存储