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

以下是Michal Buras在2024年9月10日的Live Service Game Summit演讲的文字记录。

所期望的收获是更好地理解可用的不同网络技术,以及不同游戏基础设施的好处和挑战。具体来说,点对点技术及其挑战,尤其是主机迁移,以及这如何影响您的开发资源。


关键要点

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在线服务 - 概述

首先,Epic在线服务(EOS)提供免费的中继,即零前期成本和零维护成本。

该解决方案所需的开发量最少,它们是跨平台的,有一个大厅系统,您缺少的仅仅是一个匹配系统。

然而,您完全无法控制这些玩家的路由。

中继服务器为您的游戏数据包添加了一个额外的节点,必须经过,这会引入延迟。考虑到中继数量有限,玩家可能会根据当时的可用性被路由到远处的中继。该高延迟对于商业游戏是不可接受的,因为这会导致糟糕的玩家体验,并因此导致流失。这直接导致了Discord上的玩家沮丧以及收入损失。

中继:Epic在线服务 - 脆弱性

Epic在线服务也可能是脆弱的。

这是Steam上某AAA游戏的一个例子。我们这里有一群在大厅中的玩家,他们可以交换由WebSocket处理的信息。当您制作一个点对点游戏时,您通常会收集托管游戏的玩家的相关信息,也就是他PC上的信息,对吧?

使用一个叫做Fiddler的简单应用程序,您可以访问此大厅信息存储,并以明文暴露其他玩家的私人信息。这个应用程序仅需两次点击即可安装,可以被十岁的小孩使用。因此有人可能会基本上从您的数据库中抓取数据,对吧?

这是商业游戏承担的巨大风险。所以请注意使用大厅系统时实现的内容。

中继:WebRTC

[我]发现另一个我觉得有趣的点对点解决方案是WebRTC中继。我通过People Can Fly的Outriders发现了这个基础设施选项,他们几年前进行了一次Unreal深度讲解。

简而言之,这是一个良好的实施,因为它们重用了中继服务器,但它们必须对Unreal代码进行很多修改以适应它。此外,他们还必须自己托管中继。这是一个您需要构建、测试、优化和维护的自定义基础设施,这意味着每月都会产生原本可以用于其他地方的成本。

然而,目前还不清楚它们在性能上是否真的比EOS中继好得多。

中继:自我开发 / 自我托管

这让我想到了自我开发的中继服务器。在其中一个项目中,想法是我们可以在Unreal Engine中制作一个中继服务器,该服务器会序列化数据包,也许分析它们以防止作弊。但从概念上讲,这没有任何意义,因为这会增加额外的计算延迟和成本。

如果您在计算,这就不再是中继服务器。它变成了一种专用服务器。因此,我的建议是,如果您想拥有自己的中继技术,可以从GitHub获取一个代理,修改为运行时可配置。您无需实现任何数据包重复、排序等功能,因为您的游戏管理器应该处理这些。

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

这样做的意义何在?

主机迁移与中继面临的挑战影响

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

您需要一个叫做主机迁移的机制,因为如果托管游戏的玩家退出,则所有人都会断开连接。

这是一个根本问题,您需要解决,因为这会彻底终止游戏会话。这是任何以多人游戏为关键的商业游戏的重大问题。

我们在六天中遇到了一个巨大的问题,玩家只是随意退出游戏,因为我们的游戏很难。您只有一次机会,一次击杀,对吧?也许他们并没有意识到他们是主机,或者他们可能不在乎自己是主机。所以这成为了派对结束者。

[在] 六天中,我在仅使用虚幻引擎网络驱动程序的情况下实现了基本的主机迁移,并在其非常基本的形式中运行良好。我不想在这里过多细节,因为这是针对虚幻爱好者的内容,所以如果您好奇,可以在私下的聊天中问我。

但整个项目需要全面重构,以便所有功能都支持它。现在,每个小功能,每个设计师制作的蓝图都需要重新处理,除非您的引擎原生支持主机迁移,否则实现主机迁移没有银弹,但这将导致网络带宽成本。

与其他选择相比,这对项目管理的风险太大,收益却太少。

所得的教训是,虽然中继的前期成本很低,但您必须构建的主机迁移解决方案会变得极其昂贵。并不是那么便宜。

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

因此,您要么雇用额外的员工,要么推迟项目发布日期。在这两种情况下,您都会浪费钱。这一切都是因为您在不断增加游戏每个部分的复杂性。我们的评估是,我们需要一名额外的测试员和一名开发人员,专门负责重做所有功能以继续推进。

这每月将花费我们大约15,000美元。这样的成本只会随着时间增加。我希望你记住这个问题:我们还可以用15K得到什么?我们还能为这些开发资源做些什么?

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

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

在我进一步说之前,让我们来看一下这个图表。在左侧,您可以看到《六天》游戏会话的时间。这是一个24小时周期内的实时历史数据。

如何读取这个图表。例如,红色曲线是北美东部,在UTC零点有33个游戏的峰值。这意味着有33个《六天》服务器并行运行。

由于我们的游戏要求两个vCPU或逻辑线程,该区域的需求将需要66个逻辑CPU。在右侧,您有该游戏分发的每月成本。这仅仅是一个区域。因此现在让我们将这个数乘几次。如果我们要将开发资源换成基础设施,那么我们会得到多少个游戏?

预算假设为15K。

公共云(AWS)

首先是最显而易见的,人人都去AWS。

让我们看看我们能在最知名的公共云上得到什么。我已计算出每个区域的峰值成本,以便尽可能准确。

[《六天》有]程序化地图生成和非常复杂的AI,我们的游戏每天需要2200名玩家的会话。还不错,对吧?如果我们的游戏类似于《Valorant《反恐精英》,那么将近10K玩家会话。

裸金属

好老的裸金属。

我知道你们中的一些人可能会说裸金属的性能更好,能够适应20%的负载。在《六天》的情况下,我的游戏笔记本无法在单个逻辑线程上运行服务器,因此计算结果不幸是相同的。

也许像《Valorant这样的更简单的游戏可以做到像亚马逊一样的8K。

无论如何,在我们的情况下,并不是这些选择。此外,我还必须指出,可能存在一些其他灵活的裸金属选项,您可以适应更多玩家,但我在这次演讲中无法提及。

容器实例 - 概述

所以我开始搜索容器实例,因为我在想是否在容器化游戏服务器技术上有任何进展,我找到了这些家伙。

由于容器实例是完全托管的,因此不需要任何工程成本,我只需上传游戏镜像,我不在乎区域、开销或我在其他基础设施技术中需要做的任何配置。

这就是我首次发现Edgegap。我们是第一个以可用于多人游戏的方式开发它的人。

容器实例 - 镜像缓存

所有公司都喜欢Azure,因为我为什么会想要容器实例?我不是凭空得出的。

第一次为一家VR公司做基础设施时,我在寻找比云计算更好的选择。我在Azure中找到了容器实例,但它们部署速度超级慢。

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

我很高兴找到有人最终实现了容器实例缺失的内容。这使我们能够在相同预算下处理比公共云多两倍的玩家。如果这款游戏是类似于《Valorant,那么15K美元的预算将覆盖托管整个游戏的每月基础设施费用。

容器实例 - 分布式调度

这里值得注意的另一件事是,通过容器,我们不受任何特定数据中心的限制。

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

通常,当您制作游戏时,您会选择游戏区域中的最低挂果,但如果您添加所有那些因为高延迟而无法玩的玩家所在的小地点,那么那些小浆果就成为一顿美餐。

既然这里进行大量讨论关于游戏货币化,您可以将其视为打开以前不可用的新市场的机会。

公共云 - 浪费的容量 vs 容器实例

为什么这些容器实例如此优秀?

让我们看看我做的这个图表。绿色线是非平均的真实玩家数据。正如您所见,它有尖峰、波动,非常难以预测。

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

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

现在,这只是一个区域的情况,数量会随着您的区域数量成倍增加。

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

因此,蓝线几乎完全符合玩家流量,您最终只需为您使用的支付费用。

最终比较

这一切让我回到了我们演示的最后一张幻灯片,关于我们在《六天》中如何管理网络基础设施。我们发现,当您与朋友在私密派对中以点对点方式游戏而没有主机迁移时,这就足够了,而这占我们流量的40%。

结论

当我还是个孩子的时候,很多游戏都是点对点的,比如《反恐精英。而且有,点对点监听服务器。我们从未遇到过主机离开的任何问题,因为我们彼此认识,我们不想破坏乐趣。除非,当然,妈妈走进房间告诉我们退出游戏做功课,因为玩游戏是无法获得科学学位的。

妈妈部分是对的。但对于与陌生人组队的游戏来说,点对点模式是一个超级灾难。特别是对于像我们这样困难的游戏。

因此,我们选择Edgegap提供的专用服务器给匹配游戏,这样您的玩家体验就不会基于某个随意退出游戏的家伙。

因此,我全心全意地建议您在游戏中使用Edgegap的混合模式,如果您真的想要质量与数量的结合。

这就是全部。感谢您的时间,不要犹豫加我为LinkedIn好友。谢谢你们!

与来源和/或内容协作

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