最终一致性问题
在本系列 思考(八十四):再论排行榜服务 中提到,使用分段同步排名的方法,达到排行榜的最终一致性
从程序角度,是合理的。但是具体业务,如榜单结算、玩家查看排行榜,会遇到一个问题:
- 榜上的数据可能有出入
因为分段同步的是rank db
最终排名,这个排名时刻在变化,会导致 rank 服务中的缓存排名出现出入
因此需要引入,排行榜快照概念
排行榜快照
从使用者角度,不能容忍的是排名数据有出入。而提前告知,排名数据会延迟 xx 秒(分、小时)更新,反而能得到使用者的理解、认同
因此最终一致性要同步的数据改为同步某个时刻的排名数据快照,就可以完美的解决最终一致性问题带来的问题
生成排名快照间隔
假设排名规模为 M ,排名块 chunk 大小为 N ,1 秒更新 1 个 chunk ,则同步完整快照时间为: M / N 秒
另外,排行数据很小,一项只有 score (float64) 和 member (int64) ,未压缩占 16 字节
根据以上条件数据,罗列下,各种规模下的同步完整快照时间:
chunk N 大小 | chunk 数据量 |
---|