亚马逊AWS官方博客

Amazon GameLift 从入门到精通(一)核心组件详解

早在 2016 年,亚马逊云科技面向全球游戏开发者推出了 Amazon GameLift。Amazon GameLift 作为专为游戏行业打造的托管服务,为游戏开发者提供了一站式的多人游戏服务器托管解决方案,不仅简化了复杂的服务器部署和扩展过程,还通过智能匹配和灵活的扩缩容能力,大幅提升了玩家体验和运营效率。对于追求在线多人游戏的高性能、低延迟的游戏开发团队来说,GameLift 无疑是一个强大的助手,使得开发者能够专注于游戏本身的创新,而不必过多操心基础设施的管理。更重要的是,它的按需付费模式和全球化部署能力,为游戏公司提供了前所未有的成本效益和市场拓展机会,使得无论大小的游戏工作室都能够在竞争激烈的游戏市场中脱颖而出。

在近几年中,GameLift 不断推出新的产品功能和特性。2020 年,FlexMatch 引入了玩家匹配系统,并支持复杂的规则匹配和算法,使得开发者可以自定义多人对战匹配逻辑;2021 年,FleetIQ 的推出优化了服务器的分配策略,大大提升了资源利用率;2022 年,多区域 Fleet 极大简化了全球范围内的游戏服务器管理和部署,使得开发者可以更容易地为全球玩家提供低延迟游戏体验;2024 年,GameLift 支持容器化;在 2025 年的 GDC,Amazon GameLift 推出 GameLift Stream,利用亚马逊云科技覆盖区域和 GPU 资源,使得游戏开发者在几分钟内即可部署玩云游戏环境,将游戏流式传输到任何装有浏览器的设备。

从本期 Blog 开始,我们将陆续为大家介绍 Amazon GameLift 这一产品及其使用方法和技巧。在这篇博客中,我们将探索 GameLift 的架构及其六个核心组件,它们协同工作,为您的多人游戏创建灵活、可扩展的基础。无论您是在优化现有架构还是从零设计游戏后端,了解这些组件都将帮助您有效地利用 GameLift。

GameLift 架构:六大核心组件

Amazon GameLift 的架构由六个主要组件组成:

它们就像积木一样,允许您构建各种复杂度的游戏服务器架构,下面我们将详细了解每个组件。

1. Build – 游戏服务器的“代码包”

GameLift 的基础是 Build 组件。Build 本质上由一个“代码包”和 Meta 信息组成,囊括了游戏服务器运行所需的全部资源。

Build 的核心内容包括:

1. 游戏服务器“代码包”,“代码包”的文件结构如下:

  • 游戏服务器代码可执行的二进制文件,注意要与选择的操作系统有关系。
  • 依赖库,游戏代码的依赖库。
  • 安装脚本,注意:名字是固定的。Linux 为 install.sh,window 为 install.bat。

2.元数据:

  • 游戏代码包名字
  • 游戏代码包版本号
  • 运行操作系统要求
  • GameLift SDK 版本

如何创建一个 Build 呢?

  1. 首先,按照规定的文件结构组织游戏服务器代码及其依赖资源,将其打包为 ZIP 格式,并上传至 Amazon S3 存储桶。
  2. 随后,通过 AWS 命令行界面(CLI)或 Amazon GameLift 控制台,指定代码包的 S3 存储路径以及必要的元数据信息,完成 Build 的创建。

作为游戏开发者,您只需将游戏服务器代码打包,创建 Build。当 Fleet 实例成功启动后,GameLift 基础设施将自动部署所关联的 Build 内容,并按照预设配置元信息初始化游戏服务器进程,从而构建完整的服务端运行环境。

2. Fleet – 服务器的“弹性资源池”

Build 虽然承载了游戏服务器的完整代码包,但它本身仅是静态资源集合。Fleet 则代表了实际的运行时基础设施——由多台配置一致的 EC2 实例组成的计算资源池,负责将静态代码转化为可访问的游戏服务。在 GameLift 架构中,Fleet 通过引用并部署指定的 Build,实现了代码发布与运行。

创建 GameLift Fleet 时,您需要指定五项核心配置:选择创建的 Build、确定 EC2 实例类型与数量、设置目标部署区域、配置游戏服务器运行参数,以及定义每个实例上游戏会话的并发数量与激活频率限制。

Fleet 的关键能力包括:

  • 自动扩缩容:Fleet 可以根据并发玩家数量自动调整实例数量,确保您的游戏在高峰时段有足够的容量,同时避免在较为平静的时段产生不必要的成本。
  • 成本优化:GameLift Fleet 支持混合部署 Spot 和 On-Demand 实例。通过将适当的工作负载交给成本更低的 Spot 实例处理,您可以显著降低基础设施费用,同时不影响游戏体验。

Amazon GameLift 借助 CloudWatch 指标系统实现对 Fleet 的全方位监控,为运维团队提供关键性能参数的实时可视化,包括活跃游戏会话数量、可用服务器进程状态以及玩家连接数核心指标。当这些监控指标达到预设阈值时,系统将自动触发资源扩缩容机制,从而精确应对玩家流量的动态波动,确保服务质量与资源利用率之间的最优平衡。

当我们 Build 的运行环境 Fleet 有了之后,就可以通过 Queue 的队列方式实现玩家的智能调度,也就是通过 Queue 把玩家放到适合的 fleet 上面。

3. Queue – 玩家的“智能调度器”

GameLift Queue 组件处理将玩家智能分配到可用游戏会话的关键任务。

使用复杂的 FleetIQ 算法,Queue 基于延迟、地理位置,成本优先等规则来去设置策略,为每个游戏会话寻找最佳放置位置,比如:

  • 延迟优化:引导玩家到其地理位置延迟最低的服务器
  • 成本优先:在可用时优先选择更具成本效益的 Spot 实例

通过 Queue 实现智能分配策略,您可以通过减少延迟来改善玩家体验,同时优化基础设施成本。

4. Alias – 服务器的“虚拟门牌号”

Alias 组件作为 Fleet 的抽象层,功能类似于游戏服务器的域名。Alias 允许您:

  • 在代码中通过单一标识符引用一个 Fleet
  • 实现蓝绿部署,实现无缝版本更新
  • 在不更改代码的情况下切换 Fleet 之间的流量

例如,当发布新版游戏时,您可以:

  1. 创建一个运行更新后游戏服务器 Build 的新 FleetB
  2. 使用小比例流量测试新 FleetB
  3. 逐步将 Alias 路由从旧 FleetA 切换到新 FleetB
  4. 一旦确认稳定性,完全过渡到新 FleetB

这种方法在部署过程中最小化风险,并在必要时实现快速回滚,同时不会中断玩家体验。

5. FlexMatch – 匹配逻辑的“自由画布”

从架构角度,FlexMatch 作为一个独立服务至关重要的组件,在 GameLift 生态中扮演着”玩家体验守门人”的角色。

这个独立的服务基于以 JSON 格式定义的配置逻辑以处理玩家匹配。使用 FlexMatch,您可以,在多个维度(技能水平、角色偏好等)创建匹配逻辑。

如图所示,FlexMatch 支持多种玩家属性的匹配:

  • 技能水平(skill):数值型,用于平衡对战
  • 游戏模式(mode):字符串型,如 ranked、casual、ranked-huttball 等
  • 地区(region):字符串列表,如 eu-west-1、ap-south-1 等

一旦 FlexMatch 创建匹配,它可以通过 GameLift Queue 请求游戏会话分配,或将匹配结果发送到 Amazon SNS 供下游服务使用。

6. Clients – 玩家的“接入桥梁

GameLift Clients: SDK 是连接玩家与游戏服务器的关键技术桥梁,在 GameLift 架构中扮演着前端接入层的角色。它将玩家设备与云端基础设施无缝对接,使复杂的后端服务编排变得透明,让开发者可以专注于游戏体验而非基础设施管理。SDK 一共分两种类型:

  • Backend SDK
    • 指与平台服集成的 GameLiftClient SDK,可以理解为 Amazon SDK,支持多种语言
    • 能够处理匹配请求、游戏会话分配和玩家连接,提供与 GameLift 服务通信的能力
  • Server SDK
    • 集成于游戏服务器进程,也就一般常说的游戏服、战斗服
    • 可以实现服务器生命周期管理和会话控制
    • 与 GameLift 服务通信以报告状态和接收指令
    • 目前支持 C++,C#,GO

整体工作流程

Amazon GameLift 的真正威力在于这六个组件协同工作时得到体现。从游戏代码(Build)到服务器基础设施(Fleet),从智能调度(Queue)到无缝过渡(Alias),再到玩家匹配(FlexMatch)和连接管理(SDK),GameLift 为整个游戏服务器生命周期提供了全面的解决方案。

让我们可视化一个典型的工作流:

如图所示的整体架构展示了现代游戏服务的完整解决方案,结合了平台服务与Amazon GameLift的能力。主要由两部分组成:

  • 平台服务:通常基于 EKS 或 ECS 容器技术部署,负责玩家账户、数据持久化和游戏外功能
  • 游戏服务:利用 Amazon GameLift 全家桶提供的匹配和会话管理功能,负责实际游戏体验

以玩家完整的游戏体验为例,整个流程如下:

1. 玩家发起匹配请求

  1. 玩家通过客户端(iOS/Switch/Android)首先连接到平台服的登录服务进行验证
  2. 调整完装备后,玩家需要战斗,这时候会连接到平台服,发起匹配请求

2. 平台服与 FlexMatch 交互

  1. 平台服转发匹配请求到 FlexMatch ,FlexMatch 根据您定义的规则集处理请求

3. FlexMatch 将匹配状态通知到平台服

  1. 匹配状态通过 Amazon SNS 实时通知平台服务

4. 游戏服的放置

  1. 平台服通过调用 GameServer,GameServer 通过调用 GameLift Queue 确定最佳服务器位置,queue 可以通过 alias,把房间放到 Fleet 里面
  2. GameLift 分配适当的服务器资源并初始化游戏会话

5. 创建会话

  1. GameServer 返回 session 结果给平台服
  2. 平台服务把 Session 信息返回给客户端
  3. 客户端通过 IP 和端口信息,直接连接到 GameLift 游戏服务器,开始游戏

总结

了解 Amazon GameLift 的六个核心组件为您提供了构建复杂、经济高效且响应迅速的多人游戏架构的基础。就像乐高大师一样,您可以以各种方式组合这些组件,以满足游戏的特定需求。

通过利用 GameLift 的托管服务能力,您可以大幅降低运行多人游戏服务器的运营负担,同时确保您的玩家在全球范围内享受低延迟、可靠的游戏体验。

相关链接

  1. 《Amazon GameLift 释放游戏开发潜能》第一期:https://www.bilibili.com/video/BV1wHXCYAEva?spm_id_from=333.788.player.switch&vd_source=ec5a04811fcfa229ba607d3c1ba38cec
  2. 《Amazon GameLift 释放游戏开发潜能》第二期:https://www.bilibili.com/video/BV1YKZ2YBEAA?spm_id_from=333.788.videopod.sections&vd_source=ec5a04811fcfa229ba607d3c1ba38cec
  3. GameLift 官方文档:https://docs.aws.amazon.com/gamelift/

本篇作者

张振华

亚马逊云科技解决方案架构师,负责基于亚马逊云科技的云计算方案的架构和设计,在 Edge、Serverless 等方向具有丰富的实践经验。目前专注于游戏行业。

胡金东

亚马逊云科技解决方案架构师,目前专注于游戏行业。在加入亚马逊云科技之前,曾在德勤担任 Manager,作为项目经理和解决方案架构师,参与了多个大型数据湖和数据仓库项目的项目管理、架构设计和实施工作。