大型网络游戏关键技术研究

很多玩家游戏通常运行在LAN上,LAN有很高的带宽、低延迟和低丢包率来保证整个游戏的可玩性。随着Internet的发展,多玩家游戏产业和Internet相结合从而产生了网络游戏。但是Internet却有着诸如延迟、抖动、不能提供很好的多播等缺点。大型网络游戏作为一种分布式系统在高峰时要承载巨量用户在线,这就对大型网络游戏通信系统的设计提出了非常高的要求。如何提高系统玩家承载量,使系统具有良好的伸缩性,以及如何利用有限的带宽为玩家带来一致而平滑的游戏世界等问题成为我们研究的重要领域。针对这些问题,我们对大型网络游戏的定义、通信体系结构、数据和控制分布模型等问题作了大量的研究。本贴从通信的角度对大型网络游戏作了定义,对几种通信体系结构作了比较,在此基础上着重研究一种层次化多服务器结构模型,并对它进行了改进。最后给出了在这种模型之上的一致性控制协议以及如何将现有降低带宽的技术应用到这种体系结构上的方法。

游戏和计算机游戏
广义的游戏涵盖的范围很广,不仅仅指计算机游戏。国内外很多学者从很多角度对游戏作了定义:游戏在规则要求下重新构造事物的形式;游戏是一个由规则定义的系统,在这个系统中玩家参与到人为的冲突中,最终得到一个可以计量的结果;游戏是一种活动,它在有限的时间和空间内以一种可视的顺序进行。它的规则是被自由接受的,玩家在其中追求刺激的感觉。我们注意到这些定义有一些共同点,这些共同点构成了整个游戏的要素。它们是玩家(Player),游戏世界(Game World)和游戏规则(Rules)。基于以上原因,我们对游戏作如下定义:有限的活动实体在有限的游戏空间内遵循某个规则集合进行交互的过程。在本文中,我们将依据这个定义,将有限的活动实体和控制规则以特定的方法分布到游戏空间节点上。

当利用计算机构造玩家,游戏世界和描述规则的时候,我们称之为计算机游戏。值得一提的是,游戏引擎为同一类游戏提供了良好的复用形式,它定义了玩家,游戏世界和规则控制的一般形式。

单机版计算机游戏是在一台计算机上模拟整个游戏世界。它们通常只有有限的几个玩家,游戏交互性不强,内容单一。多玩家游戏和大型网络游戏都是指游戏世界和游戏玩家依靠网络进行通信的计算机游戏。有了网络做传输媒体,在形式上多个玩家就可以同时进行游戏。根据网络规模和玩家人数的多少,可以划分出多玩家游戏和大型网络游戏。大型网络游戏一般是指依靠Internet作为传输网络的游戏,它通常具有几千至几十万人同时在线的承载能力。正是这种规模上的复杂性使得网络游戏关键技术的研究包括了广泛而又有深度领域。还有一些新兴的移动娱乐事业的分支出现,它们要开发分布式多人游戏的无线应用,从这个角度上说,网络游戏将会在未来继续提供技术和实践上的挑战。

网络游戏属于一种空间共享技术,Benford对空间共享技术作了广义的划分。在他的分类中,虚拟现实则包含了军事模拟、虚拟现实(VR)和计算机支持协同工作(CSCW)三个研究方向。HLA是针对DIS发展起来的,其背后的理念是将DIS协议为像网络游戏这样的其它非军事应用所用。尽管这些目标还没有达到,但军事和娱乐事业中的合作还是成果颇丰。DVE是VR的研究分支,DVE更加关心虚拟参与者的表示以及交互和通讯的方法。90年代期间,人们将CSCW和VR相结合,从而产生了协同虚拟环(CVE),它主要集中于在avatar之间进行协作。CVE已经在产品研发、3D编辑和游戏设计中使用。网络游戏具有分布式交互环境(DIS)、分布式虚拟环境(DVE)和协同虚拟环境(CVE)的特征,但并不是上述三种技术简单的堆砌,网络游戏属于第四类分布式实时应用。

通信体系结构定义了网络游戏的计算模式:将数据(游戏世界和游戏实体)和控制(规则和管理机制)分布到特定体系结构之上,同时给出相应的数据一致性和同步协议以及必要的减少带宽的方法,这样才能构成一个完备的网络游戏通信系统的层次。下面我们将从上述几个方面分别研究。
通信体系结构
对分布式计算来说,通信体系结构要考虑如何将应用组件分布到网络中的各个节点以及如何定义它们之间的关系。现在,人们已经提出了几种主流的通信体系结构以及他们的变换形式。我们认为,这些计算模式是否适用于大型网络游戏主要从下面几个方面进行衡量:伸缩性(Scalability)、有效性(Availability)、响应性(Responsiveness)、全局数据控制能力(Global Data Controlling)和安全性(Security)。在网络游戏中可伸缩性是指⑴在系统增加和删除节点时,系统功能保持不变;⑵增加节点(server或peer)时,它不会使得系统的资源枯竭而且还要带来额外的资源。有效性是指在某些节点发生故障时,系统除了性能上的降低之外,还能保持游戏世界完整性和有效的控制能力。响应性保证了玩家可以得到一个平滑而连续的游戏过程。游戏运营商总是要获得一定的利润,这些利润要在能够获得很强的全局数据控制能力之上才能保证。不仅如此,我们正在进行数据挖掘的研究也是把全局数据作为挖掘基础的。Kirmse指出大型网络游戏有两个安全性目标:保护敏感性数据和提供一个公平的游戏环境。需要强调的是,这些系统参数之间并不是相互孤立的,参数均为理想值的系统是很难甚至是不能构建的。下面我们将从上述几个方面对几种计算模式进行比较和研究。

1. C/S
C/S模式是应用非常成功而起广泛的计算模式(如图1,其中实心圆代表拥有服务器进程的节点,空心圆代表拥有客户进程的节点;实线代表请求消息,虚线代表更新消息)。C/S模式也是游戏产业中主要应用的模式。它的优点是管理复杂度低,通过集群技术可以提供一定的伸缩性,因为有很强的全局数据控制能力,所以它的安全性很高。但是随着玩家的增多,服务器系统的计算资源就成了瓶颈问题,系统有效性和响应能力得不到保证。设每个客户的发送请求消息的速率为a,客户数量为n,则服务器系统的接收速率为an,发送消息速率为n2级。客户端只需要进行本地的图形绘制就可以了,其他所有的计算都在服务器系统进行。

未命名.jpg

2. P2P
Peer-to-Peer 计算是近些年来研究的热点,它的特点是非常好地解决了 C/S 模式中服务器计算瓶颈问题。整个系统的计算能力由所有节点的计算能力之和决定。由于每个peer都是对等的节点,没有任何一个节点拥有特权,所以它没有全局数据控制能力。玩家的虚拟资源存储在本地节点,安全性也得不到很好的保证。理论上,随着越来越多peer加入,系统计算能力提高,可用性增强,但是整个系统的通信容量呈2n级增大。当然我们可以采用像兴趣管理等技术进行改善。

未命名.jpg


3.Multi-server
多服务器结构结合了 C/S 模式和 P2P 模式。可以从两个角度描述这种模式(如图 3):首先它是对 C/S 结构的扩展,利用相互连接的多台服务器为客户提供服务;我们也可以把它看成是多个C/S系统的P2P网络。多服务器结构具有很好的可伸缩性和全局数据控制能力。可以通过在各个服务器之间采用复制技术进一步提高系统可靠性和响应性。当采用镜像服务器时,服务器的消息输出速率为n级的,而C/S是2n级的。显然,为了保证服务器之间数据一致性而带来的管理上的开销(m2级的,m 为服务器的数量)是不容忽视的。

未命名2.jpg

4. Hierarchical Multi-server
当服务器数量增大时,多服务器结构服务器之间的通信容量将产生和P2P一样的问题。我们可以将服务器之间的关系组织成k元树(图4 为k=2的情况),通信容量将降为logm(k=2时)级的,管理也变得容易了。服务器之间采取镜像技术,玩家选择物理上和自己接近的服务器登录。当玩家移动时,兴趣管理技术能够在这种结构之上更加有效的减少带宽。为了进一步减少主干信道的带宽需求,我们对这种结构……这样某个叶服务器节点的更新消息可以被分流,一部分在主干信道上传输,另一部分在环上传输。当需要增加服务器时,可以在现有叶节点下增加下一层服务器,只需要简单算法就可以形成新的环。

未命名.jpg

Hierarchical Multi-server数据和控制分布
游戏世界数据在服务器之间作镜像,这样玩家可以在物理上和自己接近的节点快速访问游戏世界的信息。实体状态由本地服务器维护。可以把用户数据库集中存储在主干信道的几个节点上(例如 2、3 节点)以减少用户数据一致性管理所需要的代价。

现在考虑游戏状态一致性控制策略。假设4号服务器(s4)中的玩家p从游戏世界的A点移动到B点,显然其他的玩家应该更新他们的游戏世界状态。现在有两种状态计算的方式:⑴在s4种计算(碰撞检测等),然后将结果沿主干信道发送给其他的服务器;⑵s4 将消息沿主干信道发送给其他的服务器,它们各自执行状态计算,再将计算结果广播给其他服务器。第一种方式的最大缺点是s4不知道其他游戏实体的位置,只根据本地信息计算所得的结果不一定准确。我们可以使用两阶段提交协议修正计算结果。第二种方式中,当其他服务器作广播时,对带宽的需求显著增加。我们给出如下算法,解决这个问题:

⑴事件源服务器(如s4)将消息沿主干信道发送给其他服务器(利用兴趣管理还可以做优化,在第4节中讨论);

⑵每个服务器节点接收到消息后根据本地状态计算出新状态 α;

⑶叶服务器节点向它的上一级服务器节点f汇集α;f对汇集数据和自己的α进行比较,得到新的简单计算结果α′ ;

⑷f把自己作为叶节点,递归重复过程⑶直至在根节点(s1)得到最终的计算结果β

⑸根节点将β沿主干信道广播;
⑹各节点服务器根据β 更新本地状态。

Eric Cronin 等人对客户事件根据一致性和延迟要求作了分类:⑴实时事件(Real-timents);(2)一致性事件(Consistent events)⑶;一致性实时事件(Consistent real-time events)。根据不同的事件,最好能够制定不同的状态计算(或控制)策略。除了一致性控制协议外,由于网络延迟等原因热可能造成给服务器游戏世界状态不一致,我们还需要一定的同步策略予以补偿,这是我们下一步研究的重点。
大 型 网 络 游 戏 系 统 中 降 低 带 宽 的 技 术 有 包 的 压 缩 和 聚 合 ( Packet Compression and Aggregation)、兴趣管理(Interest Management)和预测拉扯(Dead Reckoning)等。这些技术可以应用到层次化多服务器模型中。兴趣管理要求把消息只发送给对这个消息感兴趣玩家的子集,对于消息的兴趣用兴趣区域(aura)表达,aura可以进一步分为focus和nimbus。只有当实体seeker的nimbus和实体hider的focus相交时,hider才能看到seeker(图5[4])。

未命名.jpg

我们可以利用这个原理有效的减少带宽。在层次化多服务器模型中,如果aura 变化的不是很频繁,可以在每一个服务器节点设置aura的本地缓存。记录描述如下(k元树示例):

未命名2.jpg

其中,Aura Descriptor 是兴趣区域的描述符,用来唯一标示一个 aura, fi(1≤i≤k)代表第 i 颗子树中是否包含游戏实体属于该 aura, fo则代表本节点中是否有包含属于该 aura 的游戏实体。f 值用1位表示。利用该记录的集合,就可以描述所有的aura。这样可以对上述一致性协议算法第一步作如下改进:
⑴ 服务器节点将消息无条件发送给父服务器节点;
⑵ 服务器节点通过计算确定产生事件的实体所在的 aura;
⑶ for (i = 0 to k)if (fi为真)将消息发送给当前服务器节点的第i 颗子树的根节点。
显然,该方案需要在服务器节点之间维护该结构内容的正确性。

posted @ 2011-07-30 00:21  GameKing  阅读(1891)  评论(0编辑  收藏  举报