现在的位置: 首页 > 综合 > 正文

浅析MMORPG服务器架构

2013年03月28日 ⁄ 综合 ⁄ 共 4568字 ⁄ 字号 评论关闭

浅析MMORPG服务器架构

2009-03-01

 

        随着计算网络的发展,异军突起的网络游戏成为中国网络产业中的先锋。角色扮演游戏(MMORPG)一直是网络游戏中的主流类型,其主要原因在于它拥有丰富的交互体验,特别是玩家之间的互动、角色扮演的特性在MMORPG游戏中最能得到丰富的表现。

MMORPG本身的游戏设计方面的特性决定了MMORPG
服务器的设计和实现的难度大、对服务器系统的要求高。这个难度又主要体现在服务器架构设计方面。一个游戏服务器架构的好坏,主要体现在以下几个方面:

1、稳定性。

提供游戏服务,是服务器系统确保用户体验的最基本要求。稳定性是用户体验的基石,稳定性不过关的话,其他一切都无从谈起。

2、效率。

服务器组的运行时效率主要体现在服务器系统的承载能力上。例如一组服务器可以同时容纳多少玩家而能保证游戏的流畅。

3、简单。

简单性主要体现在服务器组的部署、和维护方面。一般情况下,游戏每星期都会例行维护一次,而当服务器出问题时,也得停机维护。那么备份数据、更新、重启等工作的复杂程度直接影响到维护的时间。

4、可扩展性

  
服务器架构的可扩展性主要表现在两个方面,第一个方面是游戏功能的增加是否会引起服务器架构的改变。另一方面是在当前服务器压力增大的情况下是否能方便地对服务器组进行扩展,比如一个区的玩家从5000增加至1万,服务器组如何进行扩展。

5、负载均衡

  
同一组服务器下的每个服务器在负载上能平均分配,这样才能保证服务器效率的最大化,不会造成资源的浪费。

 

        MMORPG大都采用的是C/S结构。为提高数据的安全性与系统的可扩充性,一般在客户端与服务器端之间增加一个中间层,用于对服务器数据的访问。因此有了三层及多层结构模式,将数据库访问分布在一个或多个中间层。客户程序与数据库的连接被中间层屏蔽,客户程序只能通过中间层间接地访问数据库。中间层可能运行在不同于客户机的其它机器上,经过合理的任务划分与物理部署后,可使得整个系统的工作负载更趋均衡,从而提高整个系统的运行效率。以下是两种我所熟知的服务器架构,也是现在比较流行的MMORPG服务器架构。

 

三层结构的服务器架构

1、总体结构层次:

          

 
服务器层次结构1

 

最上层的数据库指游戏世界中的数据,包括玩家的注册信息、玩家重要的游戏信息(比如通宝、游戏点数等)。

中间层包括两方面的内容,一为网络服务,用户通过网站注册用户、查询游戏世界中的各项排名。二为游戏服务,玩家通过登陆游戏服务器进行游戏。

客户层主要是指游戏玩家、游戏客户端。

2、服务器架构实现:

               

 2   
三层结构服务器架构

 

系统服务模块包括数据库MainDB、数据库接口DBI、战区服务器ZS,游戏场景服务器GameServer、列表服务器EnterServer、入口服务器ListServer、角色存盘接口及存盘服务器FDBI(在此结构中,FDBI功能放在ZS服务器中)、游戏充值系统DFS

受控安全模块包括DBI服务监控端、存盘服务器信息查询工具、游戏管理员工具、充值系统监控、平台配置系统和WEB服务(帐户站、玩家论坛和游戏官方网站)。

启动平台模块包括平台初始启动程序Play、列表程序Shell、游戏客户端GameClient

1)系统服务模块

               

 
3    系统服务模块结构图1

 

数据库(DB)系统主要包括游戏数据库GameDB、用户数据库UserDB、游戏日志数据库GameLogDB三个数据库,其中GameDB主要处理游戏业务逻辑,存储游戏内容相关的数据,像角色信息、战区配置信息等,同时也处理与角色相关的计费问题;GameLogDB主要处理LOG数据和外挂数据,存储外挂封停记录、LOG数据,像外挂封停名单、封停LOG等,也有很多游戏对这些数据不写入数据库,而是记游戏日志,然后通过日志分析工具进行数据分析;UserDB主要处理玩家帐号信息和费用管理,存储玩家帐号相关数据,像帐号信息、游戏卡信息等,这部分的数据主要从官网注册数据库中同步过来的。

数据库接口(DBI)服务是战区连接数据库读取玩家信息和战区信息的接口,并且肩负着监视战区运行状态的任务,如果DBI服务瘫痪,玩家将不能登陆、计费或正常退出游戏。正常情况下,在战区服务器中保存有大量的游戏服务器公用的数据,而且很多是要更新到数据库中的,如果每次的访数据库都由ZS直接访问,这样势必会更加重了ZS的负担。设立DBI的主要目的是分担ZS的访问数据库工作,很多情况下访数据库是异步进行的,比如游戏中的元宝买卖,GS把交易信息发往数据库后,并不是一直等待消息的返回,而是继续往下执行,当数据库对元宝数量进行检查并交易后再发消息到GS,通知交易是否成功。

战区服务器(或称中心服务器)是一个游戏世界的主要服务器,它负责对战区下游戏服务器的监视、不同GS之间消息的转发,同时还负责对玩家信息的读取、玩家档的存储。在ZS服务器下有一个mysql数据库,记录着当前战区的公用信息,如帮派信息、物品掉落信息等,同时记录玩家操作行为日志,比如玩家打造、丢弃、交易物品等信息。

             

 4   
战区服务器结构图

 

游戏服务器(GS)负责游戏场景,并处理玩家在游戏过程中的一切操作,在此结构中,每个GS的功能相同,负责游戏世界的所有地图,并直接与游戏客户端通讯。同一战区下的GSZS统一控制。不同GS中的玩家是不可见的,但可以通过战区服务器下的ChatServer进行聊天,如果要进行组队、交易等玩家交互行为,要某一玩家退出当前GS,登陆到战区下的另一GS

 

2)启动平台模块

游戏启动模块是指启动游戏的一些客户端和服务器程序,其中包括启动界面play、显示列表服务的界面shell、升级程序updatewizard、升级提示程序updateawoke、列表服务器LS、入口服务器ES

            

 
5     登录游戏服务器图示

 

玩家能过游戏客户端登录游戏服务器时,一般经过以下几步处理:

1、用户通过Play访问EnterServer,由EnterServer通知Shell应该连接的ListServer

2、确定ListServer后,通过ListServer列取战区列表及战区下服务器列表

3、选择服务器后,Shell可获得其ipport,并进行版本升级控制,并引导玩家登录。

4、登录成功后Shell将启动游戏客户端GameClient

5GameClient根据参数连接GameServer并进入游戏世界开始游戏

 

3)配置管理、监控

1GMTools

由游戏管理员使用的用来管理游戏的工具,具体包括Gm公告工具,踢人工具等,其功能有游戏内踢出玩家,发送线上公告等

2DBICortroller

监视游戏内各部分的运行情况,包括登陆人数、登陆IP数、游戏中在线人数、心跳等。

3FDBITools

FDBITools可通过Mysql数据库查询玩家的物品使用、交易、等级、金钱、帮派改变等信息。

4DFSTools

负责监视扣费服务的运行情况。

 

3、架构的特点

ZS监视着各个GS的运行状况,相当于各GS的一个守护进程。GS与游戏客户端直接通信,GS通过ZSBNNet网络服务从数据库中读取游戏中所需的数据。

因为同一战区下的玩家可以登陆战区下的任何服务器,所以在战区玩家增加的情况下,只要简单地增加几个GS就能很好的减轻压力。而且在GS出现异常的情况下,只需维护单GS,而在此期间玩家可以登陆到其它的GS上继续游戏。在开启游戏活动时,只要通过简单的配置就能实现在指定的几个GS下开启。

此结构的缺点也是很明显的,因为每个GS都要运行着所有的游戏地图,随着现在游戏中地图等资源的不断增大,给GS的负担可想而知,这就必然降低了GS对玩家数量的承载能力,而在不同的GS下玩家又是不可见的,这就在很大程度上限制了玩家的交互。针对以上问题,现在的游戏架构在上面介绍的架构上作了一些改进。 

 

 

四层结构的服务器架构

1、总体结构层次:

                   


服务器层次结构2

 

在这个结构中,在客户与游戏服务中间加入了一个游戏通信层,负责客户端与GS之间的通信,这样,通过这个中间层,就能把服务器进行集群式分组,由多台服务器组成一个游戏服务器组。每个GS负责游戏世界的若干个场景,玩家与场景之间以及场景之间的通信都由Gate来完成。这样就实现在在同一战区下的玩家都是可见的。

 

2、服务器架构实现:

                  

 7   
四层结构服务器架构

 

1)这个架构中最大的变化在系统服务模块。

                      

8   
系统服务模块结构图2

 

网关服务器(GateServer)可以看做是整个游戏的网关,玩家和游戏世界的消息通过GateServer传递,并且由其判断消息的正确性和过滤非法消息,同时作为游戏客户端的接入服务器,实现客户端到游戏服务器之间的数据交互,其中网络传输的数据分为两个部分,一部分是处理游戏客户端和游戏服务器之间的高层指令以及数据的转发,另一部分是处理游戏客户端和游戏服务器对数据库访问的数据请求。它还要负责玩家跨场景切换服务器时的信息传输及同步。由于通过GateServer的消息量很大,所以还增加了一个FDBI服务器。

    

9   
网关服务器结构图

 

   

 10  Client—Gate—Server
消息传输流程

 

角色存盘接口及存盘服务(FDBI)是角色存盘接口,能根据GameServer的需求存取玩家档案。FDBI服务器的另外一个作用是Mysql服务,用来存储GameServer的大多数数据,如帮派信息、玩家在游戏中的活动记录等。实际上它就是上面介绍的三层结构中ZS功能的一部分。

 

3、架构的特点

这种架构中,游戏客户端的消息都是通过GateServer来过虑、转发的,场景的加载和关闭由GateServer统一处理,在整个游戏世界启动时,GateServer根据缺省的场景配置表,来分配每个GameServer所启动的场景数量和场景号;在游戏世界运行过程中,如果发现某个GameServer负载过重,可以选择一个负载较轻的GameServer分担负载过重的GameServer上的某些场景,以达到动态场景加载实现负载平衡。也可以通过增加GameServer,对游戏场景进行更细的划分来达到分压的目的,但这种情况下,也会造成Gate
Server
压力的相应增大。

一个GateServer所能承受的客户端连接数实际上就是一个战区所能容纳的人数,现在一个战区只包含单个网关服务器GateServer。同时,由于一个战区的所有玩家都是通过一个GateServer与服务器交互的,所以如果GateServer受攻击或宕机后,该战区的所有玩家将不能继续玩游戏,所以多Gate的游戏架构又是另一个研究方向。

 

以上只是比较理论地介绍了MMORPG游戏服务器的架构,但在实际操作中,各个游戏会根据具体的需求,对其做一些调整、修改,所以各游戏的架构都各不一样,不过万变不离其宗。

 

抱歉!评论已关闭.