本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊 GameLift FleetiQ 逻辑
下图说明了Amazon GameLift FleetiQ在与EC2亚马逊合作托管游戏时所扮演的角色。其主要目标是找到最好 的游戏服务器来托管游戏会话,并为玩家提供最佳的游戏体验。Amazon GameLift FleetiQ将最佳资源定义为那些以最低成本提供最高游戏托管可行性的资源。Amazon GameLift FleetiQ 通过两种关键方式实现这一目标:首先,在 Auto Scaling 组中仅允许可行的实例类型,其次是在该组的可用资源中有效地放置新的游戏会话。
使用最佳实例类型填充自动扩缩组
自动扩缩组的任务是启动新实例并停用旧实例,同时维护托管资源集合并扩展该集合以满足玩家需求。为此,自动扩缩组依赖于您所需的实例类型列表。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 使用以下决策过程通过可行的低成本竞价型实例来优化布局:
-
在可能的情况下,Amazon GameLift FleetiQ 会在已经托管其他游戏会话的实例上放置新的游戏会话。通过打包(但不过载)某些实例并保持其他实例为空闲状态,自动扩缩组能够在不需要空闲实例时快速缩减空闲实例,从而降低托管成本。
-
Amazon GameLift FleetiQ 会忽略那些被标记为耗尽资源(即不适用于游戏托管)的实例。这些实例仅为持现有的游戏会话而保持运行。除非没有其他游戏服务器可用,否则它们不能用于新的游戏会话。
-
Amazon GameLift FleetiQ 可识别在可行实例上运行的所有可用游戏服务器。
您可以为游戏服务器组启用游戏会话保护,以防止自动扩缩组终止具有正在运行游戏会话的实例。