本项目实现了一个独立的 点赞统计中间件,通过 冷热数据分离策略 和 动态采样判断机制,在高并发场景下优化系统性能,降低 Redis 缓存压力,同时保障数据的准确性和持久性。以下是详细设计与使用说明。
-
冷热数据分离
- 热数据:存储在 Redis,处理高频点赞请求,支持快速读取与更新。
- 冷数据:存储在硬盘文件,适合低频访问的视频点赞记录。
-
动态采样判断
- 随机取样检测冷数据的访问频率,动态调整样本大小。
- 基于密度阈值触发机制,判断冷数据是否需要迁移为热数据。
-
自动迁移机制
- 冷数据达到热度标准时迁移至 Redis。
- 热数据长时间不活跃时迁移回冷数据文件。
-
异步数据备份
- 热数据与冷数据均定期异步写入 MySQL,确保数据持久化与恢复能力。
+------------------+
| API 层 | <- 提供点赞服务接口,处理请求
+------------------+
|
+------------------+
| 冷数据管理模块 | <- 将冷数据存储在硬盘文件中
+------------------+
|
+------------------+
| 热数据缓存模块 | <- 使用 Redis 存储高频访问数据
+------------------+
|
+------------------+
| 数据迁移模块 | <- 热/冷数据的迁移逻辑
+------------------+
|
+------------------+
| 数据备份模块 | <- 定期将数据写入 MySQL
+------------------+
- 热数据:使用 Redis 的
HSET存储,每个视频的点赞数作为键值对存储在 Redis 中。 - 冷数据:每个视频对应一个文件,按行记录点赞的时间戳,支持高效写入和按需读取。
-
采样判断:
- 定期触发,取样一部分冷数据文件,统计点赞数量。
- 根据采样结果,判断视频记录文件是否需要触发迁移检查操作。
- 根据采样触发频率,和冷热数据切换频率来控制hash轮转速率,和布隆过滤器刷新速率。
-
触发机制:
- 布隆过滤器命中,触发迁移检查
- 文件行数达到阈值时,强制触发迁移检查,避免出现巨型文件。
- 采样计算冷数据访问频率,判断是需要触发迁移检查。
- 根据点赞数和点赞时间密度,判断是否需要迁移到 Redis。
- 热数据(Redis)和冷数据文件均定期写入 MySQL。
- 通过队列的方式实现批量写入,确保备份过程对服务性能影响最小。
- 冷热分离:避免 Redis 过载,将资源集中用于高频访问的视频。
- 采样机制:通过动态调整采样规模,降低系统压力。
- 异步备份:保障数据安全的同时,减轻主服务的 I/O 负担。
如有问题,请提交 Issue 或联系作者:
- Email: wudaoit@163.com
保持简单,注重性能,让每一次点赞都不负期待! 😊