本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
基于无服务器的游戏后端架构
许多游戏开发者不想管理基础架构,而是更喜欢使用允许他们专注于软件的技术来开发游戏。在这种情况下,建议使用无服务器架构,因为它允许您更快地构建和发布功能,同时减少运营开销。无服务器架构是使用云服务设计的,这些服务可以根据需求动态扩展,而无需设置、管理和扩展服务器。以下参考架构说明了如何使用无服务器架构构建游戏。
基于无服务器的游戏后端参考架构
此参考架构说明了一款基于网络的问答游戏,该游戏提供单人游戏和多人游戏功能。
-
玩家身份验证:玩家使用 Amazon Cognito 进行身份验证,Amazon Cognito 提供安全的身份验证以及用于玩家身份管理的用户目录。
-
游戏逻辑作为无服务器函数:游戏功能和后端业务逻辑作为响应事件而启动的 AWS Lambda 函数运行,这可以降低成本,因为只有在函数运行时才需要付费。Lambda 使您能够灵活地使用自己选择的编程语言将每个游戏功能编写为单独的微服务。例如,如果您有使用 C# 构建 Unity 游戏的经验,则可以选择开发.NET Lambda 函数;或者如果您想在两者中为基于 Web 的游戏编写前端和后端,则可以选择开发 Node.js Lambda 函数。 JavaScript
-
用于存储游戏和玩家数据的 NoSQL 数据存储:使用 DynamoDB 存储玩家和游戏数据,因为它是专门为存储来自微服务的大量数据而设计的。如该架构所示,最佳做法是使用单独的数据存储来满足每个游戏功能的数据存储需求,这样您就可以直接独立监控和管理这些功能。如果您的团队中的功能或服务所有权发生变化,这也会造成分离界限。在此参考架构中,DynamoDB 表用于存储连接状态、游戏详情、玩家进度和排行榜信息等数据。
-
单人游戏玩法:单人游戏功能允许玩家执行诸如选择和玩游戏以及查看排行榜之类的操作。这些功能是作为 RESTful 后端服务实现的,由 Amazon API Gateway HTTP API 托管,该API调用相应的 Lambda 函数来获取和设置 DynamoDB 表中的数据。游戏完成后,后端还会向 Amazon SNS 主题发送通知,这些主题会异步启动 Lambda 函数以存储玩家的进度和统计信息。
-
多人游戏玩法:多人游戏功能要求玩家能够与游戏互动以进行交 point-to-point流,以及广播和接收来自其他联网玩家的更新。 WebSockets 实现适合在轻量级游戏(例如琐事)中进行 point-to-point交流。玩家可以建立 WebSockets 与 Amazon API Gateway 的连接 WebSockets,Amazon API Gateway 负责管理连接,并且只有在有消息可供玩家发送或接收时才调用 Lambda 函数。对于需要在玩家之间进行 one-to-many通信的用例, AWS IoT Core 支持 WebSockets 通过 MQTT 进行消息传递,允许客户端订阅主题并根据收到的消息进行操作。在此架构中,ov WebSockets er MQTT 用于支持使用案例,例如直播游戏内直播更新和向联网玩家提问。作为替代方案 AWS IoT,您可以选择 Redis Pub/Sub 进行消息传送,或者如果您需要保留消息,则可以选择 Redis Streams。
-
使用支持 VPC 的 Lambda 函数访问私有子网中的资源:配置支持 VPC 的 Lambda 函数以访问您的 VPC 私有子网中的资源,例如 Amazon,它用于缩短实时排行榜 ElastiCache等低延迟数据集的查询时间。
有关更多信息,请参阅自定义游戏后端托管指南 AWS