文档介绍:百万用户级游戏服务器架构设计本文从最简单游戏服务器架构开始讲起,结合主流WOW等大型游戏服务器设计思绪和mangos部分理念,一步一步揭开网络游戏服务器架构设计方法,对初学者尤其有帮助。0D8z+[,w7o9_8F0i      本文不仅针对大型网游设计,对中小型和休闲棋牌类游戏服务器设计,也有很大启发作用。%Z#x+服务器结构探讨--最简单结构  所谓服务器结构,也就是怎样将服务器各部分合理地安排,以实现最初功效需求。所以,结构本无所谓正确和错误;当然,优异结构更有利于系统搭建,对系统可扩展性及可维护性也有更大帮助。  好结构不是一蹴而就,而且每个设计者心中那把尺全部不相同,所以这个优异结构定义也就没有定论。在这里,我们不计划对现有游戏结构做评价,而是试着从头开始搭建一个我们需要MMOG结构。  对于一个最简单游戏服务器来说,它只需要能够接收来自用户端连接请求,然后处理用户端在游戏世界中移动及交互,也即游戏逻辑处理即可。假如我们把这两项功效集成到一个服务进程中,则最终结构很简单:  client-----server  嗯,太简单了点,这么也敢叫服务器结构?好吧,现在我们来往里面稍稍加点东西,让它看起来更像是服务器结构部分。  通常来说,我们在接入游戏服务器时候全部会要提供一个帐号和密码,验证经过后才能进入。相关为何要提供用户名和密码才能进入问题我们这里不计划做过多讨论,云风曾对此也提出过类似疑问,并给出了只用一个标识串就能进入设想,有爱好能够去看看她们讨论。但不管是采取何种方法进入,照现在看来我们服务器起码得提供一个帐号验证功效。  我们把观察点先集中在一个大区内。在大多数情况下,一个大区内全部会有多组游戏服,也就是多个游戏世界可供选择。简单点来实现,我们完全能够抛弃这个大区概念,认为一个大区也就是放在同一个机房多台服务器组,各服务器组间没有什么关系。这么,我们可为每组服务器单独配置一台登录服。最终结构图应该像这么:  loginServer  gameServer  |          /  |        /  client  该结构下玩家操作步骤为,先选择大区,再选择大区下某台服务器,即某个游戏世界,点击进入后开始帐号验证过程,验证成功则进入了该游戏世界。不过,假如玩家想要切换游戏世界,她只能先退出目前游戏世界,然后进入新游戏世界重新进行帐号验证。  早期游戏大全部采取是这种结构,有些游戏在实现时采取了部分技术手段使得在切换游戏服时不需要再次验证帐号,但整体结构还是未做改变。  该结构存在一个服务器资源配置问题。因为登录服处理逻辑相对来说比较简单,就是将玩家提交帐号和密码送到数据库进行验证,和生成会话密钥发送给游戏服和用户端,操作完成后连接就会立即断开,而且玩家在以后游戏过程中不会再和登录服打任何交道。这么处理短连接过程使得系统在大多数情况下全部是比较空闲,不过在一些时候,因为请求比较密集,比如开新服时候,登录服负载又会比较大,甚至会处理不过来。 另外在实际游戏运行中,有些游戏世界很火爆,而有些游戏世界却很冷清,甚至没有多少人玩情况也是很常见。所以,我们能否更合理地配置登录服资源,使得整个大区内登录服能够共享就成了下一步改善目标。 服务器结构探讨--登录服负载均衡  回想一下我们在玩wow时操作步骤:,首先就会要求我们输入用户名和密码进行验证,验证成功后才会出来游戏世界列表,以后是排队进入游戏世界,开始游戏...  能够看到跟前面描述有个很显著不一样,那就是要先验证帐号再选择游戏世界。这种结构也就使得登录服不是固定配置给个游戏世界,而是全区共有。  我们能够试着从实际需求角度来考虑一下这个问题。正如我们之前所描述过那样,登录服在大多数情况下全部是比较空闲,可能我们一个拥有20个游戏世界大区仅仅使用10台或更少登录服即可满足需求。而当在开新区时候,或许要配置40台登录服才能应付那如潮水般涌入玩家登录请求。所以,登录服在设计上应该能满足这种动态增删需求,我们能够在任何时候为大区增加或降低登录服布署。  当然,在这里也不会存在要求添加太多登录服情况。还是拿开新区情况来说,即使新增加登录服满足了玩家登录请求,游戏世界服承载能力仍然有限,玩家一样只能在排队系统中等候,或是进入到游戏世界中造成大家全部卡。  另外,当我们在增加或移除登录服时候不应该需要对游戏世界服有所改动,也不会要求重启世界服,当然也不应该要求用户端有什么更新或修改,一切全部是在背后自动完成。  最终,相关数据持久化问题也在这里考虑一下。通常来说,使用现有商业数据库系统比自己手工技术优异要明智得多。我们需要持久化数据有玩家帐号及密码,玩家创建角色相关信息,另外还有部分游戏世界全局共有数据也需要持久化。  好了,需求已经提出来了,现