设计游戏会话队列 - Amazon GameLift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

设计游戏会话队列

GameLift 游戏会话队列是游戏管理层中的关键组成部分。队列负责处理新的游戏会话请求、找到游戏服务器以托管新游戏会话,以及提示游戏服务器启动游戏会话。您设计队列的方式确定:(1) GameLift 可在什么地方搜索可用游戏服务器,以及 (2) GameLift 如何确定可用游戏服务器的优先级来为请求找到最佳放置。本主题的目标是帮助您设计一个队列,以便为玩家提供最佳体验,并有效地使用您预配和支付的托管资源。

使用以下 GameLift 功能需要队列:

有关队列的更多信息,请参阅运行游戏会话。有关创建队列的信息,请参阅创建游戏会话队列。有关使用队列创建新游戏会话的信息,请参阅 创建游戏会话。有关为竞价型队列创建队列的帮助,请参阅教程:为 Spot 实例设置游戏会话队列.

根据需要设计多个队列

根据您的游戏和玩家,您可能需要创建多个队列。当游戏客户端服务请求新游戏会话时,它指定要使用的游戏会话队列。要考虑的一些问题:

  • 如果您的游戏服务器有多个变体,请为每个变体创建单独的队列。队列中的所有队列都必须部署兼容的游戏服务器,因为使用队列加入游戏的玩家必须能够在队列的任何游戏服务器上玩。

  • 您可能想为某些玩家组设置特殊队列。因此,您可以根据具体情况自定义游戏会话放置的方式。例如,您可能需要针对需要特殊实例类型或运行时配置的某些游戏模式自定义队列。或者你可能需要一个特殊的队列来管理锦标赛或其他赛事的位置。您可以使用具有不同配置的车队,并更改位置的优先级。

  • 如果您没有提供玩家延迟数据,您可以设置队列来为特定地理位置提供服务。

  • 您可以根据希望如何收集游戏会话放置指标来设置队列。有关更多信息,请参阅 队列 GameLift 指标

  • 在某些情况下,您的队列配置可能需要多个队列。例如,队列中的所有队列必须具有相同的 TLS 证书生成设置。

构建多区域队列

建议对所有队列采用多区域设计。此设计可以提高放置速度和托管弹性,并且当您想使用玩家延迟数据让玩家加入具有最佳游戏体验的游戏会话时,至关重要。如果您正在构建使用竞价型队列的多区域队列,请参阅教程:为 Spot 实例设置游戏会话队列.

一种选择是添加多位置机群到队列。队列可以在队列的任何位置放置游戏会话。您不需要添加更多队列即可扩大区域覆盖范围,尽管您可能需要添加具有不同配置的其他队列或主区域以实现冗余。如果您使用的是多地点竞价型队列,请遵循最佳实践并包含包含相同位置的按需队列。

以下示例概述基本多区域队列的设计过程。在此示例中,我们将使用部署在两个队组中的游戏服务器构建,一个 Spot 队组和一个按需队组中。每个机队都有以下位置:us-east-1us-east-2ca-central-1, 和us-west-2.

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

  2. 创建新队列并将我们的队组添加为队列目标。请记住,目的地的列表顺序可能会影响游戏会话的放置方式,具体取决于队列的优先级顺序。在此示例中,我们首先列出我们的竞价型队列,然后列出我们的按需队列。

  3. 如果要防止将游戏会话放置在目标队列的任何位置,请创建一个过滤器配置,其中列出可以放置游戏会话的位置。在此示例中,我们希望放置在所有位置,因此不需要过滤器配置。

  4. 选择队列的优先级配置以确定队列首先搜索可用游戏服务器的位置。在此示例中,我们选择使用默认优先级顺序。由于我们的游戏会话放置请求不包括玩家延迟数据,因此我们的队列将首先根据目的地,然后根据位置优先排序位置。此选择的结果如下:

    • 队列中列出的第一个目的地是我们的竞价型队列。

    • 车队位置按字母顺序列出如下:ca-central-1us-east-1us-east-2us-west-2.

    • 因此,新的游戏会话将始终放置在ca-central-1竞价型队列的位置,除非那里没有可用的游戏服务器。在这种情况下,队列将在其中放置新的游戏会话us-east-1的竞价型队列,直到它被填满为止,依此类推。只有在竞价型队列上的所有游戏服务器都在使用时,游戏会话才会放置在按需队列位置。

随着我们的队列投入使用,我们可以使用指标数据来确定队列设计的保持状况。

优先放置游戏会话的位置

GameLift 使用 FleetIQ 算法来确定放置新游戏会话的最佳队列位置。它通过根据一组有序的标准对队列位置进行优先级来实现这一目标。

优先级标准是:区域玩家延迟数据(如游戏会话放置请求中报告的)、托管成本、地理位置(基于提供的订单和目标队列(基于列表顺序)。这些标准的应用顺序会显著影响放置的发生方式。您可以选择使用默认顺序,也可以通过提供优先级配置对其进行自定义。

默认优先级顺序

FleetIQ 按以下默认顺序应用标准:

  • 对于包含玩家延迟数据的放置请求,FleetIQ 按如下方式优先放置位置:

    1. 请求中所有玩家的最低平均延迟。

    2. 如果多个地点的延迟相等,则托管成本最低。托管成本主要基于实例类型和位置的组合(队列的主区域和远程位置的组合)。

    3. 目的地列表顺序,如果多个地点的延迟和成本相等。根据目标在队列配置中的列出顺序来确定优先级。

    4. 位置,如果多个地点的延迟、成本和目的地相同。位置根据地区代码按字母顺序排列优先级。

  • 对于可以做的放置请求包括玩家延迟数据,FleetIQ 按如下方式确定放置在位置的优先级。这种方法倾向于将所有游戏会话放在第一个列出的目的地队列上,无论位于按字母顺序排列的位置。只有当第一个位置填满时,游戏会话才会放置在其他位置和队列中。

    1. 目的地列表顺序。根据目标在队列配置中的列出顺序来确定优先级。

    2. 位置,如果目的地在多个位置相等。位置根据地区代码按字母顺序排列优先级。

自定义优先顺序

自定义队列的优先级顺序时,请创建优先级配置(请参阅优先级配置)。您可以使用此配置创建新的队列或更新现有队列。

您可以包括任何或全部优先级标准(LATENCYCOSTDESTINATIONLOCATION)。请记住,FleetIQ 会根据默认顺序将未明确提及的任何标准附加到列表末尾。例如,如果您只在优先级配置中指定目的地,FleetIQ 将按以下顺序应用:(1) 目的地、(2) 延迟、(3) 成本、(4) 位置。

如果在优先级配置中包含 LOCATION,则还必须提供供 FleetIQ 使用的有序位置列表。

创建玩家延迟策略

如果您的游戏会话放置请求包括玩家延迟数据,FleetIQ 会在为请求中所有玩家提供最低区域性延迟的位置放置游戏会话。基于平均玩家延迟进行放置可以保护大多数玩家免受延迟不可接受的游戏,但这并不考虑极端异常值。为了适应这些异常值,你需要设置延迟上限。

延迟上限策略可确保请求的游戏会话不会放在请求中的任何个人玩家会遇到超过最大值的延迟。但是,请记住,延迟上限还会增加具有延迟异常值的游戏会话请求永远无法得到处理的风险。随着时间的推移,您可以使用一系列策略来逐步提高最大延迟。您可以自定义如何在提供最佳游戏体验与让玩家在最短的等待时间内加入游戏之间实现平衡。

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

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

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

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

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

评估队列指标

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

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

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

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

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

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

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

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

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

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