游戏服务器中的分布式

之前有了解一些服务器架构发展

现在大多游戏的服务端都是分布式架构,这个篇文章稍微学习以下分布式架构在游戏中使用吧。

分布式系统

在《分布式系统原理与范型》一书中定义:分布式系统是若干独立计算机的集合, 这些计算机对于用户来说就像单个相关系统

进程通信

多个组件通过网路配合协作

  1. socket

    网络编程,写服务器客户端连接,服务端与服务端连接,第三方服务连接等。

  2. 一些中间件,消息队列,MQ,tbus(腾讯的)等

tbus

Tbus基于共享内存构建无锁双通循环消息队列,发送的双方通过专用的读写队列完成数据收发,实现本地进程通信或者远程进程间通信。通信双方使用的两个队列称之为tbus通道(channel),每一组通讯的双方就需要有一个tbus通道。进程A或B启动后,通过tbus API绑定到对应的通道,使用通道的两个消息队列进行收发数据,而不用关注对方的部署位置。

image.png

如果A和B进程不在同一台物理设备上

image.png

  1. 标记找到进程A和B的地址(World.Zone.Func.Instance)4位十进制的地址
  2. 通过Tbusd将两台机器建立联系,互相发送消息
  3. Tbusd如何获得进程地址,以及相互建立联系呢?这时候就有了GCIM(本机)和GRM

GCIM GRM

  • 一台服务器可以有诸多的通信关系,每一条tbus通道就是最小的通信单元,每条通道都有自己的配置区域,保存着通道大小,通道地址以及读写指针等,一台服务器上所有配置信息汇聚起来就是全局通道信息表(globalchannel information map, GCIM),一台服务器仅需要一份。管理GCIM的工具是tbusmgr。管理关系如下:

image.png

  • 如果一台服务器不需要和其他远程服务器通信,则使用GCIM就能完成所有工作。当两台服务器需要使用tbus进行通信时,为了完成通信,除了启动tbusd服务进程之外,还需要建立一份通信配置,称之为全局路由表(globalroute map,GRM),用于说明哪些通道的消息需要中转。GRM也是保存在共享内存中,每一台机器只需要一份,管理GRM的工具为trelaymgr。

通信

通信格式,发送者和接受者统一,并且高效。

  1. 序列化、反序列化(高性能)
  2. 版本兼容

例如: protocol buffers:

image.png

定时器 - 超时处理

没什么理解(未来在做吧)

时间轮

游戏中经典的三层架构

接入层-》逻辑层-》数据层

image.png

分区分服务的实现

image.png

其他技术

异步处理框架:

  1. 网络处理,多路复用:
  2. 状态机框架
  3. 协程处理

eos

image-20220614115216516

文章

todo: 比较杂,什么时候全面了在补全

tbus