

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

# Serverless-based 游戏后端架构
<a name="serverless-based-game-backend-architecture"></a>

 许多游戏开发者不想管理基础架构，而是倾向于使用允许他们专注于软件的技术来构建游戏。在这种情况下，建议使用无服务器架构，因为它允许您更快地构建和发布功能，同时减少运营开销。无服务器架构使用云服务进行设计，这些服务可以根据需求动态扩展，无需设置、管理和扩展服务器。以下参考架构说明了如何使用无服务器架构构建游戏。

![Serverless-based 游戏后端参考架构](http://docs.aws.amazon.com/zh_cn/wellarchitected/latest/games-industry-lens/images/image5.png)


 该参考架构说明了一款提供单人游戏和多人游戏功能的基于 Web 的问答游戏。
+  **玩家身份验证**：玩家使用 Amazon Cognito 进行身份验证，Amazon Cognito 通过用户目录提供安全的身份验证，用于玩家身份管理。
+  **游戏逻辑作为无服务器函数**：游戏功能和后端业务逻辑作为响应事件而启动的 AWS Lambda 函数运行，这可以降低成本，因为您只有在函数运行时才付费。Lambda 使您可以灵活地使用自己选择的编程语言将每个游戏功能编写为单独的微服务。例如，如果您有使用 C\# 构建 Unity 游戏的经验，则可以选择开发.NET Lam Node.js bda 函数，或者如果您想为基于 Web 的游戏编程前端和后端，则可以选择开发 Lambda 函数。 JavaScript
+  **用于存储游戏和玩家数据的 NoSQL 数据存储：**使用 DynamoDB 存储您的玩家和游戏数据，因为它是专门为存储来自微服务的大量数据而构建的。如该架构所示，最佳做法是使用单独的数据存储来满足每个游戏功能的数据存储需求，这使您可以轻松地独立监视和管理这些功能。如果团队内部的功能或服务所有权发生变化，这也会造成分离边界。在此参考架构中，DynamoDB 表用于存储连接状态、游戏详情、玩家进度和排行榜信息等数据。
+  **单人游戏玩法：**单人游戏功能允许玩家执行诸如选择和玩游戏以及查看排行榜之类的操作。这些功能是作为托管的 RESTful 后端服务实现的，托管在亚马逊 API 网关 HTTP API 中，该接口调用相应的 Lambda 函数来在 DynamoDB 表中获取和设置数据。游戏完成后，后端还会向 Amazon SNS 主题发送通知，这些主题异步启动 Lambda 函数以存储玩家的进度和统计数据。
+  **多人游戏玩法：**多人游戏功能要求玩家能够与游戏进行互动以进行点对点通信，以及广播和接收来自其他联网玩家的更新。一种 WebSockets 实现适用于轻量级游戏（例如问答游戏）中的点对点通信。玩家可以建立 WebSockets 与 Amazon API Gateway 的连接 WebSockets，Amazon API Gateway管理连接，并且仅在玩家有消息要发送或接收时才调用 Lambda 函数。对于需要玩家之间进行一对多通信的用例， AWS IoT Core 提供 WebSockets 通过 MQTT 进行消息传递的支持，这允许客户端订阅主题并根据其收到的消息采取行动。在此架构中， WebSocketsover MQTT 用于支持诸如直播游戏内实时更新和向联网玩家提问等用例。作为替代方案 AWS IoT，您可以选择 Redis Pub/Sub 进行消息传输，如果您需要保留消息，则可以选择 Redis Streams。
+  **使用 VPC-enabled Lambda 函数访问私有子网中的资源：**配置 VPC-enabled Lambda 函数以访问您的 VPC 私有子网（例如 Amazon）中的资源 ElastiCache，这用于缩短实时排行榜等低延迟数据集的查询时间。

 有关更多信息，请参阅上的自定义游戏后端托管[指南 AWS](https://aws.amazon.com/solutions/guidance/custom-game-backend-hosting-on-aws/)。