Amazon GameLift FleetIQ 的生命周期和状态 - Amazon GameLift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon GameLift FleetIQ 的生命周期和状态

竞价平衡过程

Amazon GameLift FleetIQ 会定期平衡具有竞价型实例的自动扩缩组中的实例。对于使用 ON_DEMAND_ONLY 平衡策略或没有任何活动实例的游戏服务器组,此过程不处于活动状态。

竞价平衡有两个关键目标:

  • 仅使用对游戏托管具有高可行性的竞价型实例类型持续刷新组。

  • 使用多种可行的实例类型(在可能时),以减少游戏服务器意外中断的影响

Amazon GameLift FleetIQ 通过评估组的实例类型并删除更可能导致游戏服务器中断的实例来平衡。为了避免在平衡过程中终止具有活动游戏的实例,最好是为生产中的游戏服务器组启用游戏服务器保护。

以下示例说明自动扩缩组中的实例如何受到竞价平衡的影响。

自动扩缩组在 Amazon GameLift FleetIQ 平衡期间的生命周期。
  • 步骤 1. 通过游戏服务器组,关联的自动扩缩组设置为在启用游戏服务器保护的情况下启动类型为 m4.large、c4.large 和 c5.large 的实例。自动扩缩组已启动一个平衡集合,其中包含每种类型的两个竞价型实例。四个实例至少有一个处于 UTILIZED(被利用)状态的游戏服务器(显示为虚线边框),而两个实例当前不支持玩游戏。

  • 步骤 2. Amazon GameLift FleetIQ 评估所有三种实例类型的当前游戏托管可行性。评估确定 c4.large 实例类型存在不可接受的游戏服务器中断的可能性。Amazon GameLift FleetIQ 会立即更新自动扩缩组配置,暂时将 c4.large 从实例类型列表中删除,从而阻止启动其他 c4.large 实例。

  • 步骤 3 Amazon GameLift FleetIQ 确定类型 c4.large 的现有实例,并采取措施将它们从组中删除。作为第一步,在 c4.large 实例上运行的所有游戏服务器都标记为耗尽。只有在没有其他游戏服务器可用的情况下,才能作为最后手段认领耗尽实例上的游戏服务器。此外,将触发具有耗尽实例的自动扩缩组以启动新实例来替换它们。

  • 步骤 4. 随着新的可行实例上线,自动扩缩组将终止耗尽的实例。这种替换可确保该组的所需容量得到保持。要终止的第一个实例是没有已利用的游戏服务器且关闭了游戏服务器保护的 c4.large 实例。它被替换为一个新的 c5.large 实例。

  • 步骤 5. 对于具有游戏服务器保护的耗尽实例而言,在其游戏服务器支持玩游戏时,这些实例将继续运行。游戏结束后,一旦新的 m4.large 实例启动以取代剩余的 c5.large 实例的位置,后者就会终止。

由于此过程,自动扩缩组将保持其所需容量,同时此组将从使用三种实例类型平衡为使用两种。Amazon GameLift FleetIQ 继续评估最初的实例类型列表,以确定游戏托管的可行性。当 c4.large 再次被视为可行的实例类型时,将更新自动扩缩组以包含全部三种实例类型。该组随着时间推移自然地平衡。

游戏服务器组的生命周期

游戏服务器组经历以下生命周期,包括预配置和状态更新。游戏服务器组预计是一个长寿命的资源。

游戏服务器组资源的生命周期。
  • 您可以通过调用 Amazon GameLift API CreateGameServerGroup() 并传入 EC2 启动模板和配置设置来创建游戏服务器组。为响应呼叫,将创建一个新的游戏服务器组并将其置于 NEW(新)状态。

  • Amazon GameLift FleetIQ 激活异步激活工作流,将游戏服务器组状态转换为 ACTIVATING。该工作流程启动对基础资源的创建,包括 Amazon EC2 Auto Scaling 组和具有提供的 AMI 的 EC2 实例。

    • 如果预配置因任何原因失败,游戏服务器组将被置于 ERROR(错误)状态。要获取其他错误信息以帮助调试故障原因,请在处于错误状态的游戏服务器组上调用 DescribeGameServerGroup()

    • 如果预配置成功,则游戏服务器组将转换为 ACTIVE(活动)状态。此时,将通过注册到 Amazon GameLift FleetIQ 的游戏服务器启动实例。定期评估该组的实例类型以确定游戏托管的可行性,并根据需要进行平衡。Amazon GameLift FleetIQ 还会跟踪组中活跃游戏服务器的状态,并响应对游戏服务器的请求。

  • 可以通过使用组标识符调用 DeleteGameServerGroup() 来删除游戏服务器组。此操作将游戏服务器组置于 DELETE_SCHEDULED 状态。只能计划删除处于 ACTIVE(活动”)或 ERROR(错误)状态的游戏服务器组。

  • Amazon GameLift FleetIQ 激活异步停用工作流程以响应 DELETE_SCHEDULED 状态,从而将游戏服务器组状态转换为 DELETING。您可以选择仅删除游戏服务器组,或者同时删除游戏服务器组和关联的自动扩缩组。

    • 如果停用因任何原因失败,游戏服务器组将进入 ERROR(错误)状态。要获取其他错误信息以帮助调试故障原因,请在处于错误状态的游戏服务器组上调用 DescribeGameServerGroup()

    • 如果停用成功,游戏服务器组将转换为 DELETED(已删除)状态。

游戏服务器的生命周期

使用 Amazon GameLift FleetIQ,游戏服务器经历以下生命周期,包括预配置和状态更新。游戏服务器预计是短寿命的资源。最佳实操是,游戏服务器应在游戏会话结束后注销,而不是重新用于其他游戏会话。这种方法有助于确保可用的游戏服务器始终在可用于游戏托管的成本最低的资源上运行。

  • 当在 Amazon GameLift FleetIQ 关联的自动扩缩组中的某个实例上运行的游戏服务器进程调用 Amazon GameLift API RegisterGameServer() 以通知 Amazon GameLift FleetIQ 它已准备好托管玩家和玩游戏时,将创建游戏服务器资源。游戏服务器具有两种状态来跟踪其当前可用性:

    • 利用状态跟踪游戏服务器当前是否支持玩游戏。此状态最初设置为 AVAILABLE(可用),表示它已准备好接受新的游戏。一旦游戏服务器被游戏占用,此状态就会设置为 UTILIZED(已利用)。

    • 认领状态可跟踪游戏服务器是否被认领用于即将开始的游戏。处于 CLAIMED(已认领)状态的游戏服务器表示它已被游戏客户端(或游戏服务,如匹配器)暂时保留。此状态可防止 Amazon GameLift FleetIQ 向多个请求者提供相同的游戏服务器。认领状态为空的游戏服务器可供认领。

  • 下图说明游戏服务器的利用状态和认领状态在其生命周期内如何变化。

    游戏服务器资源的生命周期。
    • 步骤 1. 一个游戏服务器组有六个已注册的游戏服务器。其中四个的利用状态为 AVAILABLE(A、B、C 和 D),两个目前处于 UTILIZED 状态(E 和 F)。

    • 步骤 2. 游戏客户端或对战系统调用 Amazon GameLift API ClaimGameServer() 来请求新的游戏服务器。此请求会提示 Amazon GameLift FleetIQ 搜索可用的游戏服务器 (D),并将其申领状态设置为 CLAIMED,持续 60 秒。Amazon GameLift FleetIQ 在回应其请求时提供了游戏服务器的连接信息(IP 地址和端口)以及其他可选的游戏特定数据。由于尚未在游戏服务器上开始玩游戏,因此它的利用状态仍然保持为 AVAILABLE,但无法通过其他请求来认领。

    • 步骤 3a. 使用提供的连接信息,游戏客户端可以连接到游戏服务器并启动游戏。必须在 60 秒内触发游戏服务器 (D),才能通过调用 Amazon GameLift API UpdateGameServer() 将其利用状态更改为 UTILIZED。

    • 步骤 3b. 如果游戏服务器的利用状态在 60 秒后未更新,认领计时器将过期,认领状态将重置为空白。游戏服务器 (D) 将返回到可用和未认领的游戏服务器池中。

  • 游戏服务器上的游戏完成并且玩家断开连接后,游戏服务器资源将被移除。在关闭之前,游戏服务器进程调用 Amazon GameLift API DeregisterGameServer(),以通知 Amazon GameLift FleetIQ 其离开游戏服务器组的游戏服务器池。