Skip to content

本项目用来提升单节点处理能力,对于时间型时间的处理量,通过冷热数据分离和转换(使用内存+SSD硬盘的处理),实现更经济处理能力的提升

License

Notifications You must be signed in to change notification settings

2003GJZ/Mixingvalves

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

点赞统计中间件

本项目实现了一个独立的 点赞统计中间件,通过 冷热数据分离策略动态采样判断机制,在高并发场景下优化系统性能,降低 Redis 缓存压力,同时保障数据的准确性和持久性。以下是详细设计与使用说明。


功能特点

  • 冷热数据分离

    • 热数据:存储在 Redis,处理高频点赞请求,支持快速读取与更新。
    • 冷数据:存储在硬盘文件,适合低频访问的视频点赞记录。
  • 动态采样判断

    • 随机取样检测冷数据的访问频率,动态调整样本大小。
    • 基于密度阈值触发机制,判断冷数据是否需要迁移为热数据。
  • 自动迁移机制

    • 冷数据达到热度标准时迁移至 Redis。
    • 热数据长时间不活跃时迁移回冷数据文件。
  • 异步数据备份

    • 热数据与冷数据均定期异步写入 MySQL,确保数据持久化与恢复能力。

系统架构

+------------------+
|    API 层        | <- 提供点赞服务接口,处理请求
+------------------+
         |
+------------------+
|   冷数据管理模块  | <- 将冷数据存储在硬盘文件中
+------------------+
         |
+------------------+
|  热数据缓存模块   | <- 使用 Redis 存储高频访问数据
+------------------+
         |
+------------------+
|   数据迁移模块    | <- 热/冷数据的迁移逻辑
+------------------+
         |
+------------------+
|   数据备份模块    | <- 定期将数据写入 MySQL
+------------------+

核心设计细节

热冷数据分离

  • 热数据:使用 Redis 的 HSET 存储,每个视频的点赞数作为键值对存储在 Redis 中。
  • 冷数据:每个视频对应一个文件,按行记录点赞的时间戳,支持高效写入和按需读取。

采样与迁移(冷数据迁移至热数据)

  • 采样判断

    • 定期触发,取样一部分冷数据文件,统计点赞数量。
    • 根据采样结果,判断视频记录文件是否需要触发迁移检查操作。
    • 根据采样触发频率,和冷热数据切换频率来控制hash轮转速率,和布隆过滤器刷新速率。
  • 触发机制

    • 布隆过滤器命中,触发迁移检查
    • 文件行数达到阈值时,强制触发迁移检查,避免出现巨型文件。
    • 采样计算冷数据访问频率,判断是需要触发迁移检查。
    • 根据点赞数和点赞时间密度,判断是否需要迁移到 Redis。

异步备份

  • 热数据(Redis)和冷数据文件均定期写入 MySQL。
  • 通过队列的方式实现批量写入,确保备份过程对服务性能影响最小。

性能优化点

  • 冷热分离:避免 Redis 过载,将资源集中用于高频访问的视频。
  • 采样机制:通过动态调整采样规模,降低系统压力。
  • 异步备份:保障数据安全的同时,减轻主服务的 I/O 负担。

联系方式

如有问题,请提交 Issue 或联系作者:


保持简单,注重性能,让每一次点赞都不负期待! 😊

About

本项目用来提升单节点处理能力,对于时间型时间的处理量,通过冷热数据分离和转换(使用内存+SSD硬盘的处理),实现更经济处理能力的提升

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published