一种高性能的大型多人在线角色扮演游戏服务器架构设计


计算机光盘软件与应用 2012 年第 09 期 Computer CD Software and Applications 软件设计开发 — 187 — 一种高性能的大型多人在线角色扮演游戏服务器架构设计 马亚花 (西南交通大学,成都 610031) 摘要:大型多人在线角色扮演游戏(Massively Multiplayer Online Role Playing Game,以下简称 MMORPG)一般采用 客户端/服务器结构,服务器架构设计是成功开发一款 MMORPG 的关键,本文对高性能 MMORPG 服务器架构设计进行 了深入地研究。一个 MMORPG 一般会开设多个区供玩家进行游戏,一个区会包括一组服务器,本文设计出的服务器组架 构包括 LoginServer、WorldServer、WorldGameServer、GameServer 和 DBServer 等服务器。 关键词:MMORPG;服务器;架构;高性能 中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 09-0187-02 一、前言 MMORPG 的结构分为客户端与服务器端,客户端展现游戏 实时画面,并且将玩家在客户端逻辑请求的操作发往服务器端, 服务器端负责响应所有客户端的连接请求,处理客户段的逻辑请 求,并将结果返回给客户端以使游戏在客户端继续进行。客户端 与服务器通过网络数据包交互和完成每一个游戏逻辑,游戏绝大 部分逻辑都是在服务器端负责处理,为了保证海量用户同时进行 游戏,并且体验良好,优秀服务器架构起到了非常关键的作用。 二、服务器架构设计 (一)服务器架构不同分类 服务器组架构有多种,其中使用最广泛的有两种:一种是带 路由服务器的服务器架构;另一种是不带路由服务器的服务器架 构,两种方案各有利弊。本文设计出了另一种新型的设计方案: 一个世界服务器作为整个服务器组的中心,一切请求通过中心服 务器转发,呈星形结构。每个其他服务器只负责处理自己的逻辑。 这种方案做到了每个服务器各司其职,职责清晰,并且根据游戏 玩家数量的改变来动态的增减服务器的数量。 (二)服务器架构设计 根据 MMORPG 规模大小和设计不同,每组服务器中服务器 种类和数量也是不同的。本文中的设计是星形结构服务器组架构, 如图 1 所示。 图 1 星形服务器架构设计 星形服务器架构设计虽然增加了服务器设计的难度,并且服 务器的数量也相应的增加了,但却带来了其它架构所不具有的优 点,具体优点为: 1.WorldServer 所有其他服务器的管理者,可以对所有其他服 务器进行调度,使得整体结构非常清晰,各个服务器各司其职, 也利于开发过程中的工作划分。 2.WorldServer 只负责调度、数据包数据解析、数据加解密、 数据超时处理,不做任何逻辑处理,这样主要是可以过滤掉错误 和非法的数据包,提高其他服务器的处理数据的效率。 3.GameServer 可以随时增加,WorldGameServer 和 GameServer 中的复杂逻辑可以随时提取出来做成单独服务器,有 效提高效率和扩展性。 星形架构虽然有上面的三个优点,但是还是需注意两个可能 导致负面效果的情况:一个是如何避免中心管理者身份 WorldServer 的高负载瓶颈问题,第 二 个 是 由 于 不 同 的 问题导致的 WorldServer 出现故障,导致整组服务器瘫痪,无法对外提供服务 问题。上述两个问题可以采用 Nginx 负载均衡技术加以解决。 Nginx 负载均衡技术就是同时存在多个 WorldServer,比如一组服 务器可以配置两台或更多 WorldServer。通过对 Nginx 进行简单的 配置,就可以达到实时的同步两台或多台 WorldServer,当某一台 负载较大或者宕机时,自动切换到正常运行的 WorldServer,从而 保证所有客户端都不会掉线。从图 1 的服务器架构图可以看出, 一组服务器包括 LoginServer、WorldServer、WorldGameServer、 DBServer 和多个 GameServer 等多种服务器。一组服务器一般至 少配置两台 WorldServer 和一台 Nginx 服务器,因为对于 MMORPG 运营来说稳定性是至关重要的。在游戏运营中所面临 的潜在的风险是服务器宕机等突发事件。需配置两台 WorldServer 和一台 Nginx 服务器可以组成一个负载均衡,可以有效的防治服 务器宕机带来的风险。下面是对各种服务器主要功能和服务器之 间数据交互的详细解释。 (1)LoginServer LoginServer 主要功能是对玩家账号是否合法进行校验,只有 通过校验的账号才能成功登录游戏界面,运行游戏程序。从架构 图可以看出,LoginServer 会连接 WorldServer 和 AccoutDB。 AccoutDB 玩家账号信息数据库,数据库中存放玩家的具体信息, 比如账号和密码等。玩家登录游戏的基本流程是,客户端填写好 账号和密码,然后将账号和密码发送到 LoginServer 服务器验证账 号和密码,如果验证通过,LoginServer 服务器将发送请求给 WorldServer , WorldServer 同 时 生 成 一 个 SessionKey, 之 后 WorldServer 将此次登陆的 SessionKey 分别发给客户端、 DBServer、WorldGameServer 和其它 GameServer。等客户端选择 角色以后进入游戏过程,GameServer 和 WorldGameServer 验证 SessionKey 的合法性,如果和客户端携带的 SessionKey 不一致, 就无法成功的获取到客户端选择的角色,也不能进入游戏。 (2)WorldServer 服务器 WorldServer(WS) 主要负责在用户游戏过程中管理 WorldGameServer、DBServer 和各个 GameServer。转发他们和客 户端之间的数据包。对数据包进行解析,过滤错误包,进行加解 密,并不对游戏逻辑做任何处理。 (3)WorldGameServer 服务器 WorldGameServer(WGS)主要负责全局性的游戏逻辑处理。 MMORPG 中一般会有帮会系统、家族系统、排行系统等全局性 的逻辑系统。这些系统不但是全局性的,而且是和地图相关的, 因此单独设计一个服务器来处理。 (4)GameServer 服务器 GameServer(GS)服务器主要功能是处理游戏逻辑。MMORPG 有庞大背景,丰富的色彩效果,激烈的对抗阵营,完备的技能体 系和装备。目前,MMORPG 主要包括声望系统、宠物系统、战 斗系统、摆摊系统、任务系统、生产系统、副本系统、宝石系统 和装备系统等。从软件架构角度看,所有这些系统都可以看作是 GS 的子系统或模块,它们共同处理整个游戏世界逻辑的运算。游 戏逻辑包括游戏角色进入游戏、退出游戏、切换地图、切换游戏 服务器以及各种逻辑动作(比如行走、跑动、购买道具、使用技能、 聊天和攻击等)。由于一个完整的游戏世界会有许多游戏场景,在 该架构体系中通常有多台来自同一组服务器的 GS,这些 GS 共同 负责处理游戏逻辑,每台游戏服务器负责一部分地图处理。明确 的分工不仅降低了单台服务器的负载,同时也降低了 GS 宕机带 计算机光盘软件与应用 2012 年第 09 期 Computer CD Software and Applications 软件设计开发 — 188 — 来的风险。每次玩家退出游戏是,服务器端就会将玩家当时所玩 游戏的地图编号和所在 GS 编号存放到玩家角色信息里,这样等 玩家再次登录时,就会进入到上次退出时的 GS。继续进行上次的 游戏。玩家也可以选择从新开始游戏。 (5)DBServer DBServer 服务器主要的功能是进行玩家角色数据缓存和将 缓存的玩家数据定时进行数据库存取。缓存玩家数据是为了保证 玩家需要的角色数据能快速的读取和保存。由于角色数据量非常 多,其中包括玩家的等级、生命值、经验、魔法值、技能、装备、 好友、公会等。如果每次 GS 获取角色数据都去读数据库,那么 读取数据会非常慢,玩家最多的时候还会造成数据库服务器崩溃, 在 DBServer 中缓存角色数据后,提高了数据请求的响应速度。定 时 将 缓 存 的 玩 家 数 据 存入数据库,可以保证玩家数据永久存储, 并且即使宕机,玩家回档,玩家的数据也是最近几分钟甚至几秒 钟的数据。玩家登陆成功后,WorldServer 会生成一个 SessionKey 并发给 DBServer 和客户端,当玩家请求获取角色信息和进入游戏 世界时,DBServer 会进行验证,如果客户端的 SessionKey 和自己 保存的 SessionKey 不一致,则 DBServer 会认为玩家是不合法用 户,获取角色信息会失败。另外,玩家选取角色正式进入游戏时, GS 需要到 DBServer 请求玩家的角色详细数据,这时 DBServer 同样会验证 SessionKey 的合法性。 (三)服务器交互的主要流程 下图给出服务器与服务器间数据通讯的主要流程。 图 2 登陆流程 图 2 的流程说明了,在选角色过程中,客户端会把游戏账号、 经过 MD5 的密码发送给 LS,LS 去 AccountDB 读取账号信息进 行验证,验证通过后,将验证过信息发送给 WS,WS 生成一个 SessionKey,分别发送给客户端、DBServer 和各个 GameServer。 之后 WS 连接到 DBServer,从 DBServer 取得玩家的角色关键信 息,如等级、职业、装备等。DBServer 比对从 WS 和客户端获得 的 SessionKey,如果发现是同一个 SessionKey,则将玩家的所有 角色信息发送给客户端。之后客户端就可以选择一个角色进入游 戏了。 图 3 玩家进入游戏世界流程 图 3 的流程说明了,在玩家选角色正式进入游戏时,GS 会从 客户端取得此次的 SessionKey,和自己从 WS 获取的 SessionKey 做比较,以验证 SessionKey 的合法性,验证通过之后,客户端和 GS 建立连接,同时 GS 通过 WS 转发,到 DBServer 获取角色的 全部信息,这些信息包括装备、技能、好友、帮会、家族等等。 图 4 游戏逻辑处理流程 图 4 的流程说明了,在玩家游戏过程,客户端的所有操作, 如走跑、说话、使用技能、做任务等都会通过 WS 转发到 WGS 或者 GS,所有的游戏逻辑处理都有 WGS 和 GS 处理,完成后再 通过 WS 转发给客户端显示。 三、总结 本论文从自身实际应用出发,提出了一种高性能服务器的架 构设计和解决方案,同时详细探讨了各种服务器的功能,以及服 务器建的数据通信,清晰的图解说明了各个服务器协同工作的过 程。 参考文献: [1]蒋臻甄.MMORPG 服务器集群的设计和实现[D].硕士论文: 华东师范大学,2006 [2]GameDev.net 网站及论坛. http://www.gamedev.net/page/index.html [3]Smed,Jouni et al.Aspects of Networking in Multiplayer Computer Games.In Proceedings of the International Conference on Application and Development of Computer Games in the 21st Century,November,2001 [4]Baughman,Nathaniel and Levine,Brian.Cheat-Proof Playout for Centralized and Distributed Online Games.In Proceedings of the Twentieth IEEE Computer and Communication Society INFOCOM Conference.IEEE,April,2000 (上接第 186 页) 网络技术发展日新月异,技术更新频繁。网络体系结构、功 能模块要满足以后业务发展的需要,所以在设计网络管理数据库 时要考虑以下几个原则,即开放原则,可扩展性原则,界面友好 和安全可靠原则。 (三)数据库设计 数据库设计是网络资源管理系统的核心和基础。数据库设计 围绕基本数据建立结构稳定的数据库,不但要解决网络资源统计 指标的经常变化。同时要将资源变化指标以代码形式存放在各个 资源指标库中,作为数据来处理,并将生成报表的数据项目、审 核关系、汇总方式、打印格式等参数放人模块数据库,为资源管 理和分析提供可靠地依据。 四、结论 网络资源数据库设计是一个庞大、复杂的系统工程。不仅 要求设计人员具有深厚的网络技术知识,同时还要求具有计算 机技术和语言开发能力。本文没有对整个的网络资源管理数据 库设计进行详细而系统的说明,只是概要的提出了在进行网络 资源数据库设计时要注意的问题。通过本文的分析,提出了再 设计网络资源数据库时,不仅要考率实际网络管理需求,而 且 要 注 意 数 据 库管理方便性和实效性。提高资源管理效率,减少 资源的浪费。 参考文献: [1]姜旭平.信息系统开发方法—方法、策略、技术、工具与 发展[M].清华大学出版社,1997 [2]张震,张曾科.一种新的 WEB 数据库系统结构[J].小型微型 计算机系统,2001,5 [3]武彬.网络信息资源管理与数据库建设[J].河南科技,2008,3 [4]罗超里.开发管理信息系统[M].清华大学出版社,2001
还剩1页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf