全球同服 游戏服务器架构设计

转载 2016年01月22日 11:46:58
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:马剑飞
链接:https://www.zhihu.com/question/31103751/answer/64631116
来源:知乎

首先,游戏服务器是IO密集型服务器,它的主要瓶颈在网络IO,而不是CPU,这点要记住了。所以经常服务器问题都会出现在网络IO,带宽,数据库磁盘读写上面,而非CPU上面。

其实全球同服也就是大量在线嘛,比如C1000k,甚至更多。同服,只是你看起来同服,而不是他本身就在同一个服务器上,或者同一个进程上,这是完全不现实的。一个好的服务器进程,能同时承载10k的游戏玩家(还依赖于游戏逻辑复杂度)已经不错了。其实要全球同服,就是堆服务器进程嘛。
讲一下我用过的其中一种架构模型,也是公司按着bigworld架构设计的:
1.Gate:首先要有一个(多个)Gate(网关)服务器,负责客户端连接及消息转发到GameServer(游戏服)(选服逻辑),保持客户端到服务端的连接
没有任何逻辑,只做消息加密和解密,以及客户端和服务器消息的转发(相当于两者之间的桥梁).
2.GameServer:GameServer是主要的游戏进程,提供游戏逻辑功能(采用单进程(或者单线程)模型,游戏服务器的瓶颈从来不在CPU,所以只做逻辑功能的话单线程足够了,在这里没必要用多线程或多进程)。
3.DBManager:实现数据库的读写,方便Game服务器异步读写数据库的数据(有些把数据库读写放在游戏服,没有单独的服务器,那恐怕游戏服单进程就不够用了)。
4.GameManager:负责管理所有的GameServer,GameServer之间消息转发,提供广播到所有Game的功能。

客户端连Gate,Gate连GameServer,GameServer连DBManager,GameManager管理所有的GameServer并通知所有的Gate。

除了GameManager只有一个,理论上Gate,GameServer,DBManager都可以扩展到多个实例,你要实现全球唯一服,理论上就是扩展GameServer,那么怎么让他们看起来在一个服呢?其实很简单,COC大多数都是单服玩法,只有交互玩法的时候你才能感受到它是同一个服。

主要讲讲GameServer,这是主要的处理服务器逻辑的地方,一般单进程就可以了,一个epoll_wait
hold住全场,然后做分发,理论上cpu都能承载的住,而epoll能处理的上限,一般跟机器的内存有关,远大于1024,正常的也达到100k,当然考虑到逻辑的复杂度,一个实例一般处理的连接接近10k就可以了。
那怎么处理100k,1000k甚至更多了,那就多个实例,那这样还是唯一服吗?是的,至少可以看起来是,游戏自然有单人玩法和多人玩法,单人玩法自然自己在自己的服就可以了,谁也不知道是不是跟别人一个服。
当然有全服的排行榜,好友系统之类的怎么办呢,其实很简单,我们不是有GameManager吗,它就是负责做这事的,每当你发个好友请求,GameManager广播一条消息,然后如果有某个GameServer存在这个玩家,那就回应你,你们就可以相互通信了,更简单的想办法获取玩家的服务器ID号,直接通过GameManager转发给那个服务器,自然就可以通信了,就像在同一个服务器一样。
排行榜呢,最简单的,指定一个服务器,或者单独开辟一个服务器做排行榜,所有数据变动都通知这个服务器,然后服务器自然就能排行了,然后再广播。
双人战斗或者多人副本呢?
像COC这样的,掠夺战,我们当时的做法就是,直接搜到敌方,然后把自己的玩家,士兵军队等需要的数据序列化之后,传到对面的服务器去,反序列化,然后直接开打,打完再把数据传回来。
更多人的呢,那就方便点,再开辟一类服务器,叫BattleServer,专门负责多人玩法,副本玩法之类的,多人的时候,把所有的多人数据迁移到BattleServer,然后多人(副本玩法)结束的时候,再通过GameManager把数据迁移回原来的服务器。

这样看,其实全球唯一服也就没有那么高大上了。

如果有兴趣,可以看看KBEngine服务器引擎,作者按照bigworld架构设计的,可以满足你的要求。

学习游戏服务器编程进阶篇之全球同服技术架构

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》...
  • jxw167
  • jxw167
  • 2017年02月04日 14:51
  • 2931

coc游戏服务器架构分析

coc中的功能,大致分为以下几个部分 1.登陆 2.部落相关功能 3.聊天(“世界"聊天,部落内部聊天) 4.邮件 5.搜索对战玩家 6.排行榜 从需求上来出发,由于是全球同服,所以服务器端可以用...
  • inzaghi97
  • inzaghi97
  • 2015年07月22日 16:08
  • 3180

bigworld游戏服务器架构参考

http://www.cnblogs.com/GmrBrian/p/3777074.html https://www.zhihu.com/question/29779732
  • xiaoheqin
  • xiaoheqin
  • 2016年05月06日 20:47
  • 1821

BigWorld Server - Architecture

1.     LoginApp即登录服务器, 它主要完成玩家帐号的验证, 同时它通过BaseAppMgr并向玩家发送一个SessionKey作为基础服务器(BaseApp)的登录密钥;同时LoginS...
  • blizmax6
  • blizmax6
  • 2011年07月14日 09:04
  • 3717

关于全球即时通讯系统架构的点滴思考

全球化的IM系统,用户量大,并发访问高,这样的系统如何架构?笔者刚刚结束相关产品的研发工作,做点滴总结。 一、 全球IM系统的基本要求     1 首先即时性要好,在海量用户高并发访问时,减少用户...
  • wang_zong_sheng
  • wang_zong_sheng
  • 2017年02月14日 11:41
  • 619

基于大数据的全球电商系统架构性能优化-郭东白.pdf

  • 2017年03月09日 14:31
  • 18.42MB
  • 下载

全球同服架构设计

作者:马剑飞 链接:https://www.zhihu.com/question/31103751/answer/64631116 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 刚好做过几...
  • LANGZI7758521
  • LANGZI7758521
  • 2016年09月29日 17:53
  • 1148

RPG游戏经典的系统架构

RPG游戏经典的系统架构设计 :bigword 游戏引擎就是使用这种架构,我认识的很多rpg游戏公司的同事也大致采用了这种架构方式。loginapp : 登陆服务器,主要负责player 的登陆请求,...
  • shiyongfu19890308
  • shiyongfu19890308
  • 2016年11月15日 18:42
  • 776

GATE服务实现的架构

每个CLIENT(简称P)到代理(简称G)的连接都会对应的有一条代理到数据处理服务器(简称S)的连接 通过握手协议G上会记录P-G和G-S两个连接的SOCKET的关联。 握手协议:参考SOCKET...
  • fengge8ylf
  • fengge8ylf
  • 2013年05月23日 18:32
  • 1100

全球同服

喜爱,面对国内各游戏厂家出海和全球运营需求,腾讯云利用分布在全球的云基础设施和互联的VPC网络为游戏服务的全球部署提供了一套完整解决方案。   游戏观察消息,前段时间最火爆的游戏《皇室战争》...
  • boshuzhang
  • boshuzhang
  • 2017年03月16日 15:15
  • 931
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:全球同服 游戏服务器架构设计
举报原因:
原因补充:

(最多只允许输入30个字)