点对点、转发和容器实例:多玩家游戏的开发资源、性能、安全问题的深入分析

以下是Michal Buras在现场服务游戏峰会(2024.09.10)上的演讲记录。

目的是更好地理解可用的不同网络技术及其优势和不同游戏基础设施的挑战。具体来说,点对点技术及其挑战,特别是主机迁移,以及这对开发资源的影响。


关键要点

1. 什么是多玩家游戏基础设施中的点对点网络

  • P2P通常被认为很简单,玩家通过主机的公共IP地址连接,但由于网络地址转换 (NAT),直接通信变得更加复杂。

  • 在点对点 (P2P) 网络中,玩家通过一个托管在某一玩家机器上的“监听服务器”直接相互连接。

  • 这种类型的“监听服务器”流量大多被提供商阻止,因为容易被滥用。因此,替代方案是一个“STUN”服务器,通常被称为“中继”。

  1. 多玩家游戏基础设施中继的优劣

优点

  • 中继服务器处理NAT遍历,使玩家可以在不共享私人IP地址的情况下连接。

  • 一些中继服务,如Epic Online Services(EOS),提供零前期和维护成本的免费中继,简化了初期开发。

缺点

  • 中继服务器会引入额外的延迟,因为数据包必须通过额外的节点,负面影响玩家体验。

  • 对玩家路由的控制有限,如果玩家被路由到远距离的中继,将导致高延迟连接。

  • 安全问题,比如通过某些实现中的大厅暴露玩家数据。

  1. 中继的隐藏成本:主机迁移

主机迁移:如果主机玩家离开,游戏会话对所有玩家来说都会结束,需要在游戏中间将托管角色转移到另一个玩家。

为何代价高昂

  • 实现主机迁移涉及重构许多游戏功能,需要大量开发人员时间和资源。

  • 游戏工作室可能需要额外的人员来处理增加的复杂性,每月成本高达15,000美元。

  • 主机迁移还会恶化用户体验,因为它不是无缝的,常常导致游戏中断。

4. 为什么具有编排功能的权威服务器是商业游戏的理想基础设施

权威服务器:这些专用服务器控制游戏的各个方面,通过消除对任何单一玩家机器的依赖,确保公平游戏。

优势:

  • 解决了主机迁移和从突然的主机断开导致的玩家体验差的问题,确保了稳定可控的环境。

  • 权威服务器提供更好的性能和安全性,减少玩家数据暴露的风险并最小化延迟问题。

  • 编排:使用类似Edgegap的容器化服务器基础设施允许可扩展、实时的服务器分配,随着玩家流量调整,从而仅为活动服务器时间付费以降低成本。

演讲 - 全文记录

介绍

大家好,

我是Michal,今天我想向您展示我们为《Fallujah的六天》创建完美的多人游戏解决方案所经历的旅程,特别是我们对点对点解决方案的分析以及如何管理主机迁移。另外,我们将讨论专用服务器游戏托管。

希望您能有所收获,对可用的不同技术以及不同游戏基础设施的优势和挑战有更好的理解。

我们将分解为点对点技术及其挑战,特别是主机迁移,以及这对您的开发资源的影响。

然后我们将查看不同的专用服务器托管基础设施选项,包括裸金属、计算虚拟机和容器实例。

关于演讲者

首先,关于我自己,我是Michal Buras,《Fallujah的六天》的网络/在线工程负责人。游戏获得了非常成功的发布,我们将在时间上不断开发它。

就我个人而言,我在游戏开发方面有六年的经验,在软件开发领域有十年经验。我最初是在为工业做VR,但不是为游戏做的,我想做游戏。于是我加入了[多人游戏小组](MPG),在那里我在网络等方面做了些有趣的工作。在那之后,我曾为Breach Studios做全能选手,但我真的想做网络方面的工作,所以我加入了Highwire Games。

演讲目的

那为什么我会在这里呢?

在最初发布后,我被分配与我的团队一起为《六天》添加主机迁移,因为它是我们体验的关键,也是游戏一直在运行的关键。我意识到缺乏信息和分析 [可用之间] 不同技术,即点对点对比专用托管。

此外,出于好奇,我想评估点对点 [网络] 是否真的像我们在游戏开发中所说的那样划算。

最后,我希望这次探索能帮助他人并为更广泛的游戏开发社区增加知识。

多人游戏中的点对点网络 - 基础知识

我意识到房间里的每个人可能不是工程师,所以这里有关于点对点基础知识以及如何通过网络连接玩家的快速概述。

正如他们所说,点对点应该非常简单。游戏创建一个监听服务器,使用公共IP,您将所有玩家连接到服务器。不幸的是,事实不是那么简单,因为您的公共IP不是您自己的公共IP。

这意味着IP地址是共享的。您的互联网服务提供商将多个用户分组到一个IP下,通过一个称为网络地址转换的过程。

唯一不同的是端口号,在您请求网页或其他资源时会临时分配给您。对于非工程师来说,可以把服务器的IP比作一个公寓楼。然而,每栋大楼里有多个公寓。每次你点披萨,你会得到一个独特的公寓号,而且这个号码会随着时间变化。

这导致了很多困惑。

我们需要找到一种机制来获取分配的号码,并以某种方式与其他玩家分享这种信息。

点对点网络 - STUN 服务器

这种解决方案称为STUN服务器。它可被认为是黄页。如果你想让人们能够找到你的业务,你必须用当前的号码更新黄页。

不幸的是,这种解决方案并不安全,因为我们的房间号可以进一步共享,且任何人都可以通过互联网向我们发送任何东西。大多数服务提供商认为这不安全且会阻止这种类型的流量。

点对点网络 - 中继服务器

唯一的替代方案是中继服务器。你的私人地址不与除服务器外的任何人共享,服务器在你和其他玩家之间中继信息。

中继服务器是几乎无计算的服务器,但因为它们需要一定程度的计算能力,因此需要托管,也意味着你需要服务提供商。

有很多服务可用,提供中继服务器解决方案,我们进行了评估,但本次演讲中我将只谈论我认为最有趣的三个。

中继:Epic Online Service - 概述

首先,Epic Online Services(EOS)提供免费的中继,无需任何前期和维护成本。

这种解决方案需要最少量的开发,它们是跨平台的,有一个大厅系统,您缺少的唯一事情是匹配系统。

然而,您对这些玩家的路由没有任何控制。

中继服务器为您的游戏数据包增加了一个额外节点,需要通过它,导致延迟增加。由于中继数量有限,玩家可能会根据可用性被路由到较远的中继。对于商业游戏而言这种高延迟是不可接受的,因为它导致糟糕的玩家体验,从而导致玩家流失。这直接导致玩家在Discord感到沮丧和收入损失。

中继:Epic Online Service - 漏洞

Epic Online Services 还可能受到攻击。

这是一个来自Steam的一款AAA级游戏的例子。我们在此有一组大厅中的玩家,通过WebSocket处理的信息交换。在进行点对点游戏时,您通常会收集托管游戏的玩家(即他PC上)的相关信息,对吧?

使用简单的应用程序Fiddler,您可以访问此大厅信息存储库,并以明文公开所有其他玩家的私人信息。这个应用程序只需两次点击即可安装,甚至一个十岁的孩子都能使用。因此,某人可以基本上抓取您的数据库数据,对吧?

对于商业游戏而言,这是一种巨大的风险,因此小心在大厅系统中实施的内容。

中继:WebRTC

我发现的替代点对点解决方案是有趣的是WebRTC中继。我通过People Can Fly的《Outriders》了解到这种基础设施选项,他们几年前有一个关于Unreal的深入讲座。

简而言之,它是一个很好的实施,因为它们重复使用中继服务器,但它们不得不大量修改Unreal代码以应对其存在的问题。此外,他们不得不自己托管中继。这是您需要构建,测试,优化和维护的自定义基础设施,这意味着每月的费用本可以用于其他地方。

然而,尚不清楚它们是否真的在性能上比EOS中继好。

中继:自开发/自托管

这让我想到自开发的中继服务器。我们的一个项目,想法是我们可以用Unreal Engine制作一个中继服务器来序列化数据包,可能分析它们以防止作弊。但这在概念层面上没有任何意义,因为它的附加计算延迟和成本。

如果你进行计算,它就不再是中继服服务器,而是一种形式的专用服务器。所以我的建议是,如果你想要自己的中继技术,只需从GitHub抓取一个代理,修改它以实现运行时可配置。你不需要实现任何包重复、排序等,因为你的游戏管理器应该处理这些。

但如果你现在后退一步,想想这一切。从这一点来看,你不是在制作游戏,而是在构建基础设施。燃烧金钱在那些没有帮助你的游戏增长内容,更好的技术或功能的东西上。

那有什么意义?

主机迁移及其对中继的挑战影响

现在,所有这些服务都面临一个根本挑战。

你需要一个称为主机迁移的机制,因为如果托管游戏的玩家退出,所有人都将被断开连接。

这是一个根本问题,因为它从头到尾地杀死整个游戏会话。对于一款多人游戏是关键的商业游戏来说,这是个巨大的问题。

在《Fallujah 的六天》中,我们有一个巨大的问题,因为我们的游戏是一个困难的游戏。你被一枪击中就死,对吧?而且他们可能没有意识到自己是主机或者他们可能不在乎自己是主机。所以它是一个聚会杀手。

[在]六天 中,我使用Unreal引擎网络驱动程序实现了基本的主机迁移,在其非常基础的形式中工作得很好。我不想在这里讲太细,因为这是针对Unreal极客的,如果你感兴趣可以在私聊中问我。

但整个项目需要进行全面的重构,以便所有功能支持它。现在每一个小的功能、每个设计师制作的蓝图都必须重新制定,并且没有万能的子弹可以实现主机迁移,除非你的引擎本土支持它,但是这将会伴随着网络带宽的成本。

对于其他替代方案而言,进行主机迁移有太多的项目管理风险,收获实在太少。

得出的结论是,虽然中继的前期费用便宜,但你必须构建的主机迁移解决方案变得非常昂贵。总的来说,并没有那么便宜。

对不同技术和服务的所有这些研究让我们意识到,“便宜”的解决方案是点对点,我们需要构建一个称为主机迁移的整个系统,这不会是无缝解决方案并且糟糕的用户体验,然后我们需要维护它。

因此,要么你雇佣更多的人员,要么你推迟项目发布日期。在这两种情况下,你都在烧钱。因为从字面上来看,你增加了游戏的每个部分的复杂性。我们的评估是,如果我们进一步进行下去,光用于重新设计所有功能就需要再增加一个测试员和一个开发人员。

这会每月花费我们大约$15,000。将来只会增长。我希望你记住这个问题,我们还能用15K得到什么?我们还能用这些开发资源得到什么?

专用服务器 - 基础设施和成本分析

下一步是评估其他选项,即专用服务器。让我们比较每个选项并进行成本分析。

在我进一步讨论之前,让我们先来看看这张图表。左侧可以看到《六天》的游戏会话时间。这是历史记录中的24小时期间的真实数据。

如何读它。举个例子,红色图表是北美东部地区,在UTC零时有三十三个游戏的峰值。这意味着有三十三个《六天》的服务器是在并行运行的。

因为我们的游戏需要两个vCPU或者逻辑线程,这个区域维持需要六十六个逻辑CPU。在右侧,有每个区域此游戏分布的月成本。这将只是一个区域。因此现在让我们乘以几次。看看如果我们将开发资源换成基础设施,图表上我们能有多少游戏。

假设的预算是$15K。

公共云(AWS)

首先最明显的,大家都去AWS。

让我们看看在最知名的公共云上能得到什么。我计算了每个区域单独的巅峰成本,以使这尽可能精确。

[六天拥有]程序地图生成和非常复杂的AI,我们的游戏需要更多的“蒸汽”,但它仍然是2200名玩家的日常游戏会话。还不错,对吧?如果我们的游戏像Valorant或者Counter Strike,几乎可以达到10K的玩家会话。

裸金属

老的好裸金属。

我知道有人可能会说裸金属性能更好,可以容纳20%更多。但在六天的情况下,我的游戏笔记本不能在单一逻辑线程上运行服务器,因此计算结果遗憾保持不变。

也许像Valorant这样的简单东西可以像Amazon一样达到8K。

无论如何,在我们的情况下,这不是选项。此外,我必须指出,还有一些额外的灵活裸金属选项,在那里,你可以多容纳一些玩家,但我无法在此演讲中提到。

容器实例 - 概述

我开始搜索容器实例,因为我想知道在容器化游戏服务器技术上是否有进步,结果发现了这些家伙。

因为容器实例是完全托管的,它们不需要任何工程成本,我只需上传游戏映像,不用关心区域、开销,或者我不得不与其他基础设施技术一同做的任何配置。

我就是这样发现Edgegap的。我们是第一个以这种方式进行开发,以便它可用于多人游戏的。

容器实例 - 镜像缓存

所有公司,如Azure,为什么我想到了容器实例?我不是凭空想到的。

我第一次为一家VR公司做基础设施时,我在寻找其他选项而不仅仅是扩展云计算。我在Azure 上发现了容器实例,但它们的部署速度非常慢。

因为它们不进行镜像缓存,而Edgegap则做到了。

我非常高兴最终有人为容器实例实现了缺失的东西。这使我们能够比公共云以同样的预算处理两倍的事物。同样,如果这个游戏如Valorant,$15k美元将足以支付整个游戏的服务器基础设施月度预算。

容器实例 - 分布式编排

另一个值得注意的很酷的事情是,使用容器,我们不绑定到任何特定的数据中心。

例如,我们可以为我们的朋友每天在开普敦托管一个游戏,而无需管理一个本地的Kubernetes集群,这个集群在其他时间下将未被使用。这让我们的游戏更加包容。

通常,当你开发游戏时,你会选择游戏区域就像摘取最低的水果。而如果你添加那些因为到数据中心的高延迟而无法玩的小位置,那些小浆果会变成一顿好饭。

因为这里有很多关于游戏货币化的讨论,可以考虑这是一种机会去开放以前无法获得的新市场。

公共云 - 客容量浪费与容器实例

为什么这些容器实例如此出色?

看看我做的这张图。绿色线是未平均的真实玩家数据。如你所见,它有峰值、波动,非常难以预测。

当我们使用公共云解决方案时,我们需要保持空置、未使用的游戏服务器的开销,以适应这些玩家及任何潜在的偏差。

这就是为什么增加和减少可用服务器池非常慢的原因。因此,在公共云中,红线以下的整个区域是你所支付的,而绿线以下的区域是你应支付的。红色空间是资金流失的地方。

现在这仅仅是按单一地区的规模,按你拥有的地区数量进行乘法。

容器实例解决了这些问题,因为它们由镜像缓存之前我提到的超级快速部署。有无延迟的启动或关闭,因此我们可以实时精准地调整需求。

结果是蓝色线与玩家流量几乎完美对齐,你最终只为所使用的付费。

最终比较

所有这些将我带到了我们演讲的最后一张幻灯片,关于我们如何在《六天》管理网络基础设施。我们发现当你与朋友一起在私人派对中玩时,不进行主机迁移的点对点是足够的,而这占了我们流量的40%。

结论

当我还是个孩子时,很多游戏都是点对点的,比如Counter Strike。而且它们是点对点监听服务器。而且我们从来没有遇到过主机离开的问题,因为我们互相认识,并且我们不想破坏乐趣。除非,当然,妈妈进了房间,告诉我们要退出游戏,去做家庭作业,因为玩游戏不会让你获得科学学位。

妈妈部分是对的。但是对于与随机人的配对游戏来说,点对点模式是一个超级灾难。尤其是对于像我们的困难游戏来说。

所以对于匹配制作的游戏,我们在Edgegap上专用服务器,以便您的玩家体验不会基于某个随机家伙的愤怒退出游戏。

所以,如果你想要真正的质和量,我全心推荐你用Edgegap混合进行你的游戏。

就这样。谢谢您的时间,并且欢迎在LinkedIn上添加我。谢谢你们!

与来源和/或内容协作

米哈乌·布拉斯,高线游戏公司的首席网络工程师

Get your Game Online Easily & in Minutes

Get your Game Online Easily & in Minutes

Get your Game Online Easily & in Minutes