4

MMO万人同屏实验成功发布!

 1 year ago
source link: https://gameinstitute.qq.com/community/detail/133796
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

MMO万人同屏实验成功发布!

发表于2小时前
评论0 8浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学堂游戏程序行业精英群

711501594

3DMMO的万人同屏是一个让我激动不已的技术挑战!我是在08年关注到了3DMMO游戏服务器并行化的问题。并于同年就开始了一系列的技术尝试。软件工程和其他的工程一样。对于新的想法就是反复尝试,反复失败的过程。其实每个游戏服务器工程师都会开发一个自己的软件框架。一来容易维护二来使用方便。我只是比较幸运和执拗,喜欢用自己框架尝试新的想法。“念念不忘,必有回响”,进过一系列的技术改进,终于实现了3DMMO的万人同屏。

luacluster项目由两部分组成,服务器端的luacluster以及客户端的luacluster_unity3d_demo。虽然整合了luajit, uvlib等大量的第三方的开源库,但开发工作仍然非常的繁重。为了支持跨平台和兼容unity的坐标体系等,又做了很多非常复杂的实验。这个项目最大的难点在于,不能简单的把他归为分布式中的计算,存储或传输的任何一类问题。它是要在分布式的计算,存储和传输中寻找到一个恐怖的平衡点。

在2020年我个人曾连续写过3篇文章《使用redis实现5万人同服的“相位技术”》 《3D游戏的万人同屏技术详解(1)》 《3D游戏的万人同屏技术详解(2)》。这3篇文章围绕着一个核心问题。就是如何评估游戏服务器的性能?因为对游戏服务器性能评估的标准模糊,导致了现在游戏服务器技术开发方向的迷失。只有重新确立服务器性能评估标准,才能找回游戏服务器的技术方向。要评估服务器的性能,我们就要给出相应的标准。web服务器有唯一的通用标准就是在线人数。也就是服务器的承载能力。在完成同样功能下,使用最少的硬件,承载能力越高越稳定的服务器,他的软件性能就越好。

但对于游戏服务器有着完全和web服务器不同的特点。无法使用简单的在线人数来衡量服务器性能。比如在MMO下虽然在同一个服务器内,但在不同地图的玩家之间,就几乎不会产生任何性能消耗。如果在极端情况下将每个玩家分别放入一个单独的地图。玩家之间不产生任何的互动。那么服务器的消耗将会非常的低。对应的服务器承载人数就会非常的高。但这种极端类型的服务器无法做出任何MMO游戏。所以在MMO下对服务器的评价标准,由最初的同服在线人数变为同地图在线人数。

可是随着无缝大地图技术的出现,这种同地图在线人数的评价标准又无法满足需求了。因为无缝大地图可以将任意整张地图分割为无数小地图。并将每个小地图分别放入不同的服务器。以提高整张大地图的承载能力。但这样的分割算法导致了新的问题。如果这些玩家集中到地图的某个点,服务器就不能正常工作!这就是说虽然整张地图可以承载的人数很高。但这种高承载能力只是一个障眼法。因为地图上某个区块的服务器会因为玩家的聚集而随机的崩溃掉。

虽然我们有无缝大地图的技术。但因为AOI(游戏服务器内对象的可见范围)的承载能力很低。在整张大地图内导入过多的玩家会让服务器有崩溃的可能。最终使得服务器的承载能力受限于AOI的承载能力。从玩法上说可以在整张地图上导入很多玩家,但这些玩家之不能聚集在一起进行互动。使得整张地图承载能力的意义就非常小了。

所以对于MMO服务器的承载能力判定标准,也就由地图在线人数进一步变成了AOI内在线人数,也就是同屏的承载能力。这不是因为产品需求产生的技术路线。并不是因为某个产品需要万人同屏所以我们去研究万人同屏。而是因为我们解决了同服问题,解决了同地图问题,然后遇到了同屏问题。而同屏的问题又变的非常复杂。因为客户端在同屏上遇到了和服务器一样的技术瓶颈,导致在客户端上实现万人同屏也非常困难。客户端和服务器的问题互相纠缠,最终导致我们大多数人都迷失了。而我厌倦了这种对技术方向无休无止的争论。选择了以万人同屏为目标,重新梳理了全部技术栈,形成软件框架并最终使用云服务器完成了测试工作。

制约万人同屏的技术细节有那些呢?在服务器方面有如下几个问题:无法充分使用线程,异步场景和同步场景混乱,帧同步和状态同步混乱,对象的多个实体数据同步混乱等等。在客户端方面的问题:多线程通信技术不成熟,ECS技术不成熟,渲染优化技术不成熟等等问题。我认为MMO万人同屏的实验成功是游戏软件领域重要的里程碑。将会解锁更多全新的游戏模式。

当前已经完成了所有基本测试工作,正在整合了Mongodb的数据库用于硬盘存储部分功能。接下来会开发增量存储以及传输加密等等功能。这将是一个长期的开发计划,期望最终实现一个通用的分布式MMO游戏开发框架。

行业内历年的数据摘要

1. 2013年bigworld做过一次压力测试。在同一个地图上,使用96台(共128核心)服务器,可以承载10万个机器人。但每个机器人的AOI范围内有62个客户端。

2. 在2019年kbengine使用两台8核服务器,在同一个地图上可以承载1万人。AOI范围内承载能力是600个客户端。

3. 在2021年通过进一步改造kbengine, 实现了并行空间的技术,同样两台8核服务器,可以将AOI范围内承载能力提升到1000个客户端。

4. luacluster使用2台128核服务器,将AOI范围内的承载能力提升到了1万个客户端。
开源项目地址

服务器开源地址:https://github.com/surparallel/luacluster

客户端开源地址:https://github.com/surparallel/luacluster_unity3d_demo
名词

1. AOI(Area Of Interest) 游戏服务器内对象的可见范围,即服务器内每个对象需要维护的可见和被见列表内对象的范围。当游戏对象发生移动时对应的列表需要增加或删除。维护列表的算法决定了游戏服务器的性能上限。
2. 无缝大地图(seamless maps)将一张超大的游戏地图按算法分割成多个小份,并分别由不同硬件服务器维护的算法。可以实现在一个超大地图上承载更多玩家。
3. 并行空间 将一个地图块同时创建到多个硬件服务器中,以提高单个地图块承载人数的上限的算法。
4. 万人同屏(Unity includes a 10,000 NPC scene) 在同客户端屏幕内展现1万个游戏对象。对于游戏服务器是将1万个游戏对象放入AOI范围内。

0Br6MmBOszbYnZZfVsop.jpg
Xd6uJ6RI4CUqHpKnsqqk.png
x2oXPxBW470QvvvnoFwV.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK