无缝世界网游服务器架构设计思路(下)

无缝大地图世界构建!!!为什么选择无缝大世界地图构造???? MMO 魔兽世界。。等诸多的开放世界游戏都用到了无缝大世界构建。不一一列举了。下面开始我们的大地图世界构建,和会遇到什么样的问题难点。 通常,都是先把游戏世界分成小块,然后在相邻的小块间加入一些服务器间的通讯,每个服务器都可以自主地作出反应。服务器互相通知那些与边界接近的对象,这样来,每个服务器都可以通过它们的本地代理来对远程对象(在某种程度上)进行控制。 问题1:分割游戏世界 怎样才能最好地划分游戏世界?这个问题往往依赖于特定的游戏。在一个由玩家控制游戏人物的基于地形(t... 阅读详情

无缝世界网游服务器架构设计思路(下)
上次写了《无缝世界网游服务器架构的设计思路》,这次是续篇,主要内容是两种架构的优缺点分析。
从一组服务器的角度来看,一般来说,我们的服务器组(Cluster)内都会有登陆验证服务器(Login Server)、持久性数据服务器(DB及DB Proxy)、连接代理服务器(Gate Server、FEP Server、Client Proxy等)以及Auto Patch Server、还有用于集中管理及控制组的服务器等等,由于这些服务器基本上什么样的架构设计都会用到,所以——现在不考虑以上这些服务器,只考虑具体处理游戏逻辑、游戏规则的各个服务器。以此为前提来分析一下 Services-based Architecture 和 Cells-based Architecture 的优缺点。

对Services-based Architecture的分析
基于服务的架构,顾名思义这种架构的实现(程序)会是和服务的具体内容(策划)相关的,这是因为——各种【服务】内容的确定是建立于项目的【需求分析】基础上的,【需求分析】的前提是基本确定了【策划设计】,至少是项目的概要设计。
我想多数做过游戏项目的人都应该对需求变更有很深的感触,每个人都说“开始想做的那个和最后实际做出来的那个不一样”。特别是在项目的早期阶段,团队的不同成员对项目做完之后的样子有相当不同的看法(很可能大家互相都不知道对方怎么看的),这很容易理解,谁也不可能从几页纸几张图就确切地知道这个游戏做完了什么样子,即使不考虑需求变更。涉及到项目开发方法方面的东西这里就不多说了,总之我的看法就是——尽管我们不大可能设计出一个架构能够适应任何的游戏设计,但是不同开发任务间的耦合度显然还是越低越好,基于服务的架构适应需求变更的能力较差。
关于服务耦合不管如何划分service,不同 service之间都一定存在不同程度的耦合(coupling)关系,不同的 service 之间会有相互依赖关系。而你们的策划设计可能会让这种关系复杂到程序在运行时的状态很难以琢磨的程度。
假设:
1.服务器组内的战斗处理和物品处理分别由两个不同的服务(器)提供
游戏规则:
1.人物被攻击后自己携带的物品可能掉落到地上
2.某些物品掉落后会爆炸
3.物品在地上爆炸可能伤及周围(半径10米内)人物
4.人物之间的‘仇恨度’影响战斗数值计算
5.被攻击时掉落的物品爆炸后伤及的人物,会增加对‘被攻击人’的‘仇恨度’

我想我还能想出很多很多“看上去不算过分”的规则来让这个事情变得复杂无比,很可能你们的策划也在无意中,已经拥有我这种能力
而且他们在写文档时候的表达还多半不如我上面写的清楚,另外,他们还会把这些规则分到很多不同的文档里面去写。好吧,你肯定会想“把这两个服务合二为一好了”,实际上不管你想把哪两个(或多个)服务合并为一个服务的时候,都应该先考虑一下当时是为什么把他们独立为不同服务的?
实际上很多这样“看上去不算过分”的规则都会导致service间的频繁交互,所以每个service最好都是stateless service,这样的话情况会好很多,但是对于游戏来说这很难做到。
请求处理的时序问题服务耦合的问题在不考虑开发复杂度比较高的情况下,还是可以被搞定的,只要脑袋够清醒,愿意花够多的时间,那么还有更难以搞定的么?我看确实还有,如果你对将要面对的问题,了解得足够多的话

在这里插入图片描述

上面两个序列图描述的是某个玩家做了连续做了两次同样的操作但是很可能得到了不同的结果,当然这些请求都是异步地被处理。问题的关键在于——尽管两次玩家执行的命令一样、顺序一样,甚至时间间隔都一样,但是结果却很不同——因为图(1)里面C2CS::Request_to_attack请求被处理的时候,C2IS::Request_equip_item 这个请求还没有被处理完,但是图(2)显示的情况就不一样了。因为C2IS::Request_equip_item这个操作很可能会改变游戏人物的属性,这个属性又很可能影响attack的结果。这两幅图实际上省略了 Combat Server 与 Item Server 之间的交互过程。但是已经足以说明问题了,每个Service处理每个Request时具体会消耗的时间,是无法在设计时确定的!
谁喜欢这类结果上的不确定性?举个例子:玩家很可能已经装备上了“只能使用1次的魔兽必杀刀”然后攻击了一下魔兽,但是它却没死!这会导致什么样的结果?请自行想象。另外,这种不确定性还会表现为“在项目开发期和运营期的行为差异”,或者“出现某些偶然的奇怪现象”。
那还有解决方案么?有的,其实只要序列化玩家请求的处理,使处理有序进行就可以了。但是又一次的,这会带来新的复杂度——在某个范围(整个服务器组?一个行会?一个队伍?)内,以每个玩家为单位,序列化他(们)的(可能是所有)操作,但是也显而易见,这在某种程度上降低了请求处理的并发性,尽管它对并发性的影响可能只局限于不大(最少是一个玩家)的范围。

对Cells-based Architecture的分析
基于Cell的架构有个明显的优势就是Cell如何划分和你的策划没有关系这是真的。而且Cell间如何交互可以被放到系统的底层,具体有多底层、多隐蔽(实际上可以隐蔽到对开发上层游戏逻辑的程序员都不可见的程度)要看你的实现如何了。如果做到了某个系统的程序设计与游戏设计完全无关的话,显然,这个系统受到游戏设计变更(需求变更)的影响就会很小很小,甚至会到完全不受影响的程度,当然这是理想情况。
关于跨边界对象交互在基于Cell的服务器架构里面,实现无缝世界(Seamless World)的主要难点在于实现跨边界对象的交互时会出现的一些问题,因为这些对象在不同的Cell进程里面,这些Cell一般来说是在不同的物理服务器上运行。
无缝世界的特点自然就是无缝,并且因为无缝给玩家带来更好的游戏体验,所以显然我们希望“跨边界对象交互”问题不把事情搞砸,那么这种交互的表现就必须满足稳定、高效的前提。一般来说,高于300ms的延迟对玩家操作来说就属于“明显可见”的程度了,不能让玩家骑着500块RMB买来的虚拟马在一片大草原上面畅快的奔跑的时候,在某个地方突然就被“看不见的墙”给“挡”了一下,因为这“墙”根本看不见,所以会很影响“上帝”的游戏心情。
关于组成整个虚拟世界的Cell之间的关系,下面来分析两种情况:

一.Cell承载的场景不重叠

在这里插入图片描述
如图(1),一个连续的虚拟世界场景被分成左右两块,分别在不同的Cell Server上面运行。A、B、C分别是3个不同的游戏角色。在这种情况下B与C的交互并不存在任何障碍,因为B和C只不过是同一个物理服务器上同一个进程内的两块不同的内存数据而已。但是A与B/C的交互就不那么直接了,尽管他们所在的场景看上去是“连续的、一体的”但是事情不会像表面上那么简单。A与B发生交互时候会发生什么事情?例如A攻击了B、A与B交易物品等等,因为在这种结构下做数据同步会带来很多问题,例如对象状态不确定性、开发复杂度等等、相对来说两个Cell Server之间做网络通讯而带来的延迟可能反而是最小的问题,这些问题不需要很复杂的分析就可以得出结论,在此不再多说了。

二.Cell承载的场景(部分地)重叠

如图(2),一个连续的虚拟世界场景被分成左右两块,分别在不用的Cell Server上面运行。A、B、C、D分别是4个不同的游戏角色。这个情况下,中间的区域为2个Cell所共同维护,中间区域的对象同属于2个Cell所‘拥有’。这有什么好处?现在,任意两个对象之间,除了A与C之间的交互,都变得更‘直接’了。变得直接肯定是一件好事儿,那么A与C之间呢?他们之间其实也没有任何问题。
因为双方都已经超出了对方的Area of Interest(AoI)区域,游戏规则可以限制他们不能直接交互。
上面提到的第二种方案算不上什么魔法,但是肯定是比第一种方案更有效。接下来怎么办?假设B是个玩家,他站在中间这块区域上面时,并不会产生“我到底是在哪里”这样的疑问。
问题的关键在于对于Cell Server来说,怎么样同步那些处于重叠区域对象的状态。游戏世界内的对象可能同时处于1个、2个、3个或者4个不同的Cell Server。如果你的Cell分隔方法不限于水平线和垂直线、或者有人故意捣乱的话,还可能会更多。需要被同步的对象也不只是玩家本身,还包括怪物、NPC、一颗会走的树、某玩家在地上吐的痰等等。
由于我们的基于无缝世界的游戏规则不大会直接去限制游戏世界某处玩家的行为,也就是说玩家如果能相互交易物品的话,他们肯定希望在任何地方都能交易,“为什么其他地方都行,但是在某个墙角做交易就会导致物品丢失?”所以比较可靠的方法是建立一套的用于同步的底层机制,来同步这些跨边界对象。
怎么实现?这个话题很大,恐怕再写几篇Blog我也讲不完,但是有一些东西可以作为参考,例如:DCOM和CORBA规范,Java的RMI,基于Python的 PYRO,TAO(The ACE ORB)等等。好在分布式处理的问题不止是网络游戏会涉及到,可以借鉴的东西还是很多的。
总结很显然,这篇文章在两种架构的评价上面存在某些倾向性,但是倾向性本身只是副产品。另外一个副产品就是关于一些技术分析方法。
在考虑采用何种技术的时候,我们往往很容易地就会忽略对程序之外那些事情的影响。上面我提到的关于Services-based架构实现的时候,提到划分service及数据设计对程序设计能力的挑战、对策划设计的制约,对适应需求变更能力的影响,都不会只是空谈。这些问题也不是只在实现这种架构的时候才出现。
不要高估自己的智商,Keep It Simple and Stupid
应该可以让我们离成功更近一点儿。

大型MMO的服务器架构设计思路 ——如何让十万人同时在一个世界里打架而服务器不炸 设计一个大型MMO的服务器架构,就像设计一座城市的基础设施。你需要道路(网关)来让所有人进出。你需要把城市分成不同的区(地图分割)来分散管理。你需要电力系统、供水系统、通信系统(各种微服务)来提供基础功能。你需要数据库来记录每一个居民的信息。你需要AOI来确保每个人只关心自己周围的事情,而不是被全城的信息淹没。最难的不是设计每一个单独的系统,而是让所有系统协同工作。聊天服务器需要知道玩家在哪个场景服上。场景服需要知道玩家的公会信息。交易服需要知道玩家的背包数据。 阅读详情

相关推荐

云风的大世界架构,介绍基础的大型网游的服务端架构。

云风是网易的开发经理,在业界影响颇大。这个pdf是他关于大世界理念的基础介绍。

无缝世界网游服务器架构的设计思路(一)(转)

  过去一年中,花了很多时间在考虑服务器架构设计方面的问题。看了大量文章、也研究了不少开源项目,眼界倒是开阔了不少,不过回过头来看,对网游架构设计方面的帮助却是不多。老外还是玩儿console game的多,MMO Games方面涉及的还是不如国内广泛。看看 Massively Multiplayer Games Development 1 & 2 这两本书吧,质量说实话很一般,...

271

BCIC IV 2a数据集实战:从MATLAB导入到EEG信号分析全流程

本文提供了BCIC IV 2a数据集从MATLAB导入到EEG信号分析的完整实战流程。详细解析了数据集结构,区分了EEG与EOG信号,并演示了信号可视化、基础预处理(滤波、分段、基线校正)等关键步骤,帮助脑机接口研究者快速上手处理这一经典运动想象数据集。

weixin_29047919的博客 468

无缝世界网游服务器架构的设计思路

过去一年中,花了很多时间在考虑服务器架构设计方面的问题。看了大量文章、也研究了不少开源项目,眼界倒是开阔了不少,不过回过头来看,对网游架构设计方面的帮助却是不多。老外还是玩儿console game的多,MMO Games方面涉及的还是不如国内广泛。看看 Massively Multiplayer Games Development 1 & 2 这两本书吧,质量说实话很一般,帮助自然也很有...

weixin_34113237的博客 472

mysql数据库中使用存储过程带来的好处和示例(存储过程的概念、定义、作用等详解)

MySQL的存储过程(Stored Procedure)是一组SQL语句集合。用户通过指定的存储过程名和参数来调用并执行它。存储过程可以在数据库中预编译并存储,这样它们可以被多次调用而无需重新编写或解析SQL语句。 存储过程将复杂的SQL逻辑封装在一个可重用的单元中。多次调用存储过程,而不需要重复编写相同的SQL代码。- 通过封装,可以隐藏复杂的SQL逻辑,只向用户或应用程序提供简单的接口。MySQL的存储过程和编程语言中的函数的原理和目标是一致的:封装可重用的代码逻辑并提高代码的可维护性和可重用性。

weixin_70208651的博客 1717

ST-LINK调试原理与STM32硬件连接实战指南

嵌入式调试器是连接开发环境与物理MCU的核心枢纽,其本质是基于ARM CoreSight架构的实时硬件观测与控制接口。它通过JTAG或SWD协议访问内核寄存器、内存及外设,实现断点、单步、内存监视等深度调试能力,远超简单程序烧录功能。ST-LINK作为主流ARM Cortex-M调试器,支持SWD(2线)与JTAG(多线)双模式,在电平匹配、复位控制、引脚复用规避等硬件层面临关键工程约束。掌握VREF参考电压配置、nSRST硬复位接线、调试引脚隔离策略及Keil MDK调试会话配置,是保障STM32稳定联机

weixin_42596214的博客 311

MMORPG无缝大地图服务器架构设计总结

<br />地图分进程架构和无缝大地图单进程架构<br />有的游戏服务器,一个进程处理一张或多张地图上的逻辑,进入到不同进程的地图,数据须要一个进程间同步的过程。简单合理的同步做法是,先将数据同步到一个公共服务器;进入到目标进程后,再从公共服务器拉取本角色的最新数据。可以参考 http://blog.youkuaiyun.com/herm_lib/archive/2011/05/01/6381872.aspx 中的logicsvr1 dbproxy logicsvr2的关系。<br /> <br />分进程架构有他的

daemonh 8964

使用kmplot在线进行生存分析

欢迎关注”生信修炼手册”!kmplot是一个生存分析的在线工具,最初是设计用来对肝癌中的miRNA进行生存分析,对应的文章发表在scientific reports上,链接如下https...

庐州月光的博客 1万+

无缝世界网游服务器架构设计思路(上)

无缝世界网游服务器架构设计思路(上) 过去一年中,花了很多时间在考虑服务器架构设计方面的问题。看了大量文章、也研究了不少开源项目,眼界倒是开阔了不少,不过回过头来看,对网游架构设计方面的帮助却是不多。老外还是玩儿console game的多,MMO Games方面涉及的还是不如国内广泛。看看 Massively Multiplayer Games Development 1 &amp; 2 这两本...

蔡曜镫专栏 692

Android车载应用开发与分析(11)- 车载Android应用开发入门指南

将时间回退到2017年我大学刚毕业时,彼时移动互联网就已经开始退潮,各大个培训机构也纷纷停止了Android相关的培训,曾经热火朝天的应用开发从那时起,就开始走向下坡路,小程序以及众多跨平台框架也让市场对Android原生开发的需求逐年降低,市场需求的降低也造就了Android开发的面试变得史无前例的“卷”。 终于我在2019年选择离开了互联网,投身当时还不是非常火热的车载Android领域继续从事Android原生开发。而这一年中国首个外商独资的整车制造项目,“...

linkwj的博客 1万+

【2026年华为暑期实习(AI)-4月8日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

答案与解析 1. 相关系数问题 答案:C. 完全负线性相关 解析:相关系数ρ=-1表示X和Y之间存在完全负线性相关关系,所有数据点都严格落在一条斜率为负的直线上。 2. 矩阵秩问题 答案:B. Σ的对角线上非零奇异值的个数 解析:矩阵A的秩等于其奇异值矩阵Σ中非零奇异值的个数,因为U和V都是正交矩阵,不改变矩阵的秩。 3. 条件概率问题 答案:B. 0.5 解析:根据全概率公式和贝叶斯公式计算,P(B)=0.5×0.4+0.3×0.6=0.38,P(A|B)=(0.5×0.4)/0.38≈0.526,最接近

m0_73659489的博客 287

【转】无缝世界网游服务器架构的设计思路

原文:http://jinghuainfo.iteye.com/blog/1192805 过去一年中,花了很多时间在考虑服务器架构设计方面的问题。看了大量文章、也研究了不少开源项目,眼界倒是开阔了不少,不过回过头来看,对网游架构设计方面的帮助却是不多。老外还是玩儿console game的多,MMO Games方面涉及的还是不如国内广泛。看看 Massively Multiplay...

diche7031的博客 167

TypeError: ‘<=‘not supported between instances of ‘float’and ‘str‘解决方案

本文主要介绍了TypeError: '

weixin_43178406的博客 28万+

无缝世界网游服务器架构的设计思路(续)

{ 2008 02 15 } 无缝世界网游服务器架构的设计思路(续) 上次写了《无缝世界网游服务器架构的设计思路》,这次是续篇,主要内容是两种架构的优缺点分析。 从一组服务器的角度来看,一般来说,我们的服务器组(Cluster)内都会有登陆验证服务器(Login Server)、持久性数据服务器(DB及DB Proxy)、连接代理服务器(Gate Server、FEP Server、Cl

pi9nc的专栏 997

【企业智能体开发】优化模型成本、延迟与失败降级

小林的培训快开始时,服务台花很久“思考最优回答”,体验并不会更好。反过来,为了省钱而始终选最轻的模型,若连房间、连接方式和任务状态都识别不稳,后续错误检索和重复建单会造成更大代价。企业 Agent 的优化对象不是单次模型调用价格,而是任务在可接受时间内、安全地推进到正确结果的总成本。

Mr数据杨 893

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

无缝游戏世界

过去一年中,花了很多时间在考虑服务器架构设计方面的问题。看了大量文章、也研究了不少开源项目,眼界倒是开阔了不少,不过回过头来看,对网游架构设计方面的帮助却是不多。老外还是玩儿console game的多,MMO Games方面涉及的还是不如国内广泛。看看 Massively Multiplayer Games Development1 & 2这两本书吧,质量说实话很一般,帮助自然也很有限。当

zjl410091917的专栏 2569

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

网游服务器 Services-based 和 Cells-based 架构

网游服务器 Services-based 和 Cells-based 架构 (金庆的专栏 2018.3) 无缝世界网游服务器架构的设计思路 http://blog.youkuaiyun.com/SmartTony/article/details/6842065 提出了2种网游服务器架构: Services-based architecture 基于服务的架构 Cells-based archite...

金庆的专栏 759

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 无缝世界网游服务器架构设计思路(上)
下一篇: Linux 忘记mysql root密码简易步骤
贰月十七
博客等级 码龄14年 31粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值