Go游戏服务器开发的一些思考(三十一):排行榜服务器设计思路(二)

最终设计

Go游戏服务器开发的一些思考(三十一):排行榜服务器设计思路(二)

  • 通过排名过滤服务多开及战力数据缓冲器,来缓冲网络压力
  • 通过排名过滤服务战力筛选器过滤掉 1-N/OPS 的数据
  • 通过排名服务保证了排序的唯一性
  • 本架构 排名服务、数据库可以做到压力很小
  • 排名过滤服务 通过 多开,来减低压力到合适水平

另外,还需要一些编程技巧,来保证系统的可靠性,如上节提到的:如何保证变化的战力数据不丢失等。

下面依次介绍之

优化 战力筛选器

  1. 每帧处理

    战力筛选器 的 战力输入 应当按帧一次性取走所有战力数据缓存器中的数据。

    这样 战力筛选器数据库 的 获取 最后1名排名数据 次数 将 降低到 FPS 次

  2. 允许误差数据

    战力筛选器是不需要精确过滤数据的。

    因此多开,可能的小概率并发造成误差的数据是允许的。

考虑共享内存

战力缓存器 可以考虑 使用共享内存

这样排序过滤服务进程即使重启也可以保证数据不丢失

战力数据带上版本号

排名服务器扩容或缩减时, 一致性散列问题会出现。

同一玩家战力数据带上版本号,则 排名服务 可以识别新旧版本战力数据。

从而让一致性散列问题在几帧的时间内恢复正常

排行服务增加热备

可以简单的通过网络设置,增加排行服务热备。使排行服务持续提供服务