

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

# Amazon GameLift Servers FleetIQ 的工作原理
<a name="gsg-howitworks"></a>

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

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

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

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

**Topics**
+ [Amazon GameLift Servers FleetIQ 逻辑](gsg-howitworks-logic.md)
+ [关键资源和组件](gsg-howitworks-resources.md)

# Amazon GameLift Servers FleetIQ 逻辑
<a name="gsg-howitworks-logic"></a>

下图说明了 Amazon GameLift Servers FleetIQ 在与 Amazon EC2 配合进行游戏托管时的角色。它的主要目标是找到尽可能*好的*游戏服务器来托管游戏会话，并为玩家提供最佳的游戏体验。 Amazon GameLift ServersFleetIQ将*最佳*资源定义为那些以最低成本提供最高游戏托管可行性的资源。 Amazon GameLift ServersFleetIQ通过两种关键方式实现这一目标：第一，在 Auto Scaling 组中仅允许可行的实例类型，其次是在该组的可用资源中有效地放置新的游戏会话。

![\[Amazon GameLift Servers FleetIQ 与 Amazon EC2 配合使用\]](http://docs.aws.amazon.com/zh_cn/gameliftservers/latest/fleetiqguide/images/gsg-howitworks-logic.png)


## 使用最佳实例类型填充自动扩缩组
<a name="gsg-howitworks-logic-rebalancing"></a>

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

Amazon GameLift ServersFleetIQ影响 Auto Scaling 组如何通过以下方式选择最佳实例类型：
+ **它决定竞价型 and/or 按需实例的使用情况。**Amazon GameLift ServersFleetIQ游戏服务器组配置了平衡策略，这会影响 Auto Scaling 组使用竞价型和/或按需实例的方式。竞价型实例由于可用性波动和潜在[中断](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html)，可以具备较低的成本。Amazon GameLift Servers FleetIQ 最大限度地减少了游戏服务器托管的这些限制。按需型实例成本更高昂，但在您需要时可提供更可靠的可用性。
+ **它限制新实例只能在可行的实例类型上启动。**Amazon GameLift Servers FleetIQ 游戏服务器组维护着所需实例类型的主列表。实例平衡过程使用预测算法，持续评估列表中每种所需的实例类型，以确定游戏托管的可行性，该算法会查看实例类型的最新可用性和中断率。评估后，会Amazon GameLift ServersFleetIQ不断更新 Auto Scaling 组的所需实例类型列表，使其仅包括当前可行的实例类型。
+ **它会标记不可行的实例类型的现有实例。** Amazon GameLift ServersFleetIQ标识 Auto Scaling 组中当前不可行的实例类型的现有实例。这些实例标记为*耗尽*，这意味着将终止这些实例并使用新实例替换。对于已启用游戏服务器保护的实例，终止将推迟到任何活动的游戏会话正常结束。

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

## 有效地放置游戏会话
<a name="gsg-howitworks-logic-fleetiq"></a>

Amazon GameLift Servers FleetIQ 跟踪游戏服务器组中所有活动的游戏服务器，并使用此信息来确定如何最好地放置新游戏会话和玩家。

要启用 Amazon GameLift Servers FleetIQ 跟踪游戏服务器，您的游戏服务器软件必须报告其状态。您的自定义 AMI 控制在每个实例上启动和停止新游戏服务器进程的方式。当新的游戏服务器启动时，它会注册到 Amazon GameLift Servers FleetIQ，表示已准备好托管游戏会话。在注册后，游戏服务器定期报告其运行状况以及当前是否托管游戏会话。当游戏服务器关闭时，它会取消注册 Amazon GameLift Servers FleetIQ。

要启动新的游戏会话，您的游戏客户端（或配对器或其他客户端服务）会向 Amazon GameLift Servers FleetIQ 发送游戏服务器请求。Amazon GameLift Servers FleetIQ 找到一个可用的游戏服务器，为新的游戏会话认领该服务器，并使用游戏服务器 ID 和连接信息进行响应。然后，游戏会提示游戏服务器更新其状态，并为进入的玩家启动新的游戏会话。

选择游戏服务器来托管新的游戏会话时，Amazon GameLift Servers FleetIQ 使用以下决策过程以通过可行的低成本竞价型实例优化放置：

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

1. Amazon GameLift Servers FleetIQ 忽略标记为*耗尽*的实例，即不适用于游戏托管。这些实例仅为持现有的游戏会话而保持运行。除非没有其他游戏服务器可用，否则它们不能用于新的游戏会话。

1. Amazon GameLift Servers FleetIQ 确定在可行的实例上运行的所有可用游戏服务器。

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

# 关键资源和组件
<a name="gsg-howitworks-resources"></a>

在使用设置游戏托管资源之前，请在您的 AWS 账户中创建以下资源Amazon GameLift ServersFleetIQ。作为最佳做法，在通过游戏服务器组使用这些资源之前，使用这些资源开发和测试游戏服务器部署。
+ **亚马逊机器映像（AMI）。**AMI 是您希望随 Amazon EC2 实例一起启动的特定软件配置的模板。对于游戏托管，AMI 包括操作系统、游戏服务器二进制文件或容器，以及游戏服务器所需的其他运行时软件。有关创建 AMI 的更多信息，请参阅 [Amazon EC2 用户指南中的亚马逊系统映像](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)。 AMIs 是特定于区域的。您可以按照 *Amazon EC2 用户指南*中的[复制 AMIs中所述，将 AMI 从一个区域复制到](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html)另一个区域。
+ **Amazon EC2 启动模板。**启动模板提供了在自动扩缩组中启动和管理实例的说明。它指定 AMI，提供合适的实例类型列表，设置网络、安全性和其他属性。有关创建启动模板的更多信息，请参阅《Amazon EC2 用户指南》**中的[从启动模板启动实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)。启动模板特定于区域。
+ **AWS IAM 角色**。IAM 角色定义了一组权限，允许对 AWS 资源进行有限的访问。可信实体（例如其他 AWS 服务）可以担任该角色并继承其权限。使用时 Amazon GameLift ServersFleetIQ，您必须为一个 IAM 角色提供托管策略，该策略Amazon GameLift ServersFleetIQ允许在您的 AWS 账户中创建和访问 Auto Scaling 组和 EC2 实例资源。IAM 角色不是特定于区域的。

Amazon GameLift Servers FleetIQ 直接管理以下资源，并对其拥有直接权限。
+ **Amazon GameLift Servers 游戏服务器组。**游戏服务器组包含配置设置，这些设置定义了如何Amazon GameLift ServersFleetIQ与相应的 Auto Scaling 组配合使用以提供低成本的游戏托管。游戏服务器组是特定于区域的。当您在某个区域中创建游戏服务器组时，系统会在同一区域的 AWS 账户中自动创建一个新的 Auto Scaling 组。游戏服务器组与 Auto Scaling 组关联，并且有权（通过担任 IAM 角色）管理和修改其部分设置。游戏服务器组是一个长寿命的资源；开发人员应预期很少创建它们。游戏服务器组也是托管在自动扩缩组中的实例上并注册到 Amazon GameLift Servers FleetIQ 的游戏服务器的功能分组资源。
+ **Amazon GameLift Servers 游戏服务器。**游戏服务器资源表示正在与 Amazon GameLift Servers FleetIQ 游戏服务器组关联的实例上运行的游戏执行。当游戏服务器注册 Amazon GameLift Servers FleetIQ 并标识它所属的游戏服务器组时，会创建此资源。Amazon GameLift Servers FleetIQ 跟踪每个已注册游戏服务器的利用状态和认领状态，这使其能够监控游戏服务器的可用性。游戏服务器特定于区域，因为它们与特定于区域的游戏服务器组相关联。当您的游戏请求新的游戏服务器时，它会指定游戏服务器组和区域。

这些资源是通过 Amazon GameLift Servers FleetIQ 资源创建的。它们在您的 AWS 账户中创建，您对它们具有完全控制权限。
+ **Amazon EC2 自动扩缩组。**Auto Scaling 组启动和管理 EC2 实例集合，并自动扩展组容量。使用 Amazon GameLift ServersFleetIQ，游戏服务器组和 Auto Scaling 组之间存在 one-to-one关系。虽然您可以更新自动扩缩组的所有设置，但 Amazon GameLift Servers FleetIQ 作为其逻辑的一部分定期覆盖和更新某些设置，以平衡竞价型实例来实现游戏托管可行性。有关更多信息，请参阅 [ AutoScalingGroup](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroup.html)*Amazon EC2 Auto Scaling 用户指南*。Auto Scaling 组是特定于区域的；它们创建在与游戏服务器组相同的区域中。
+ **Amazon EC2 实例。**实例是云中的虚拟服务器。实例类型具有指定计算、内存、磁盘和网络资源的特定硬件配置。它们通常由具有 AMI 的自动扩缩组启动。实例可以是 Spot 或按需实例，具体取决于可用性。通过使用 Amazon GameLift Servers FleetIQ，实例可以运行一个或多个游戏服务器进程，每个进程都可以托管多个游戏会话。实例特定于区域，因为它们与特定于区域的自动扩缩组相关联。