关于完美时空“AX”系统说明的乱谈

    在GameLook上看到一则新闻,说是完美研发出了一个名叫AX的系统,从评论上看评价挺高,于是找过去看了下。新闻地址在这里:http://www.wanmei.com/news/company/20101122/74306.shtml

    其中关于技术部分的内容摘录如下:

网络游戏的服务器大多采用多线程Distributed system模式,利用Thread编程处理数据,在利用CPU空闲时间的同时提高游戏运行效率。然而在多道Process指令下,程序会相互制约,隔断进程间实时通信,对玩家交流的地域性造成局限。

而“AX”系统可提高数据库的并发访问速度,均衡服务器负载动态调整,使程序对指令的反应更迅速;同时修改游戏的分布式设计,使数据库形成动态交互模式。“AX”以记录锁替代传统编程,在提高速度的同时兼顾Database Transaction,令用户数据信息更为安全地在多进程之间进行传递,真正实现服务器无障碍沟通,为用户带来能够媲美现实交流的游戏感受。

 

    大概写这篇报道的人并不是个程序员,至少并没有让真正的程序员仔细审核。

    这一堆中西结合的专业术语看起来是挺唬人,不过细看下去就不是那么回事了,怎么看怎么乱。

 

    “网络游戏的服务器大多采用多线程Distributed system模式”,这个没错。“利用Thread编程处理数据,在利用CPU空闲时间的同时提高游戏运行效率”,这么说也没问题。可把这两句话放一起,就不是那么严谨了。

    Distributed system(分布式系统)跟Thread编程(多线程),虽然没有绝对的定义,不过我想大多数人都不太会赞同这里所描述的分布式系统与多线程编程的关系。百度百科上有关于分布式系统的简单介绍,可作参考:http://baike.baidu.com/view/991489.htm

 

    这里如果是想提出多线程模式的局限的话,是的,确实是有这样的问题,“在多道Process指令下,程序会相互制约,隔断进程间实时通信”, 但是“对玩家交流的地域性造成局限”,这个就说不过去了。

    单纯的“多线程编程”没有“进程间通信”,从这里就应该能够看出写这篇通稿的人不是一个真正的程序员了。

    另外,对玩家交流的地域性局限,跟多线程模式下的资源竞争问题很难牵扯到一起去。你就坐在我旁边,但是很不幸的,你对我的攻击包分在了一个一直竞争不到CPU资源的线程里,而我却总在让你流血。你我分处在地球的两边,但是我们却可以在游戏里亲密无间。

    一个众所周知无法越过的问题是,世间最遥远的距离,不是生与死,而是我就站在你面前,你却不知道我装的是电信而你是网通。

    而且,写这篇报道的人大概忘了,服务器编程早已进入了多核时代。

 

    这里可以做一点展开性的描述。确实,在游戏服务器中大量用到了多线程,但据我所知,大部分多线程只是用来分担IO操作,而不会让同一场景中的多个玩家分布到不同线程中,至少相邻很近的玩家不会,否则就会有我上面描述的情况存在了,这样给玩家的感受是非常不好的。多线程的应用环境更多的是在如网络IO,数据库IO这样的环境下。

    也确实,分布式模式在现在的网游服务器上应用的越来越多,但这个分布式不会是基于多线程的,至少应该是多进程的,而且更普遍的,应该是分布与不同物理主机上的基于网络的分布式。这也是大家普遍认可的分布式模型。

    比如,可能会让负责客户端接入的服务器分离出单独的进程,可能会让负责登录与角色创建的逻辑分享出单独的进程,还有负责数据库交互的,负责聊天的,等等。游戏服务器上最大的一块,地图场景服务器,也可能进行分布式处理,比如让多台服务器来共同承担一个宏大的游戏世界。

    在这种模型下,程序员更多关注的是如何设计高效的分布式协作模式,以及高稳定性和高容错性。而进程间的资源竞争问题在网络分布式环境下已经没有了,在单台机器上的多进程间有多核的解决方案。

 

    从第二段能对AX所实现的功能看出个大概。

    如果我的猜测没有错的话,AX应该是数据库之上的一层代理,或者就是一个自定义的分布式存储系统。

    目前的游戏服务器设计大都是为每个游戏服务器指定一个数据库,在这个服务器上创建的角色到不了其他服务器,因为数据不太好转移。这样也就催生了一些游戏的“付费转服”服务,由数据库管理员手动把玩家的角色数据转移到别的服务器下。

    大概AX实现了这样的功能,可以让游戏只使用一个存储系统,一个分布式的存储系统,不管他后台使用的是普通数据库,还是类似Google的存储系统,总之对上提供一个接口,在任何服务器下都可以取到所有的玩家数据。

    从完美的描述来看,大概实现上使用的还是普通数据库,AX是实现的一层代理接口,当玩家的数据转移时,AX能够快速的将数据转移过去。当玩家登录时,AX也能快速定位到这个玩家上次下线时把数据留在了哪里,并迅速把它转移过来。而且,这种转移甚至可以发生在玩家在线时,也就是能够无缝的从一个游戏服务器跑到另一个游戏服务器。

    当然,AX可能做的更多。

 

 

    不过别忘了,让游戏世界能容纳更多的玩家,或者说让玩家能在不同的游戏世界里自由来往,这并不只是程序员的挑战。

    对于大世界的提法在几年前BigWorld里就有,而对于动态负载均衡也是他的卖点,至于实际情况如何,没有实践就没有发言权,所以这个我不大好说。但起码,“实现服务器无障碍沟通”,这方面的技术挑战不会太大。

    而AX中提到的分布式存储系统的实现也不会是太大的挑战,至少国内运营大型系统的公司都有实力实现,比如腾讯支持上亿用户同时在线的QQ平台,比如taobao平台,百度平台,他们都会有成熟的技术储备。

    但是,网络的负载是否能够处理的过来。当魔兽世界里安其拉开门的时候,不到一千人涌到一起,然后就是大量的掉线,上去后再掉。。。当同屏的玩家数过多时,服务器的广播数据量是巨大的,让玩家能够自由移动,必须得有方法让他们不至于全都涌到一起,而如果对玩家的行为做过多的限制,那样又失去了大世界的意义。

    另外还有服务器结构安排的问题,按照现在的游戏服务器分布式结构,处理客户端连接的服务器会独立出来,客户端一旦选择了一台连接服务器就将会一直保持与这台服务器的连接。如果玩家转移到了另一个游戏世界里,那么这台接入服务器也必须保持与另一个游戏世界的连接,也就是说,每台接入服务器都必须保持与所有游戏世界的连接,这将是一个宏大的连接网络。否则就只能让玩家断开与这台接入服务器的连接,然后重新连接,这将会引入一些不稳定的因素。

 

    除了技术的考量之外,游戏的设计方面,一是上面提到的,如何不加太多限制的避免玩家过量涌入同一区域的问题。按照玩家的正常游戏行为,大都会偏向于挤到几台特定的服务器上,就像是魔兽世界里的明星服务器,每天排队依然还有玩家不断涌入,而其他的服务器情况会越来越坏,最后变成鬼服。

    另外,运营模式的改变。按照现在的运营模式,运营商会定期的开新服,以吸引新的玩家加入,而在允许玩家自由转移的情况下,新服的开放模式也需要改变,当然前提是你不会死板的限制玩家进入新的服务器。

    当然,你也可以说,我们的游戏世界就是一个宏大的游戏世界,只有一个,不是多个重复的世界。这同样不能避免说的问题,玩家还是会选择那些优秀的区域,或者说制造出一些优秀的区域。

 

 

    大世界的实现是游戏制作人的共同追求,或许AX在这方面已经迈出了一大步,同为游戏制作人,我也期望能够看到好的成果,至少对整个行业都能有个参考的目标。

    不过,技术的通稿还是找个程序员来把把关吧。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值