

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

# 定义
<a name="definitions"></a>

 Well AWS -Architected Framework 基于六大支柱：卓越运营、安全性、可靠性、性能效率、成本优化和可持续性。 AWS 提供了多个核心组件，允许您为游戏工作负载设计 state-of-the-art架构。在本节中，我们将概述关键定义。

 就本 paper 而言，游戏架构包括构建和运营游戏所需的后端技术基础架构。有些游戏可能没有社交、多人游戏或其他在线功能，也可能不需要使用本 paper 中描述的后端技术基础设施的某些方面。有关为支持游戏架构而经常部署的不同类型工作负载的详细讨论，请参阅场景。

 AWS 云 基础设施是围绕区域和可用区构建的。
+  *区域*是世界上有多个可用区域的物理位置。
+  *可用区*由一个或多个离散的数据中心组成，每个数据中心都具有冗余电源、网络和连接，位于不同的设施中。

 根据游戏的特点，您可能需要将游戏架构的某些组件部署到多个区域，例如提高玩家的性能，或者根据玩家的位置为他们提供定制的体验。

 有许多不同的游戏类型，支持游戏所需的后端技术基础设施因正在开发的游戏类型而异。例如，流行的游戏类型可能包括第一人称射击游戏 (FPS)、角色扮演游戏 (RPG)、大型多人在线游戏 (MMOG)、大逃杀 (BR)、体育游戏、益智游戏等。还有不同的游戏互动模式会影响游戏的架构，例如回合制和同步游戏，它们具有不同的性能特征。

 游戏是为在一个或多个游戏系统上玩而开发的，包括桌面、网络、移动设备、游戏机和较新的交互模式，例如增强现实 (AR)、虚拟现实 (VR) 和游戏流媒体解决方案。游戏通常支持跨系统玩法，这意味着玩家可以在其他系统上保存游戏进度并恢复游戏玩法，也可以在其他系统上启动与其他系统的玩家的游戏会话。

 电子游戏盈利使游戏发行商能够使用不同的策略来创造收入，例如广告、数字和零售游戏购买、游戏内购买被称为微交易的可下载内容（DLC），以及通过所需的付费订阅才能玩游戏。游戏行业中一些最常见的关键绩效指标 (KPIs) 包括：
+  每日活跃用户 (DAU) 
+  月活跃用户 (MAU) 
+  并发用户 (CCU) 
+  会话持续时间 
+  每次安装成本 (CPI) 
+  玩家生命周期价值 (LTV) 
+  每位用户的平均收入 (ARPU) 

## 游戏系统
<a name="gaming-system"></a>

 视频游戏是为在游戏系统上玩而开发的，该系统提供客户端输入控件、图形、客户端软件（称为游戏客户端）和硬件，在某些情况下还提供系统专有功能来支持游戏玩法。

 游戏系统通常分为以下几类：
+  **游戏机**：专为玩游戏而设计的专用娱乐系统，包括索尼、 PlayStation微软 Xbox 和 Nintendo Switch 等热门示例。游戏机通过在游戏系统提供商制造的主机硬件上安装物理或数字分发的游戏内容来提供玩游戏的能力。在此定义中，控制台可以是手持式或固定式，旨在用于家庭娱乐场景。
+  **个人电脑 (PC)**：使用安装在客户端计算机上的计算机软件玩的游戏，玩家可以对其进行自定义。出于这个原因，电脑游戏因其提供的灵活性和控制力而在玩家中很受欢迎。
+  **网页**：专为使用网络浏览器玩而设计的游戏，其优点通常是让玩家无论使用何种操作系统都能访问游戏。
+  **手机：**专为在手机（通常是智能手机操作系统）上玩而开发的游戏。手机游戏通常从数字应用商店下载并安装到手机上。

 除了前面提到的系统外，还有一些新兴的系统仍然相对较新，并且还在不断增长，与更占主导地位的系统相比，其市场份额要小得多。此类游戏系统的示例包括增强现实、虚拟现实和游戏流媒体，有时也称为云游戏。

 *游戏直播*涉及在云端渲染游戏玩法并流式传输到精简客户端（通常是浏览器）。游戏流媒体允许玩家玩完全远程托管的游戏，通常由游戏流媒体服务提供商在云端托管。在游戏直播中，玩家通过浏览器或云游戏服务提供商（游戏系统）提供的瘦客户端，连接到基于云的游戏。

## 游戏服务器
<a name="game-server"></a>

 游戏服务器是游戏计算基础设施中最重要的方面之一。游戏服务器，有时也称为专用游戏服务器，用于开发多人游戏或需要服务器对游戏事件进行权威处理时。游戏服务器是游戏架构的中心，是核心逻辑的运行位置，包括管理玩家和游戏状态以及管理连接的游戏客户端和游戏服务器之间的交互。游戏服务器通常是游戏架构中对性能最敏感的方面之一，因为它负责处理来自玩家游戏客户端的输入，并将其适当地实时分发给其他连接的玩家。性能不佳的游戏服务器会影响游戏体验的整体性能。因此，您应该优化游戏服务器性能并提供足够的容量，尤其是在游戏启动或游戏高峰期。

 就本文档而言，游戏服务器或游戏服务器实例是指托管一个或多个游戏服务器进程的计算，例如虚拟机。游戏服务器进程代表您的游戏服务器版本中托管游戏会话的单个实例，这是您正在运行的游戏的实例，玩家可以通过玩家会话连接到该实例。出于这个原因，由于游戏会话与托管它的游戏服务器进程之间存在隐含的一对一关系，因此我们经常互换提及游戏服务器进程或游戏会话。在中 AWS，托管游戏服务器有多种计算选项，这些服务器通过弹性资源配置提供对基于云的可扩展容量的访问权限。

 亚马逊 EC2 提供基于云的虚拟服务器（称为实例），支持多个版本的 Linux 和 Windows。您可以创建实例并像其他服务器或虚拟机一样直接管理它们。通常，将多个游戏服务器进程部署到一个实例以提高效率和降低成本。如果您希望最大限 EC2 度地控制计算基础设施，那么Amazon是游戏服务器的不错选择。

 Amazon GameLift 为云端的专用游戏服务器托管提供了完全托管的解决方案，以及其他功能，例如与之配对 GameLift FlexMatch. GameLift在 Amazon 之上提供了一个抽象层， EC2 使游戏服务器管理变得简单，并且在大多数情况下都可用， AWS 区域 因此您可以使用竞价型实例将游戏服务器托管在靠近玩家的地方，从而减少延迟、实现高可用性并显著降低成本。虽然 GameLift 可以集成到现有的游戏后端中，但对于那些不想开发自己的游戏服务器管理和配对解决方案，更喜欢由游戏管理 AWS 并可以随着游戏发展而扩展的解决方案的游戏开发者来说，它特别有用。

 亚马逊弹性容器服务 (Amazon ECS) Amazon ECS 是一项完全托管的容器编排服务，可用于运行基于 Docker 的容器。你也可以使用亚马逊 Elastic Kubernetes Service（亚马逊 EKS）来运行使用 Kubernetes 构建的基于 Docker 的容器。使用容器技术（例如 Amazon ECS 和 Amazon EKS 提供的容器技术）可以有效地将许多游戏服务器进程或其他游戏应用程序实例打包到一个 EC2 实例中，从而帮助您提高计算利用率。

 容器的使用还可以通过使用开发人员在开发期间在本地计算机上使用的相同 Docker 镜像操作运行时来托管应用程序，从而提高开发人员的工作效率。您可以通过使用来进一步减少运营开销 AWS Fargate，这是一种用于运行容器的无服务器计算解决方案，与 Amazon EKS 和 Amazon ECS 兼容。Fargate 最适合您希望在容器中运行游戏服务器而不负责运行容器底层实例的用例。

 您可以使用 AWS Outposts 在数据中心或本地设施中运行 AWS 基础设施和服务，从而使游戏能够在本地环境中运行，并 AWS 使用相同的基础设施来支持混合云采用策略。 AWS Local Zones AWS 区域 是的扩展，它允许你的游戏服务器和其他对延迟敏感的工作负载更接近玩家或开发团队的运行。此外，为了减少游戏服务器的全球网络延迟，您可以使用 Gl AWS obal Accelerator 来提高游戏服务器的玩家流量的性能。

 AWS Lambda 是一种无服务器计算服务，无需预置或管理服务器即可运行代码，这使得它非常适合异步游戏服务器用例，例如回合制游戏或具有轻量级计算需求、代码库较小以及可以使用无状态微服务架构设计游戏功能的异步游戏服务器用例。请务必记住，Lambda 函数以事件驱动、每个请求为基础运行，而不是运行长时间运行的游戏服务器进程。Lambda 提供了本白皮书中选项的最多的运行时抽象，因为开发人员可以随时选择底层应用程序来托管他们的代码。

 在选择游戏服务器托管方法时，请考虑各种要求，包括操作开销、旧代码库、性能要求和规模。 EC2实例和容器是传统代码库的不错选择，因为它们只需最小的更改即可迁移到云端，而且您可以使用 EC2 实例来专用计算实例的资源，而容器可以简化管理和高利用率的实现。Serverless 函数提供了最高级别的抽象，你可以用它来定义只在响应事件时运行的代码，从而降低成本。

## 游戏客户端
<a name="game-client"></a>

 *游戏客户端*代表玩家用于玩游戏的软件和硬件设备。游戏客户端提供软件，用于将玩家的输入转换为消息，然后发送到服务器进行处理，它负责处理来自服务器的传入响应并将图形等输出呈现给玩家。在实时联网的多人游戏中，游戏客户端通常在游戏会话期间与游戏服务器保持持续的网络连接，以减少网络延迟并最大限度地缩短处理时间。但是，游戏客户端也可以使用 REST 与游戏服务器或后端服务进行交互。

## 消息收发
<a name="messaging"></a>

 游戏中通常有三种主要的消息类别：  
+  针对特定用户或群组用户的@@ **玩家参与度消息**，例如游戏邀请或推送通知 
+  玩家之间的@@ **群组消息**，例如游戏内聊天 
+  **S ervice-to-service** 消息，例如用于集成两个或多个应用程序的 JSON 消息 

 发送和接收这些类型消息的常见策略是使用发布者-订阅者和异步处理架构模式。 AWS 提供了多种服务，可以帮助您在游戏中实现消息传递。
+  **亚马逊简单通知服务 (SNS) Simple Notification Service：**用于使用架构模式在发布者和订阅者之间传送消息的托管服务。 pub/sub 发布者使用 API 向 Amazon SNS 发送消息，Amazon SNS 将消息异步传送到订阅应用程序，并且可以直接向支持一些最广泛使用的推送通知服务的移动客户端或台式机发送推送通知。Amazon SNS 可用于向客户发送推送通知以及 service-to-service消息传递用例。
+  **Amazon Simple Queue Service (SQS)**：一种完全托管的队列服务，无论游戏服务器和游戏使用何种编程语言，都可以直接集成游戏服务器和您的游戏。许多游戏任务可以在后台解耦和处理，例如更新排行榜或数据库中的游戏时间值。这种方法是一种有效的方法，可以将游戏的各个部分分开，并将面向玩家的功能与后端处理独立扩展。
+  **适用于 Apache Kafka 的 Apache Managed Streaming (MSK**)：一项完全托管的服务，可使用流行的开源解决方案 Apache Kafka 简化数据流和生产者或消费者应用程序的构建。Kafka 通常用于摄取和处理实时流数据，也可用于发送消息。 service-to-service
+  **亚马逊 ElastiCache （Redis OSS）：**提供完全托管的内存数据存储，其中包括对 Redis 的热门 pub/sub 功能的支持，该功能通常用于开发聊天室应用程序和高性能消息传递。 service-to-serviceRedis 还支持列表和集合等丰富的数据类型，因此开发人员可以使用 Redis 进行高性能队列。
+  **Amazon Pinpoint：**通过电子邮件、短信、语音和推送通知提供用户参与消息。例如，Amazon Pinpoint 可用于向玩家发送用户参与消息，邀请他们重返游戏，并可用于交易用例，例如支持多因素身份验证令牌、订单确认和密码重置电子邮件。

## 直播游戏操作（Live Ops）
<a name="live-game-operations-live-ops"></a>

 *直播游戏运营*（Live Ops）是一种游戏管理和运营风格，它将游戏视为直播服务，并不断提供新功能、更新、促销、游戏内活动以及对已发布游戏的改进，以改善玩家社区的体验。

 传统上，游戏是作为产品而不是服务交付的，新的内容和功能经常被整合到随后的版本或续集中，而不是包含在已发布的产品中。借助 Live Ops 的游戏管理方法，游戏运营团队可以发布游戏并通过实验、促销、游戏内活动和创新来维持一个参与度高的玩家社区，让玩家玩得开心。

 尽管这种方法的好处是可以解锁新的玩家参与策略并提供经常性的收入来源，但它需要更多的运营专业知识。例如，要成功实施Live Ops策略，开发人员可能需要与云服务集成或运营自己的后端技术基础架构。他们还需要一种有效的方法来识别和应对游戏中或玩家社区中出现的、可能对玩家体验产生负面影响的问题。

 ** ** 