引言:使用Go语言开发游戏已经有5年了,做了三款上线手游,一直采用的都是我们自研的分布式游戏服务器架构。最近我们想把它分享一下,总结一下这几年的经验。

一、 架构图

分布式游戏服务器架构图

1. CDN:负责游戏客户端的代码热更新、游戏内的广告图

2. 版控服务器:负责版本更新控制、区服状态、登录历史

3. 中心服务器:用于控制所有服务器,提供服务注册与发现,服务配置与控制

4. 网关服务器:用于客户端连接与通信,所有消息都会通过网关进行转发

5. 单区服务器:用于处理单区的相关业务

6. 跨区服务器:用于处理跨区的相关业务

7. 镜像服务器:用于处理无状态的业务,如:战斗、匹配

二、 通信协议

1. 客户端与版控服务器采用的是HTTP + Json通信协议

2. 客户都与网关服务器采用的是Socket + Protobuf通信协议

3. 中心服务器、网关服务器、单区服务器等内部都是采用Socket + Protobuf通信协议

三、 数据存储

1. 游戏数据存储:单区服务器、跨区服务器都是采用MySQL进行游戏数据存储

2. 缓存数据存储:单区服务器为了提高效率,会采用Memcache进行数据缓存

3. 文件数据存储:单区服务器、跨服服务器都会用文件存