工作负载

更多赛季,更多分组, 重新计算容量成本。

持续提供地域榜单与历史赛季的访问。Lavik 支持 Redis 有序集合命令,并将增长的集合存为可独立寻址的分组,让保留排名存于 NVMe SSD。

Lavik 0.2.0Redis / ValkeyNVMe SSD

容量与延迟,为什么同时成为问题?

一个前 100 名组件背后,可能保留着数百万成员与数千个并行榜单。即使展示窗口很小,在线保留历史赛季与地域分组也会使状态成倍增长。

将这些状态移到磁盘会改变成本结构,但点查询 QPS 无法充分说明排名更新、范围读取或高争用榜单的表现。必须在分数突发写入和保留清理期间测量尾延迟,而不只是测试空闲数据集。

为这条数据路径而设计

Lavik 在架构中的位置

使用 ZADD、ZINCRBY 与排名、范围读取,沿用 Redis 应用的榜单模式。Lavik 0.2.0 将大型集合分组,使操作可以处理存储对象的相关部分。按成员数、榜单数与保留赛季规划容量,并用实际榜单大小测量排名更新与范围读取。

请求路径排名 / 排行榜 APIRedis 兼容客户端
LavikDRAM · 键索引NVMe SSD · 值存储
应用负责刷新或投影,权威数据源保留在:得分事件日志 + 应用回放任务

适用场景:持续增长的保留榜单集合,具备明确分组边界和可回放源事件。

影响采用结果的设计决策

01

按业务含义划分榜单

在排名契约允许的情况下,以赛季、游戏、地域或分组划分边界。单个热点有序集合键仍然存在争用;增加工作线程不会自动拆分一个榜单。跨多个榜单的全局排名需要应用逻辑实现。

02

定义分数与重试语义

在 ZADD 绝对分数与 ZINCRBY 增量更新之间做出选择。除非应用提供去重,重试一次增量操作可能导致重复加分。保持并列分数排序、排名方向以及离线玩家处理规则一致。

03

限制范围查询与保留清理工作量

分页读取有界排名窗口。决定赛季是整键到期,还是需要显式删除成员,并在写入同时测量清理开销。若排名状态需要重建,应保留可回放的得分源。

试用这一命令模式

Redis 兼容命令

先按快速入门启动 Lavik 0.2.0,再用这些示例键尝试场景中的基本操作。命令参考提供选项与返回值说明。

查看示例命令
redis-cli ZADD board:season7:eu 100 alice 120 bob 90 carol
redis-cli ZINCRBY board:season7:eu 30 alice
redis-cli ZREVRANGE board:season7:eu 0 1 WITHSCORES
redis-cli ZREVRANK board:season7:eu alice
redis-cli EXPIRE board:season7:eu 3600
启动本地实例 →

用什么标准决定迁移?

先写下业务预算,再做流量回放。以下标准需要通过你自己的系统验证;已发布基准是起点。

热点榜单的分数突发

采用真实榜单规模分布与直播活动期间的更新集中度。

验收条件

分数更新与 top-N 查询的 p99/p99.9 满足产品截止时间,客户端队列保持有界。

排名与回放正确性

对比并列分数、排名方向、分页、重复事件与重启重建。

验收条件

排名符合现有契约,回放不会重复应用分数变化。

赛季切换

保留旧榜单的同时创建新分组,并对旧状态执行过期或裁剪。

验收条件

可用容量与内存保持在预算内,同时不破坏在线榜单延迟。

使用实际成员数量与分数更新分布测试有序集合操作。GET/SET 报告说明存储基础,榜单容量应按 ZSET 流量规划。

从业务规模推导容量

保留成员数 ≈ 每榜成员数 × 分组数 × 赛季数;每成员字节数需实测

20×

更低的值容量成本

同样的值容量,按 DRAM/NVMe SSD 每 GiB 单价 20:1 计算,介质成本降低 95%。用你的实际价格、索引内存与副本配置规划完整预算。

计算你的容量成本 →