Amazon GameLift
开发人员指南 (版本 )
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon GameLift 的工作原理

本主题概述了 Amazon GameLift 组件以及该服务部署多人游戏服务器和管理玩家流量的工作方式。

关键组件

设置 Amazon GameLift 托管您的游戏需要使用以下组件:

  • 游戏服务器是指在云中运行的游戏服务器软件。您将游戏服务器生成包上传到 Amazon GameLift,包括服务器可执行文件、支持资产、库和依赖项。Amazon GameLift 将您的游戏服务器部署到用于托管的虚拟计算资源。

  • 游戏会话是您的游戏服务器的实例,该服务器在 Amazon GameLift 上运行,玩家将与它连接和交互。游戏定义了游戏会话的基本特征,例如它的生命期或玩家数。

  • Amazon GameLift 服务管理托管游戏服务器所需的计算资源,并将玩家连接到游戏。它控制玩家需要的资源数,启动和停止游戏会话,并通过在活动的游戏会话中查找和预留玩家位置来处理玩家的加入请求。该服务还收集有关服务器进程运行状况和玩家使用情况的性能数据。

  • 游戏客户端是指玩家设备上运行的游戏软件。利用游戏客户端,玩家可以连接到在 Amazon GameLift 上托管的游戏会话。

  • 游戏服务可能出于各种目的与 Amazon GameLift 服务通信。例如,您可以创建一个游戏服务,作为游戏客户端与服务器之间的中介,用于执行诸如管理匹配或玩家身份验证等任务。

Amazon GameLift 和游戏客户端/服务器交互 详细介绍了这些组件之间的交互方式。

托管游戏服务器

要在 Amazon GameLift 上托管游戏服务器,您需要一个称为实例的虚拟计算资源的队组。您为队组选择的实例类型决定了将用于托管游戏服务器的计算硬件(包括电源、内存、网络容量等)。了解有关如何选择计算资源的更多信息,包括如何使用 Spot 实例降低托管成本。

队组中的每个实例都可以同时运行多个服务器进程 (具体取决于硬件功能),每个服务器进程都可以托管一个游戏会话。由于游戏服务器生成包可能有一个或多个可执行文件,您可以配置一个队组以在每个实例上运行每个可执行文件的多个服务器进程。您需要寻找正确的配置来平衡游戏服务器的计算需求 (和要运行的服务器进程的数量) 与您选择的实例类型的能力。了解有关在一个队组上运行多个进程的更多信息。

队组会将您的游戏服务器生成包部署到单个 AWS 区域。对于要将游戏服务器生成包部署到的每个区域,您必须设置一个单独的队组。请参阅 AWS 区域和终端节点中 Amazon GameLift 支持的区域列表。

您可能需要向队组分配一个别名。别名是将游戏客户端连接到游戏服务器的方式一般化的便利手段。由于别名指向的队组可以随意更改,在客户端中引用别名 ID 而不是队组 ID 有助于在不影响游戏正常运行的前提下将玩家从一个队组转移到另一个,也不需要部署游戏客户端更新。

放置游戏会话

一旦游戏服务器生成包成功部署到某个队组,该队组便已准备好托管游戏会话。对于新的游戏会话,一个游戏客户端或客户端服务代表一个或多个玩家发送请求。收到新游戏会话请求后,Amazon GameLift 使用 FleetIQ 功能搜索可用的托管资源,并将新游戏会话放入最佳的队组。

您可以通过创建游戏会话队列来定义“最佳队组”对游戏的含义。一个队列标识可在其中放置新游戏会话的队组列表,并定义如何为每个新游戏会话选择最佳队组。当游戏客户端或客户端服务请求新游戏会话时,它指定用于放置的队列。新游戏会话可以放置在队列中具有可用服务器进程的任何队组中。队列可包含位于不同区域的队组。例如,您可以设置一个队列以将游戏会话放在五个北美区域中的任何一个。利用多区域队列,Amazon GameLift 更有可能找到可用的资源 (即使在流量高峰时段) 并快速启动新游戏会话。

FleetIQ 可以通过两种方法来找出新游戏会话的最佳放置位置。最有效的方式是评估玩家延迟。放置请求可能包括队列中涵盖的每个区域的玩家延迟数据。如果提供了延迟数据,FleetIQ 会在可为请求的玩家提供最低延迟的区域中搜索托管可用性。如果您选择不提供延迟数据,您可以手动对队列的队组列表划分优先级。搜索托管可用性时,Amazon GameLift 会从列表的顶部开始,一直向下搜索。在这种情况下,游戏会话通常是放置在优先级最高的队组中,而其他队组充当备份。

队列是一个很有用的概念,可用于解决一系列问题。队列可以平衡各区域的资源使用并为玩家减少意外需求高峰时段的等待时间。它们可用于缓解区域速度下降或中断。您还可以使用它们创建跨区域的播放器池。队列在使用 FlexMatch 对战或 Amazon GameLift Spot 队组时是必需的。了解有关如何设计游戏会话队列的更多信息。

管理容量和扩展

当某个队组激活并准备好托管游戏会话后,您就需要调整队组容量以满足玩家需求。由于托管的成本基于所使用的容量,因此务必在为进入的玩家维护足够的队组容量与在空闲时间为闲置未使用的资源超支付费之间取得平衡。

队组容量的度量单位是实例。队组的配置确定每个实例可托管的游戏会话和玩家数量。要调整队组容量,您可以增加或减少队组中的实例数。Amazon GameLift 提供了一系列选项,用于管理队组容量。到目前为止,最有效的方法是使用 Amazon GameLift 自动扩展功能,但您也可以手动设置队组容量。了解有关如何管理队组容量的更多信息。

自动扩展

自动扩展是一种快速、高效且准确的方式,可让队组容量与玩家使用情况相符。借助自动扩展,Amazon GameLift 会跟踪队组的托管指标,并根据您定义的一组准则(称为策略)确定何时添加或删除实例。有了合适的自动扩展策略,Amazon GameLift 可以直接调整容量以应对玩家需求的变化,以便队组始终为新玩家留有空间,同时无需维护过量的闲置资源。了解有关利用自动扩展提高成本效益的更多信息。

有两种类型的自动扩展可用:基于目标和基于规则。建议的选项是将基于目标的自动扩展用作最简单且最有效的选项。基于规则的自动扩展对扩展操作提供了更多的精细控制措施,但难于设置和管理。对于大多数游戏,目标跟踪就足够了。

基于目标的自动扩展可让您选择所需的结果,并让 Amazon GameLift 扩展或缩减队组以实现相应结果。目标跟踪工具基于单个关键指标,也即,可用于托管游戏会话但当前未使用的资源百分比。这些资源是您的缓冲区 – 因为它们已准备就绪可托管游戏,它们代表着新游戏会话的数量和等待最短时间即可加入游戏的新玩家数量。目标跟踪可让您选择最适合您的游戏的缓冲区大小 (总队组容量的百分比)。例如,如果游戏的需求很不稳定,您可能希望使用较大的缓冲区大小。开启目标跟踪后,Amazon GameLift 会根据需要添加和删除实例以维护缓冲区大小。对于大多数游戏,目标跟踪表示用于管理队组容量的最佳选项。了解如何通过目标跟踪自动扩展

基于规则的自动扩展对自动扩展活动提供了更多的精细控制措施,但复杂程度相当高而难以管理。每个基于规则的策略指定何时以及如何触发扩展事件。例如,此策略声明可能用于触发扩展事件:“如果空闲实例在连续的 10 分钟内落到 20 个以下,则容量增加 10%。” 使用基于规则的自动扩展时,大多数队组需要多个策略,以自动维护队组容量。由于策略是独立进行评估且可能具有意外的组合效果,因此,此选项可能会给游戏托管增加更大的复杂性。了解如何使用基于规则的策略自动扩展

执行队组扩展操作

可以通过多种方式触发队组扩展事件:通过自动扩展或手动扩展对所需容量进行更改,或者出于运行状况或其他原因而关闭实例。实质上,所有扩展事件都是在队组“所需的”实例计数与其“活动的”实例计数不相符时触发。此情况会导致 Amazon GameLift 根据需要添加或删除实例,以使活动的实例计数与所需的实例计数相符。

  • 当所需的实例计数超过活动的实例计数时,Amazon GameLift 将请求其他实例,一旦有其他实例可用,就会开始安装游戏服务器生成包和启动游戏服务器进程的过程。一旦有一个服务器进程在实例上激活,活动的实例数就会加一。Amazon GameLift 继续添加实例,直到两个计数值相等。

  • 当活动的实例数超出所需的实例计数时,Amazon GameLift 开始搜索它可以删除的实例。任何可用的实例 (即未托管任何游戏会话) 以及任何不受保护的实例 (即使托管着活动的游戏会话) 都可以终止。如果没有实例可以删除,则缩减事件失败。在这种情况下,所需的实例计数与活动的实例计数之间的不一致将继续触发缩减事件,直到有实例可以删除。然后,Amazon GameLift 启动终止流程,其中包括通知此实例上的所有服务器进程启动正常关闭。一旦终止了实例,活动实例的数量就会减一。Amazon GameLift 继续删除实例,直到两个计数值相等。

其他扩展功能

队组容量和扩展相关的其他功能包括:

  • 游戏会话保护 – 防止托管活动的玩家的游戏会话在缩减事件期间被终止。游戏会话保护可以在队组范围开启,也可以针对单独的游戏会话开启。如果实例的任何服务器进程正在托管受保护的游戏会话,则无法终止此实例。游戏会话由于运行状况或 Spot 实例相关的中断而不受保护,导致被终止 (请参阅按需实例与 Spot 实例)。

  • 扩展限制 – 通过对队组中的实例数设置最小和最大限制,控制总体实例使用情况。这些限制在自动扩展或手动设置容量时适用。

  • 启用/禁用自动扩展 – 在队组级别启用或禁用自动扩展,而不更改或删除自动扩展策略。此功能可让您在需要时手动暂时扩展您的队组。

  • 扩展指标 – 以图形方式跟踪队组的容量和扩展事件的历史记录。查看容量以及队组利用率指标,以评估扩展方法的有效性。下图显示一个目标跟踪设置为 15% 缓冲区的队组;可用游戏会话槽的百分比 (绿色) 会随队组容量 (蓝色和橙色) 更改而自动调整。

监控队组活动和故障排除

在队组设置完毕并开始运行后,Amazon GameLift 会收集各种信息,以帮助您监控已部署的游戏服务器的性能。此信息可用于优化资源使用、排除问题以及深入了解玩家在游戏中的活动情况。

  • 队组、游戏会话和玩家会话详细信息 – 此数据包括可帮助识别运行状况问题的状态,以及游戏会话时长和玩家连接时间等详细信息。

  • 使用率指标 – Amazon GameLift 在一段时间内跟踪队组指标:

    • 对于实例:网络活动和 CPU 使用率

    • 对于服务器进程:活动进程数、新激活和终止

    • 对于游戏和玩家:活动游戏会话和玩家会话的数量

  • 服务器进程运行状况 – Amazon GameLift 跟踪队组中运行的每个服务器进程的运行状况,包括正常运行的进程数、正常运行的活动进程的百分比以及异常终止的数量。

  • 游戏会话日志 –您可以让游戏服务器记录会话数据,并将 Amazon GameLift 设置为在游戏会话结束时收集和保存日志。日志随后可从服务中下载。

所有数据均可通过 Amazon GameLift 控制台访问。控制台控制面板显示所有生成包和队组中的活动的概览,以及查看更多详细信息的选项。

AWS 资源的联网

很多时候,您希望您的托管游戏服务器和应用程序能够与您的其他 AWS 资源通信。例如,您可能使用一组 Web 服务来支持您的游戏,例如玩家身份验证或社交网络。由于所有权问题,这种通信面临一个挑战。当您使用 Amazon GameLift 部署游戏服务器时,队组和实例分配给您的账户,但它们却为 Amazon GameLift 服务所有并受其管理。于是,要访问您的 AWS 账户管理的 AWS 资源,您需要明确授予针对 Amazon GameLift 服务的访问权限。

Amazon GameLift 提供了几个用于管理此类访问的选项。了解有关如何从队组访问 AWS 资源的更多信息。