基于Gossip的online server

在游戏服务端架构中online server,有些也叫center server。

主要承载以下功能:

  • 存储玩家的在线信息,处理上线和下线消息。
  • 转发消息给特定玩家。

online server在架构图中的位置

image-20221008180347963


online server集群内部架构图,以3个实例为例:

image-20221008180539278


特点:

  • svr之间相互连接,采用Gossip协议通信。
  • 各svr的数据是全量的,采用最终一致性。

数据结构:

存储玩家在线信息:hashmap,uid--gateid

转发消息:uids,visited_svrid,msg


消息处理过程:

第一类:上下线消息

逻辑:任意一个svr收到消息后,给与之相连的svr转发消息

要点:收到上线消息时,可能当前svr存在之前的在线信息,需要给之前的gateid推送下线信息。

第二类:转发消息

逻辑:任意一个online svr收到消息后,判断需要转发的uid是否在当前svr上:能匹配到的直接转发,匹配不到的,重组消息(携带未匹配的uid、拼接上当前的svr id、需转发的消息内容),挑选任意一个没有遍历过的svr再次转发。重复下去,直到uid全部都匹配成功或者所有的svr已遍历一遍。

要点:由于各svr满足最终一致性,理论上来说大部分消息转发一次就可以了。


周边逻辑:

  • 添加online svr监控:各svr的转发消息接收数和转发数,观察online svr的承载力。
  • 添加online svr监控:各svr的在线用户数,观察负载均衡的效果。
  • online svr重启时,不需要从其他svr复制数据。
  • 有些场景下,online svr的数据需要持久化。可以定时周期性的备份数据到本地文件。
  • 其他svr转发消息时,需要规避不存在的uid,避免拖慢online svr的性能。
  • online svr集群中实例数配置为3个,可以满足大部分场景。

实质:

这里使用的Gossip模型,实际上是nodes=3、fanout=2、interval=0。

具体场景时,可以进行调整。


特点:

  • 扩展性
  • 容错
  • 去中心化
  • 一致性收敛
  • 简单

refer:

一文了解啥是Gossip协议?

https://www.jianshu.com/p/37231c0455a9

Gossip 协议详解

https://zhuanlan.zhihu.com/p/162970961

Gossip协议动画

https://flopezluis.github.io/gossip-simulator/

posted @ 2022-10-09 11:34  天下太平  阅读(51)  评论(0编辑  收藏  举报