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

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

亚马逊 GameLift FleetIQ 生命周期和状态

现货平衡过程

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

现货平衡有两个关键目标:

  • 仅使用适用于游戏托管的竞价型实例类型来不断刷新群组。

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

Amazon GameLift FleetIQ 通过评估组的实例类型和删除更有可能导致游戏服务器中断的实例来实现平衡。为避免在平衡期间终止具有活跃游戏玩法的实例,最佳做法是为正在生产的游戏服务器组开启游戏服务器保护。

以下示例说明了 Auto Scaling 组中的实例如何受到竞价平衡的影响。


                    亚马逊 GameLift FleetIQ 平衡期间 Auto Scaling 组的生命周期。
  • 步骤 1. 通过游戏服务器组,链接的 Auto Scaling 组设置为启动启用游戏服务器保护的 m4.large、c4.large 和 c5.large 类型的实例。Auto Scaling 组已启动了一个平衡集合,该集合由每种类型的两个竞价型实例组成。四个实例至少有一个处于 UTILIZED(被利用)状态的游戏服务器(显示为虚线边框),而两个实例当前不支持玩游戏。

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

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

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

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

此过程的结果是,Auto Scaling 组保持其所需的容量,而该组则从使用三种实例类型平衡为两种。Amazon GameLift FleetIQ 继续评估原始实例类型列表的游戏托管可行性。当 c4.large 再次被视为可行的实例类型时,Auto Scaling 组将更新为包括所有三种实例类型。随着时间的推移,该小组自然会保持平衡。

游戏服务器群组的生活

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


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

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

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

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

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

  • 亚马逊 GameLift FleetIQ 会激活异步停用工作流程以响应 DELETE_SCHEDUED 状态,将游戏服务器组状态转换为删除。您可以选择只删除游戏服务器组,也可以同时删除游戏服务器组和关联的 Auto Scaling 组。

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

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

游戏服务器的生命

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

  • 在与 Amazon GameLift FleetiQ 关联的 Auto Scaling 组中的实例上运行的游戏服务器进程调用亚马逊 GameLift API RegisterGameServer() 通知亚马逊 GameLift FleetiQ 已准备好托管玩家和游戏时,就会创建游戏服务器资源。游戏服务器具有两种状态来跟踪其当前可用性:

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

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

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

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

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

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

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

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