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

转载 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架构设计的,可以满足你的要求。

相关文章推荐

bigworld游戏服务器架构参考

http://www.cnblogs.com/GmrBrian/p/3777074.html https://www.zhihu.com/question/29779732

全球同服--coc类游戏服务器架构

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

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

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

全球同服架构设计

作者:马剑飞 链接:https://www.zhihu.com/question/31103751/answer/64631116 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 刚好做过几...

全球同服

喜爱,面对国内各游戏厂家出海和全球运营需求,腾讯云利用分布在全球的云基础设施和互联的VPC网络为游戏服务的全球部署提供了一套完整解决方案。   游戏观察消息,前段时间最火爆的游戏《皇室战争》...

如何使用私有网络部署全球同服游戏服务

近年来,随着移动互联网技术和全球社交化的发展,全球同服的玩法越来越受到游戏玩家的喜爱,最火爆的如《皇室战争》自16年3月份发布来便长期霸榜,支持全球同服的游戏架构在知乎上一度引起热议,面对国内各游戏厂...

coc游戏服务器架构分析

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

Android笔试总结

Android笔试总结 笔试,共10道题,不限时间。(答案整理自互联网,不保证完全正确,仅供参考。) 1.请谈一下Android系统的架构。 答:Android系统采用了分层架构,从高层到低层...

双缓冲技术讲解

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

【服务器架构】经典游戏服务器端架构概述(续)

全服分线模型 一、模型描述 由于多进程服务器模型的发展,游戏开发者们首先发现,由于游戏业务的特点,那些需要持久化的数据,一般都是玩家的存档,以及一些游戏本身需要用的,在运行期只读...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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