Go游戏服务器开发的一些思考(三十一):排行榜服务器设计思路(二)
最终设计
- 通过
排名过滤服务
多开及战力数据缓冲器
,来缓冲网络压力 - 通过
排名过滤服务
的战力筛选器
过滤掉 1-N/OPS 的数据 - 通过
排名服务
保证了排序的唯一性 - 本架构 排名服务、数据库可以做到压力很小
- 排名过滤服务 通过 多开,来减低压力到合适水平
另外,还需要一些编程技巧,来保证系统的可靠性,如上节提到的:如何保证变化的战力数据不丢失等。
下面依次介绍之
优化 战力筛选器
-
每帧处理
战力筛选器 的 战力输入 应当按帧一次性取走所有战力数据缓存器中的数据。
这样
战力筛选器
对数据库
的 获取最后1名排名数据
次数 将 降低到 FPS 次 -
允许误差数据
战力筛选器是不需要精确过滤数据的。
因此多开,可能的小概率并发造成误差的数据是允许的。
考虑共享内存
战力缓存器 可以考虑 使用共享内存
这样排序过滤服务进程即使重启也可以保证数据不丢失
战力数据带上版本号
排名服务器扩容或缩减时, 一致性散列问题会出现。
同一玩家战力数据带上版本号,则 排名服务 可以识别新旧版本战力数据。
从而让一致性散列问题在几帧的时间内恢复正常
排行服务增加热备
可以简单的通过网络设置,增加排行服务热备。使排行服务持续提供服务