浅谈Go语⾔⾃研的分布式游戏服务器架构
引⾔:使⽤Go语⾔开发游戏已经有5年了,做了三款上线⼿游,⼀直采⽤的都是我们⾃研的分布式游戏服务器架构。最近我们想把它分享⼀下,引⾔:
总结⼀下这⼏年的经验。
⼀、 架构图
分布式游戏服务器架构图
1. CDN:负责游戏客户端的代码热更新、游戏内的⼴告图
2. 版控服务器:负责版本更新控制、区服状态、登录历史
3. 中⼼服务器:⽤于控制所有服务器,提供服务注册与发现,服务配置与控制
4. ⽹关服务器:⽤于客户端连接与通信,所有消息都会通过⽹关进⾏转发
5. 单区服务器:⽤于处理单区的相关业务
6. 跨区服务器:⽤于处理跨区的相关业务
7. 镜像服务器:⽤于处理⽆状态的业务,如:战⽃、匹配
⼆、 通信协议
1. 客户端与版控服务器采⽤的是HTTP + Json通信协议
2. 客户都与⽹关服务器采⽤的是Socket + Protobuf通信协议
3. 中⼼服务器、⽹关服务器、单区服务器等内部都是采⽤Socket + Protobuf通信协议
三、 数据存储
1. 游戏数据存储:单区服务器、跨区服务器都是采⽤MySQL进⾏游戏数据存储
2. 缓存数据存储:单区服务器为了提⾼效率,会采⽤Memcache进⾏数据缓存
3. ⽂件数据存储:单区服务器、跨服服务器都会⽤⽂件存储来备份⼀些临时数据;战⽃服务器会将战报存储到⽂件中。
四、 中⼼服务器
go语言开发环境搭建中⼼服务器是个单点,维护着区服信息、节点信息、配置信息,⽤于其他服务器来进⾏读取。
1. 只有当中⼼服务器启动后,其他服务器才能启动并注册上去;
2. 中⼼服务器在运⾏过程中,会与其他服务器进⾏PING,来保持连接,并且收集运⾏状态;
3. 中⼼服务器挂了后,其他服务器不会挂,只是不能⽀持新服务器启动与配置;
4. 中⼼服务器配套⼀个可视化的控制台,⽤于架构全⾯监控与控制。
五、 ⽹关服务器
1. 每个⽹关服务器可以⽀持多个区的连接,但⼀个区只能在⼀个⽹关服务器上;
2. ⽹关服务器不做业务处理,只做鉴权处理与消息转发;
3. ⽹关服务器进⾏了简单的限流处理。
六、 单区服务
1. 单区服务包括多个单区业务服务器,⽤于分散业务处理压⼒,降低单点风险;
2. 单区服务会将玩家状态保持在内存中,以加速业务处理;
3. 单区服务会定时保存玩家的状态到单区数据库中;
4. 单区服务会将部分玩家下线后的状态缓存在Memcache中,⽤于加速玩家登录。
七、 跨区服务
1. 跨区服务也包括多个跨区业务服务器,⽤于分散业务处理压⼒,降低单点风险;
2. 跨区服务也会将玩法状态保持在内存中,以加速业务处理,同样会定时存储到跨区数据库中;
3. 跨区服务的跨区规则,是通过中⼼服务器采⽤设定规则⾃动分配;
⼋、 镜像服务
1. 镜像服务包括多个镜像业务服务器,例如:战⽃服务器、匹配服务器、聊天服务器等;
2. 镜像服务器的特点是⽆状态,可以部署多个,玩家请求哪⼀个都能得到结果,避免单点出问题;
总结:
总结:以上便是我们的分布式游戏服务器架构,简单的介绍了⼀下。后期,我们会针对架构中的不同服务器⾓⾊的框架代码进⾏单独介绍,包括其中⽤到的技术与实现⽅式,并且和其他的框架进⾏⽐较学习。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论