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

Amazon GameLift 的工作原理

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

关键组件

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

  • 游戏服务器是指在云中运行的游戏服务器软件。它可能是自定义的游戏服务器生成包,包括服务器可执行文件、支持资产、库和依赖项。或者,如果您使用的是 实时服务器,则它可能是配置脚本。游戏服务器生成包或脚本已上传到 Amazon GameLift 服务,然后 GameLift 将其部署到虚拟计算资源以进行托管。

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

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

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

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

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

托管游戏服务器

您上传的游戏服务器托管在称为实例的 Amazon GameLift 虚拟计算资源上。设置资源时,您会创建一个实例队组,其中每个实例都与您的自定义游戏服务器或您配置的 实时服务器 一起部署。您可以根据多种特征配置队组,包括:

  • 实例类型 – 队组的实例类型决定了队组的计算硬件,包括电源、内存、网络容量等。选择最适合您的游戏需求的类型。了解有关如何选择计算资源的更多信息。

  • Spot 或按需实例 – 使用 Spot 队组可以减少托管成本,而 GameLift 提供其他保护措施以维持较高的游戏服务器可用性。按需队组提供更一致的可用性。

  • 运行时配置 – 队组中的每个实例可以同时运行多个服务器进程,并且每个服务器进程可以运行一个游戏会话或其他可执行文件。运行时配置指定要并行运行多少个服务器进程以及要运行哪些可执行文件。您的配置必须根据队组实例类型的容量来平衡游戏服务器的计算要求。了解有关在一个队组上运行多个进程的更多信息。

每个队组部署到单个AWS 区域。要在多个区域中部署游戏服务器,您需要上载游戏生成包或脚本并在每个区域中建立单独的队组。请参阅 AWS 区域和终端节点中 Amazon GameLift 支持的区域列表。

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

运行游戏会话

一旦游戏服务器生成包成功部署到某个队组,该队组便已准备好托管游戏会话。要为一个或多个玩家启动新的游戏会话,您的游戏客户端(通过游戏服务)向 GameLift 服务发送请求。收到您的请求后,GameLift 使用一种称为 FleetIQ 的功能,将新游戏会话放入“最佳”队组。

“最佳队组”的含义由您根据您使用游戏会话队组的游戏优先级定义。队列标识可以使用哪些队组,并定义如何为新游戏会话选择最佳队组。队列可包含位于不同区域的队组。新的游戏会话请求指定要使用的队列,并且 GameLift 可以将新游戏会话与队列中的任何队组放在一起。例如,您可能将队列与北美五个地区中每个地区的队组一起使用。利用这种多区域队列,GameLift 更有可能找到可用的资源(即使在流量高峰时段)并快速启动新游戏会话。

要选择游戏会话的最佳放置位置,FleetIQ 使用以下两种方法之一:

  • 评估玩家延迟 – 对新游戏会话的请求可以包括请求中每个玩家的 ping 时间。如果提供了此数据,FleetIQ 根据(您定义的)延迟策略对其进行评估,以确定哪些区域将为玩家提供最低的延迟。GameLift 使用此信息来放置新的游戏会话。

  • 使用区分优先级的队组列表 – 对于不包含玩家延迟数据的请求,FleetIQ 在列出的第一个具有可用性的队组中放置新的游戏会话。您可以通过调整队组列表顺序来对队列中的队组划分优先级。使用这种方法,通常将游戏会话放入列出的第一个队组中,而当第一个队组已满时,其余的队组将用作后备。

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

在队组实例上启动游戏会话后,GameLift 服务使连接信息可用于游戏客户端,并将其用于连接到游戏服务器。您的自定义游戏服务器可能验证玩家并报告玩家与 GameLift 的连接状态。

管理队组容量和扩展

当某个队组激活并准备好托管游戏会话后,您可以调整队组容量以满足玩家需求。托管的成本取决于您使用的容量,因此,您需要在确保所有传入的玩家都能找到游戏与过度使用闲置资源之间找到平衡。

您可以通过调整队组中的实例数量来扩展队组。运行时配置确定每个实例可以承载多少游戏会话和玩家,因此通过扩展实例,您可以增加或减少游戏会话和玩家的可用性。GameLift 提供了高效的自动扩展工具,您也可以选择手动设置队组容量。了解有关如何扩展 Amazon GameLift 队组容量的更多信息。

自动扩展

通过启用自动扩展,GameLift 会跟踪队组的托管指标,并根据您定义的一组准则确定何时添加或删除实例。有了正确的自动扩展策略,GameLift 可以根据玩家需求的变化直接调整容量。了解有关利用自动扩展提高成本效益的更多信息。

自动扩展有两种方法:

  • 基于目标的扩展 – 使用此方法,您指定所需的结果,而 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 提供了几个用于管理此类访问的选项。了解有关如何的更多信息。