亚马逊 GameLift FleetiQ 是如何运作的 - Amazon GameLift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

亚马逊 GameLift FleetiQ 是如何运作的

Amazon GameLift FleetiQ 解决方案是一个游戏托管层,它补充了你通过 Amazon EC2 和 Auto Scaling 获得的全套计算资源管理工具。除了提供一系列特定于游戏托管的功能外,Amazon Fle GameLift etiQ 还提供了额外的逻辑层,使使用低成本竞价型实例进行游戏托管成为可能。该解决方案允许您直接管理您的 Amazon EC2 和 Auto Scaling 资源,并根据需要与其他 Amazon 服务集成。

使用 Amazon GameLift FleetiQ 时,您可以像往常一样准备启动 Amazon EC2 实例:使用游戏服务器软件制作亚马逊系统映像 (AMI),创建亚马逊 EC2 启动模板,并为 Auto Scaling 组定义配置设置。但是,您无需直接创建 Auto Scaling 组,而是使用您的 Amazon GameLift EC2 和 Auto Scaling 资源和配置创建 Amazon FleetiQ 游戏服务器组。此操作会提示 Amazon GameLift FleetiQ 同时创建游戏服务器组和相应的 Auto Scaling 组。游戏服务器组与自动扩缩组关联并管理自动扩缩组的某些方面。

创建自动扩缩组后,您将具有 Amazon EC2 和 Auto Scaling 资源的完全访问权限。您可以更改 Auto Scaling 组的配置,添加多级扩展策略或负载均衡器,以及与其他 Amazon 服务集成。您可以直接连接到组中的实例。作为其优化逻辑的一部分,Amazon GameLift FleetiQ 还会定期更新某些 Auto Scaling 组属性。您可以跟踪自动扩缩组部署的所有实例的可用性状态。

您可以随时暂停游戏服务器组的 Amazon GameLift FleetiQ 活动。您还可以选择删除游戏服务器组,但保留对应的自动扩缩组。

亚马逊 GameLift FleetiQ 逻辑

下图说明了亚马逊 GameLift FleetiQ 在与亚马逊 EC2 合作托管游戏时所扮演的角色。其主要目标是找到最好 的游戏服务器来托管游戏会话,并为玩家提供最佳的游戏体验。Amazon GameLift FleetiQ将最佳资源定义为那些以最低成本提供最高游戏托管可行性的资源。Amazon GameLift FleetiQ 通过两种关键方式实现这一目标:首先,在 Auto Scaling 组中仅允许可行的实例类型,其次是在该组的可用资源中有效地放置新的游戏会话。

亚马逊 GameLift FleetiQ 与亚马逊 EC2 合作

使用最佳实例类型填充自动扩缩组

自动扩缩组的任务是启动新实例并停用旧实例,同时维护托管资源集合并扩展该集合以满足玩家需求。为此,自动扩缩组依赖于您所需的实例类型列表。Amazon GameLift FleetiQ 的工作是不断检查这些所需实例类型的可行性,并更新 Auto Scaling 组的列表。此过程称为实例平衡。它可确保自动扩缩组中的实例不断刷新,以便始终仅使用当前可行的实例类型。

Amazon GameLift FleetiQ 通过以下方式影响 Auto Scaling 组选择最佳实例类型的方式:

  • 它决定竞价型和/或按需型实例的使用情况。Amazon GameLift FleetiQ 游戏服务器组配置了平衡策略,这会影响 Auto Scaling 组使用竞价型和/或按需实例的方式。由于可用性波动和潜在的中断,竞价型实例的成本较低,Amazon FleetiQ 将游戏服务器托管的限制降至 GameLift 最低。按需型实例成本更高昂,但在您需要时可提供更可靠的可用性。

  • 它限制新实例只能在可行的实例类型上启动。Amazon GameLift FleetiQ 游戏服务器组维护您所需实例类型的主列表。实例平衡过程使用预测算法,持续评估列表中每种所需的实例类型,以确定游戏托管的可行性,该算法会查看该实例类型的最新可用性和中断率。根据此次评估,Amazon GameLift FleetiQ 会不断更新 Auto Scaling 组的所需实例类型列表,以仅包括当前可行的实例类型。

  • 它会标记不可行的实例类型的现有实例。Amazon GameLift FleetiQ 会识别 Auto Scaling 组中当前不可行的实例类型的现有实例。这些实例标记为耗尽,这意味着将终止这些实例并使用新实例替换。对于已启用游戏服务器保护的实例,终止将推迟到任何活动的游戏会话正常结束。

随着自动扩缩组启动和停用实例,它将持续维护针对游戏托管进行优化的集合,即使低成本竞价型实例类型的可用性不断波动也是如此。平衡活动仅在具有活动实例的游戏服务器组上进行。在竞价平衡过程中了解有关此过程如何工作的详细信息。

有效地放置游戏会话

Amazon GameLift FleetiQ 会跟踪游戏服务器组中所有活跃的游戏服务器,并使用这些信息来确定新游戏会话和玩家的最佳位置。

要让 Amazon GameLift FleetiQ 能够跟踪游戏服务器,您的游戏服务器软件必须报告其状态。您的自定义 AMI 控制在每个实例上启动和停止新游戏服务器进程的方式。当新的游戏服务器启动时,它会向 Amazon GameLift FleetiQ 注册,这表明它已准备好托管游戏会话。在注册后,游戏服务器定期报告其运行状况以及当前是否托管游戏会话。当游戏服务器关闭时,它会在亚马逊 Fle GameLift etiQ 上注销注册。

要开始新的游戏会话,您的游戏客户端(或媒人或其他客户端服务)会向 Amazon GameLift FleetiQ 发送游戏服务器请求。Amazon GameLift FleetiQ 会找到可用的游戏服务器,为新的游戏会话申领该服务器,然后使用游戏服务器 ID 和连接信息进行响应。然后,游戏会提示游戏服务器更新其状态,并为进入的玩家启动新的游戏会话。

在选择游戏服务器来托管新游戏会话时,Amazon GameLift FleetiQ 使用以下决策过程通过可行的低成本竞价型实例来优化布局:

  1. 在可能的情况下,Amazon GameLift FleetiQ 会在已经托管其他游戏会话的实例上放置新的游戏会话。通过打包(但不过载)某些实例并保持其他实例为空闲状态,自动扩缩组能够在不需要空闲实例时快速缩减空闲实例,从而降低托管成本。

  2. Amazon GameLift FleetiQ 会忽略那些被标记为耗尽资源(即不适用于游戏托管)的实例。这些实例仅为持现有的游戏会话而保持运行。除非没有其他游戏服务器可用,否则它们不能用于新的游戏会话。

  3. Amazon GameLift FleetiQ 可识别在可行实例上运行的所有可用游戏服务器。

您可以为游戏服务器组启用游戏会话保护,以防止自动扩缩组终止具有正在运行游戏会话的实例。

关键资源和组件

在使用 Amazon GameLift FleetiQ 设置游戏托管资源之前,请在您的 Amazon 账户中创建以下资源。作为最佳做法,在通过游戏服务器组使用这些资源之前,使用这些资源开发和测试游戏服务器部署。

  • 亚马逊机器映像(AMI)。AMI 是您希望随 Amazon EC2 实例一起启动的特定软件配置的模板。对于游戏托管,AMI 包括操作系统、游戏服务器二进制文件或容器,以及游戏服务器所需的其他运行时软件。有关创建 AMI 的更多信息,请参阅 Amazon EC2 用户指南中的亚马逊系统映像。AMI 是特定于区域的。您可以将 AMI 从一个区域复制到另一个区域,如同在《Amazon EC2 用户指南》中的复制 AMI所述。

  • Amazon EC2 启动模板。启动模板提供了在自动扩缩组中启动和管理实例的说明。它指定 AMI,提供合适的实例类型列表,设置网络、安全性和其他属性。有关创建启动模板的更多信息,请参阅《Amazon EC2 用户指南》中的从启动模板启动实例。启动模板特定于区域。

  • Amazon IAM 角色。IAM 角色定义了一组权限,允许对 Amazon 资源进行有限访问。可信实体(例如其他 Amazon 服务)可以担任该角色并继承其权限。使用 Amazon GameLift FleetiQ 时,您必须为一个 IAM 角色提供托管策略,该策略允许 Amazon GameLift FleetiQ 在您的账户中创建和访问 Auto Scaling 组和 EC2 实例资源。 Amazon IAM 角色不是特定于区域的。

Amazon GameLift FleetiQ 直接管理以下资源,并直接管理这些资源。

  • GameLift 游戏服务器组。游戏服务器组包含配置设置,这些设置定义了 Amazon GameLift FleetiQ 如何与相应的 Auto Scaling 组合作以提供低成本的游戏托管。游戏服务器组是区域特定的。当您在某个区域中创建游戏服务器组时,系统会在同一区域的 Amazon 账户中自动创建一个新的 Auto Scaling 组。游戏服务器组与 Auto Scaling 组关联,并且有权(通过担任 IAM 角色)管理和修改其部分设置。游戏服务器组是一个长寿命的资源;开发人员应预期很少创建它们。游戏服务器组也是托管在 Auto Scaling 组中的实例上并在 Amazon GameLift FleetiQ 上注册的游戏服务器的功能分组资源。

  • GameLift 游戏服务器。游戏服务器资源表示在与 Amazon GameLift FleetiQ 游戏服务器组关联的实例上运行的游戏执行。该资源是在游戏服务器向 Amazon GameLift FleetiQ 注册并识别其所属的游戏服务器组时创建的。Amazon GameLift FleetiQ 会跟踪每台已注册游戏服务器的使用状态和申领状态,从而使其能够监控游戏服务器的可用性。游戏服务器特定于区域,因为它们与特定于区域的游戏服务器组相关联。当您的游戏请求新的游戏服务器时,它会指定游戏服务器组和区域。

这些资源是通过 Amazon GameLift FleetiQ 资源创建的。它们在您的 Amazon 账户中创建,您对它们具有完全控制权限。

  • Amazon EC2 自动扩缩组。Auto Scaling 组启动和管理 EC2 实例集合,并自动扩展组容量。在 Amazon GameLift FleetiQ 中,游戏服务器组和 one-to-one Auto Scaling 组之间存在关系。虽然您可以更新 Auto Scaling 组的所有设置,但 Amazon GameLift FleetiQ 会定期覆盖和更新某些设置,这是其逻辑的一部分,以平衡竞价型实例的游戏托管可行性。有关更多信息,请参阅 AutoScalingGroupAmazon EC2 Auto Scaling 用户指南。Auto Scaling 组是特定于区域的;它们创建在与游戏服务器组相同的区域中。

  • Amazon EC2 实例。实例是云中的虚拟服务器。实例类型具有指定计算、内存、磁盘和网络资源的特定硬件配置。它们通常由具有 AMI 的自动扩缩组启动。实例可以是 Spot 或按需实例,具体取决于可用性。使用 Amazon GameLift FleetiQ,实例可以运行一个或多个游戏服务器进程,每个进程都可以托管多个游戏会话。实例特定于区域,因为它们与特定于区域的自动扩缩组相关联。