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

设计游戏会话队列

Amazon GameLift 使用队列来处理游戏会话放置请求以及查找新游戏会话的托管资源。队列的设计方式确定:(1) Amazon GameLift 在何处查找可用资源的位置,以及 (2) Amazon GameLift 如何评估可用于查找每个新游戏会话的最佳选择的资源。使用队列向您的玩家提供最佳体验,并确保您付费使用的托管资源得到有效的利用。

队列对于以下 Amazon GameLift 功能是必需的:

放置游戏会话中了解有关队列的更多信息。有关创建队列的信息,请参阅创建队列。有关使用队列创建新游戏会话的信息,请参阅 创建游戏会话

为什么使用队列?

我们强烈建议您对游戏会话放置使用队列,即使您并未使用要求队列的 Amazon GameLift 功能也是如此。尽管您始终可以选择手动在特定队组上创建游戏会话 (CreateGameSession),队列 — 尤其是跨多个区域的队列 — 可以为您和您的玩家提供关键优势。

  • 最大限度减少延迟,提供更好的玩家体验。 当游戏会话放置请求包括玩家延迟数据时,FleetIQ 将确保玩家可在可能的最短延迟内连接到游戏服务器。设置其他规则,以便最大程度地减少玩家之间的延迟差异,并且在让玩家快速进入游戏与让玩家获得尽可能最佳的游戏体验之间实现平衡。

  • 利用价格更低的 Spot 队组。 您可以随时向队列添加 Spot 队组,这可以大大降低托管成本。当 Spot 队组可用时,FleetIQ 会将新游戏会话放在延迟尽可能最低并且 Spot 价格最低的队组中。

  • 为新游戏更快地提供高容量。 单个队组的容量有限,而且一旦达到该限制,玩家必须等到扩展额外的实例,才能开始新的游戏会话。不过,队列可提供后备容量,在首选队组已满的情况下,可以立即将请求放置在其他队组上。此外,借助自动扩展,队列中的每个队组都可以扩展直至接近最大容量,因此不太可能队列中的所有队组会同时用完容量。因此,在玩家需求高峰期间,玩家等待时间受到的影响较小。

  • 使游戏可用性更具弹性。 队组和区域级别的停机时有发生。在使用多区域队列时,速度减慢或停机不一定会影响到玩家访问您的游戏。相反,如果一个或多个首选队组不可用,Amazon GameLift 可以使用下一个最佳队组来放置新游戏会话。然后,自动扩展操作在队组活动中对此临时转换做出调整,直到首选队组再次可用。

  • 更高效地使用额外的队组容量。 为了处理意外的玩家需求高峰,合理的做法是提供对额外托管容量的快速访问。当依靠单个队组来支持玩家对您游戏的访问时,您需要保留未使用的容量,以备不时之需。相比之下,队列中的队组可以充当后备容量,可根据需要将增加的玩家需求转移到其他区域中使用率较低的队组。例如,如果亚洲的需求较高,而欧洲的需求通常较低;那么您的欧洲队组可以提供额外的容量来支持亚洲的高峰,即使它们在需求较低期间发生缩减也可以。

  • 获取有关游戏会话放置和队列性能的指标。 Amazon GameLift 会发出队列特定的指标,包括放置成功和失败次数、队列中的请求数以及请求在队列中花费的平均时间这样的统计信息。您可以在 Amazon GameLift 控制台或 CloudWatch中查看这些指标。

队列目标设置提示

队列包含可满足游戏会话放置请求的目标的列表。在大多数情况下,目标是一个队组,您可以通过队组 ID 或别名 ID 来指定。在为队列选择目标时,请考虑以下指南和最佳实践:

  • 您可以添加来自任何区域的任何现有队列或别名。在您希望支持玩家的每个区域中添加队组,尤其是当您对放置使用玩家延迟时。

  • 如果您将别名分配给队组 (推荐),则最好在您的队列中设置目标时使用别名。

  • 队列中的所有目标必须运行与使用该队列的游戏客户端相兼容的游戏生成包。请记住,由队列处理的新游戏会话请求可能会放置在队列中的任何目标中。

  • 队列应包含至少两个队组,并且跨至少两个区域。通过降低队组或区域性速度减慢的影响以及更高效地管理意外的玩家需求变化,此设计可提高托管弹性。

  • 队列中目标的列出顺序很重要。如果您在游戏会话放置请求中包含延迟数据,Amazon GameLift 会重新确定目标的优先级,以找到具备以下特点的可用资源:(1) 玩家延迟最低,并且 (2) Spot 价格最低 (如果相关)。如果您未提供延迟数据,Amazon GameLift 会遵循目标列表顺序。在这种情况下,游戏会话通常托管在列出的第一个队组上,仅在需要时放置在备份队组上。

  • 您需要决定在何处创建您的队列 (在该区域中)。理想情况下,您通过游戏客户端服务 (如会话目录服务) 发出游戏会话放置请求。如果是这样,我们建议您在地理位置上接近客户端服务部署位置的区域中创建队列。此方案最大程度地降低了提交游戏会话放置请求的延迟。

设计多区域队列

建议对所有队列使用多区域设计,而不管您是否在使用如 FlexMatch 对战或 Spot 队组这样的特殊功能。此设计可提高放置速度和托管弹性,并且在使用玩家延迟数据时是至关重要的。

本主题将引导您完成基本多区域队列设计的过程。对于此示例,我们将使用我们要分发给北美东海岸玩家的游戏服务器生成包。我们已选择在以下区域中托管我们的游戏:us-east-1ca-central-1。我们已上传了游戏生成包,并且在每个区域中创建了一个队组。

  1. 选取要在其中创建队列的区域。我们的队列位置可能并不重要,但如果我们是在通过客户端服务发出放置请求,我们可以通过将队列放在接近客户端服务部署位置的区域中,最大程度地减少请求延迟。

  2. 创建新队列并将我们的队组添加为队列目标。

  3. 确定目标的默认列表顺序。GameLift 在搜索可用的托管资源时可能会按此顺序评估队组。如果放置请求包含玩家延迟数据,Amazon GameLift 会重新排序我们的目标,优先考虑最低的延迟率。如果未提供延迟数据,Amazon GameLift 会使用默认的顺序。

    • 如果我们预期会有大量不包含延迟数据的请求,我们将需要更多地关注我们的默认列表顺序以及我们先列出的队组。如果没有延迟数据,Amazon GameLift 会始终将新的游戏会话放在列出的第一个队组 (如果可用) 中,而只使用其余的队组作为备份。结果,我们希望 Spot 最高的队组具备以下特点:(1) 性能足够高,足以处理我们的大部分玩家,并且 (2) 有可能为我们的大多数玩家提供最高的可用性和最低的延迟。

      在此场景中,我们预期该 us-east-1 队组将能够服务大多数我们的玩家,因此我们选择一个高性能实例类型,将它配置为处理多个并行游戏会话,进行扩展以应对高玩家数量,并且首先在我们的队列中列出。我们的备份 ca-central-1 队列使用更小、价格更低的实例类型并维护最少的容量。额外备份队组 (如果添加) 不需要排序,但是我们可能不优先考虑可能有较高延迟率的区域。

    • 如果我们预期大多数请求具有延迟数据,那么列表顺序不太重要,因为 FleetIQ 将重新确定优先级。我们希望所有区域中的队组接近我们的目标玩家,从而最大程度地减少延迟率。通常,我们希望队组配置为处理预期的玩家数量需求。我们希望确保 Spot 最高的队组对于处理没有延迟数据的请求来说是不错的选择。

      在此场景中,我们预期 us-east-1ca-central-1 队组将提供低延迟率,并且会被频繁使用。这两个队组都使用高性能实例类型,并配置为处理多个并发游戏会话。ca-central-1 队组的需求较低,因此将保持更低的容量。

随着我们的队列投入使用,我们可以使用指标数据来确定设计的运行状况。借助队列,我们根据需要对队组进行更改,方式是添加重新配置现有队组或者删除并添加更适合我们的托管需求的新队组。

设计玩家延迟策略

如果您的游戏会话放置请求包括玩家延迟数据,Amazon GameLift 会使用 FleetIQ 来确保玩家可在可能的最短延迟内加入到游戏会话。FleetIQ 根据该请求中所有玩家的平均区域性延迟来确定队列目标的优先级。

您可以设置玩家延迟策略来影响 Amazon GameLift 使用玩家延迟数据的方式。您可以设置玩家延迟策略以:

  • 设置单个玩家的最大延迟。默认情况下,Amazon GameLift 会根据请求中所有玩家的平均延迟来放置游戏会话。此策略可确保在游戏会话放置到的位置,任何一个玩家都不会遇到超过最大值的延迟。

  • 使用多个策略可在一段时间后放宽最大延迟。设置最大延迟可在高延迟游戏中保护玩家,但同时会增加具有高延迟值的游戏会话请求永远无法得到处理的风险。您可以使用一系列策略,随着时间的推移逐步提高最大延迟。使用此方法可以在提供最佳游戏体验与让玩家在最短的等待时间内加入游戏之间实现平衡。

例如,您可以为包含 5 分钟超时的队列定义以下策略。多个策略将连续实施,从最大延迟值最小的策略开始实施。这组策略从 50 毫秒的最大延迟开始,随时间增长到 200 毫秒。您的最后一个策略设置对任意玩家允许的绝对最大延迟。如果您希望确保所有游戏会话都得到放置,而不管延迟如何,则可以将最后一个策略的最大延迟设置为非常高的值。

  1. 花费 120 秒钟搜索所有玩家延迟均低于 50 毫秒的目标,然后...

  2. 花费 120 秒钟搜索所有玩家延迟均低于 100 毫秒的目标,然后...

  3. 花费剩余的队列超时时间搜索所有玩家延迟均低于 200 毫秒的目标。

在该示例中,第一个策略在前两分钟生效、第二个策略在第三分钟和第四分钟生效、第三个策略在第五分钟生效,直到放置请求超时。

为 Spot 实例设计队列

如果您计划为您的队组使用 Spot 实例,您将需要设置队列。理想情况下,您希望设置一个弹性队列,该队列利用 Spot 队组的成本节省优势,同时最大限度地减少游戏会话的中断。使用以下最佳实践:

  • 包含来自多个区域的队组。通过确保始终有队组来托管新的游戏会话,多区域队列可以提升弹性。

  • 在每个区域中,包含至少一个 Spot 队组和一个按需队组。此设计可确保游戏会话可以放置在任何区域中,即使该区域中当前没有任何可行的 Spot 队组。

  • 如果您在每个区域中包含多个 Spot 队组,则为每个队列使用不同的实例类型,最好是相同的实例系列 (C4.large、C4.xlarge 等等)。这种设计可以减少多个 Spot 队组同时不可用或中断的可能性。在 Amazon GameLift 控制台中查看历史定价数据,确保您的首选实例类型通常能够通过 Spot 实现明显的成本节省。此数据显示 Spot 实例类型和按需实例类型的定价,并提供每个实例的估计 Spot 成本节约。

  • 要优化 FleetIQ 选择价格最低的 Spot 实例的能力,请做好计划以便为所有区域包括玩家延迟数据。如 FleetIQ 的工作原理中所述,当目的地按区域重新确定优先级(在提供延迟数据时执行该操作)时,FleetIQ 的工作方式更有效。

  • 如果您未在游戏会话放置请求中提供玩家延迟数据,则按首选项对您的目标进行排序。例如,您可能按区域首选项列出目标 (先 Spot 队组,然后是按需队组)。此外,您可能会先列出您的所有 Spot 队组。

FleetIQ 的工作原理

FleetIQ 在搜索新游戏会话的最佳放置位置时,依赖以下决策流程。

  1. FleetIQ 筛选队列的目的地以删除任何以下队组:

    • 如果请求中包含玩家延迟数据,FleetIQ 会评估队列的玩家延迟策略,并删除任何玩家的延迟超过策略最大限制的区域中的所有队组。

    • FleetIQ 会删除由于不可接受的中断率而导致的任何当前不可行的 Spot 队组。

  2. FleetIQ 根据以下内容设定剩余队列目的地的优先级:

    • 如果提供了玩家延迟数据,FleetIQ 会按区域对队列目的地重新排序,平均玩家延迟最低的目的地排在首位。

    • 如果提供玩家延迟数据,则 FleetIQ 将使用队列目标的原始列表。

  3. FleetIQ 从划分优先级的列表中选择目的地。

    • 如果目的地列表已按区域划分优先级,FleetIQ 将选择延迟最低的区域中价格最低的队组。如果没有可行的 Spot 队组,则可以选择该区域中的任何队组。

    • 如果目的地列表划分优先级,FleetIQ 将从原始列表中选择第一个可行的队组,即使列表中有更低价格的 Spot 队组也是如此。

  4. FleetIQ 评估选定队组是否有可用的服务器进程来托管新的游戏会话。当新的游戏会话放入延迟最低和/或价格最低的队组中,就可视为“最优”放置。

  5. 如果所选队组没有可用资源,FleetIQ 会移到下一个列出的目的地并重复此过程,直到找到队组来托管新的游戏会话。

评估队列指标

使用指标来评估您的队列的执行情况。您可以在 Amazon GameLift 控制台(查看队列详细信息)或 Amazon CloudWatch 中查看特定于队列的指标。有关队列指标的说明,请参阅 Amazon GameLift 队列指标

队列指标可以提供三个主要领域的见解:

  • 总体队列性能 – 指标指示队列如何成功地响应放置请求并帮助确定放置失败的时间和原因。对于手动扩展的队组,指标平均等待时间和队列深度可以指示何时可能需要调整队列容量。

  • FleetIQ 性能 – 对于使用 FleetIQ 筛选和优先级(即玩家延迟数据请求)的放置请求,指标指明 FleetIQ 能够为新游戏会话找到最佳放置的频率。最佳放置可能包括用最低的成本查找玩家延迟最低的资源或 Spot 队组可用的时间。此外,还有确定最佳放置失败的常见原因的错误指标。

  • 特定于区域的放置 – 对于多区域队列,指标按细分区域显示成功放置。通过使用 FleetIQ 的队列,此数据提供对玩家活动出现位置的有用见解。

当评估 FleetIQ 性能的指标,请考虑以下提示:

  • 将“成功放置”指标与最低延迟和/或最低价格的 FleetIQ 指标结合使用,跟踪队列的最佳放置率。

  • 要提高队列的最佳放置率,请查看以下错误指标:

    • 如果错误指标“首选不可用”较高,这是一个很好的指标,表示需要调整队列的队组的容量扩展。可能队列中的所有队组向下扩展,或者有一个特定队组或区域最适合大多数放置。

    • 如果错误指标“首选不可行”较高,这是一个查找 Spot 队组的指标。当特定实例类型的中断率太高时,Spot 队组被认为“不可行”。要解决此问题,请更改队列以使用具有不同实例类型的 Spot 队组。如包含 Spot 队组的队列的最佳实践中指出,在每个区域中包含具有不同实例类型的 Spot 队组始终是个好主意。