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

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

设计游戏会话队列

本主题介绍如何设计一个以最小延迟提供玩家体验并有效使用主机资源的队列。有关游戏会话队列及其工作原理的更多信息,请参阅为游戏会话放置设置亚马逊GameLift队列

这些亚马逊GameLift功能需要队列:

定义队列的范围

你的游戏的玩家群体中可能有一群不应该一起玩的玩家。例如,如果您以两种语言发布游戏,则每种语言都应有自己的游戏服务器。

要为您的玩家群体设置游戏会话位置,请为每个玩家分段创建一个单独的队列。确定每个队列的范围,将玩家放入正确的游戏服务器。确定队列范围的一些常见方法包括:

  • 按地理位置。在多个地理区域部署游戏服务器时,您可以为每个位置的玩家建立队列以减少玩家延迟。

  • 通过编译或脚本变体。如果您有多个游戏服务器变体,则可能是支持无法在同一游戏会话中玩的玩家群组。例如,游戏服务器版本或脚本可能支持不同的语言或设备类型。

  • 按事件类型。你可以创建一个特殊队列来管理锦标赛或其他特殊活动的参与者的游戏。

创建玩家延迟政策

如果您的放置请求包含玩家延迟数据,则算法会在所有玩家平均延迟最低的位置查找游戏会话。根据平均玩家延迟设置游戏会话可GameLift防止亚马逊将大多数玩家置于高延迟游戏中。但是,亚马逊GameLift仍然为玩家提供极高的延迟。为了适应这些玩家,请制定玩家延迟政策。

玩家延迟政策可GameLift防止亚马逊将请求的游戏会话放置在请求中的玩家会遇到的延迟超过最大值的任何地方。玩家延迟政策还可以GameLift阻止亚马逊将游戏会话请求与延迟较高的玩家进行匹配。

提示

要管理延迟特定的规则,例如要求群组中所有玩家的延迟时间相似,您可以使用亚马逊GameLiftFlexMatch创建基于延迟的配对规则。

例如,假设这个队列的超时时间为 5 分钟,玩家延迟策略如下:

  1. 花 120 秒搜索所有玩家延迟都低于 50 毫秒的位置。

  2. 花 120 秒搜索所有玩家延迟都低于 100 毫秒的位置。

  3. 将剩余的排队时间花在超时之前搜索所有玩家延迟都低于 200 毫秒的位置。


                前面描述的控制台中配置队列的示例屏幕。

建立多位置队列

我们建议所有队列采用多位置设计。这种设计可以提高放置速度和托管弹性。需要多位置设计才能使用玩家延迟数据让玩家以最小的延迟进入游戏会话。如果您要构建使用 Spot Instance 队列的多位置队列,请按照中的说明进行操作。教程:为 Spot 实例设置游戏会话队列

创建多位置队列的一种方法是向队列添加多位置队列。这样,队列就可以在舰队的任何位置放置游戏会话。您还可以添加具有不同配置或所在位置的其他队列以实现冗余。如果您使用的是多地点竞价型实例队列,请遵循最佳实践,并加入具有相同位置的按需实例队列。

以下示例概述了设计基本多位置队列的过程。在此示例中,我们使用两个队列:一个竞价型实例队列和一个按需实例队列。每个舰队都有以下放Amazon Web Services 区域置地点:us-east-1us-east-2ca-central-1、和us-west-2

使用多位置队列创建基本的多位置队列
  1. 选择创建队列的位置。您可以将队列放在部署客户端服务的位置附近,从而最大限度地减少请求延迟。在此示例中,我们在中创建队列us-east-1

  2. 创建新队列并将您的多地点队列添加为队列目的地。目的地顺序决定了亚马逊GameLift如何进行游戏会话。在此示例中,我们首先列出了竞价型实例队列,然后列出了按需实例队列。

  3. 定义队列的游戏会话放置优先顺序。此顺序决定了队列首先在哪里搜索可用的游戏服务器。在此示例中,我们使用默认的优先级顺序。

  4. 定义地点顺序。如果您未定义地点顺序,亚马逊会按字母顺序GameLift使用地点。


                控制台中配置队列放置位置和目的地的示例屏幕,如前面的过程所述。

                控制台中配置游戏会话放置优先级和位置顺序的示例屏幕,如前面的步骤所述。

优先考虑游戏会话放置

亚马逊GameLift使用FleetiQ算法根据一组有序的标准来确定在哪里放置新的游戏会话。您可以使用默认的优先顺序,也可以自定义优先顺序。

默认优先顺序

对于包含玩家延迟数据的放置请求,FleetIQ 按以下默认顺序对游戏会话放置标准进行优先排序:

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

  2. 成本-如果多个位置的延迟相等,则最低的托管成本。托管成本主要基于实例类型和位置的组合。

  3. 目的地 — 如果多个位置的延迟和成本相等,则目的地顺序。FleetIQ 根据队列配置中列出的顺序对目的地进行优先排序。

  4. 位置-如果多个位置的延迟、成本和目的地相等,则位置顺序。FleetIQ 根据队列配置中列出的顺序对位置进行优先排序。

自定义优先顺序

要在 Amazon GameLift 控制台中自定义队列的优先顺序,请将优先级值拖动到您想要的位置。要使用 Amazon Command Line Interface (Amazon CLI) 自定义队列的优先顺序,请使用带--priority-configuration选项的create-game-session-queue命令。您可以使用此命令创建新队列或更新现有队列。

FleetIQ 算法会根据默认顺序将任何未明确提及的标准附加到列表末尾。如果您在优先级配置中包含位置标准,则还必须提供有序的位置列表。

根据需要设计多个队列

根据您的游戏和玩家,您可能需要创建多个游戏会话队列。当您的游戏客户端服务请求新的游戏会话时,它会指定要使用哪个游戏会话队列。为了帮助您确定是否使用多个队列,请考虑:

  • 您的游戏服务器的变体。你可以为游戏服务器的每个变体创建一个单独的队列。队列中的所有舰队都必须部署兼容的游戏服务器。这是因为使用队列加入游戏的玩家必须能够在队列的任何游戏服务器上玩游戏。

  • 不同的玩家群体。您可以根据玩家群组自定义亚马逊GameLift放置游戏会话的方式。例如,您可能需要为需要特殊实例类型或运行时配置的某些游戏模式自定义队列。或者,你可能需要一个特殊队列来管理锦标赛或其他赛事的展示位置。

  • 游戏会话队列指标。你可以根据你想要收集游戏会话放置指标的方式来设置队列。有关更多信息,请参阅亚马逊队列GameLift指标

评估队列指标

使用指标来评估您的队列的执行情况。您可以在亚马逊GameLift控制台或亚马逊中查看与队列相关的指标CloudWatch。有关队列指标的列表和描述,请参阅亚马逊队列GameLift指标

队列指标可以提供有关以下内容的见解:

  • 队列整体性能-队列指标表明队列对放置请求的响应成功程度。这些指标还可以帮助您确定投放失败的时间和原因。对于具有手动扩展队列的队列,AverageWaitTimeQueueDepth指标可以指示何时应调整队列的容量。

  • FleetIQ 算法性能 — 对于使用 FleetIQ 算法的放置请求,指标显示该算法找到理想游戏会话位置的频率。放置位置可以优先使用玩家延迟最低的资源或成本最低的资源。还有一些错误指标GameLift可以确定亚马逊找不到理想展示位置的常见原因。有关指标的更多信息,请参阅 GameLift使用亚马逊监控亚马逊 CloudWatch

  • 特定地点的放置 — 对于多地点队列,指标会按地点显示成功投放。对于使用 FleetIQ 算法的队列,此数据为了解玩家活动发生的地点提供了有用的见解。

在评估 FleetIQ 算法性能指标时,请考虑以下提示:

  • 要跟踪队列找到理想位置的速度,请将该PlacementsSucceeded指标与 FleetIQ 指标结合使用,以实现最低延迟和最低价格。

  • 要提高队列找到理想位置的速度,请查看以下错误指标:

    • 如果FirstChoiceOutOfCapacity很高,请调整队列队列的容量规模。

    • 如果FirstChoiceNotViable错误指标很高,请查看您的竞价型实例队列。当特定实例类型的中断率过高时,竞价型实例队列被视为不可行。要解决此问题,请将队列更改为使用具有不同实例类型的竞价型实例队列。我们建议您在每个位置加入具有不同实例类型的竞价型实例队列。