Amazon GameTech 结构良好的实践系列 —— MOBA/FPS架构文章

2023-11-21

随着对决类网游愈来愈热门,大家处理方案架构师团队也汇总从业经验,上线了这套AmazonGameTech结构良好的实践系列,MOBA/FPS架构篇章今天给大家带来:

FPS/MOBA 结构由大厅及周边组件及作战环境组成。实际架构如图所示:

游戏作战之外的大部分功能,包括购物中心系统,都属于延迟不敏感的操作。一般来说,由于大厅是核心服务,因此会选择延迟可接受的部分进行多个可用区域的部署,建议对程序模块进行模块化和解耦解决,并使用Autoscaling Group进行弹伸缩,尽量保持核心服务的无状态化,并将缓存存储在Elasticache中。
在数据库方面,建议使用适用团本弹伸缩功能的Aurora mysql 以及非关系高能数据库 DynamoDB,Elastiti可以借助 cache提高了数据库的读取压力。

大部分FPS//MOBA 游戏属于延迟要求很高的游戏分类,所以大部分作战环境的部署必须就近与玩家相连,必须在世界多个地区部署。

大部分FPS//MOBA 游戏属于延迟要求很高的游戏分类,所以大部分作战环境的部署必须就近与玩家相连,必须安排在世界多个地区。Gamelift可以实现匹配逻辑和作战环境的弹性伸缩。


Amazon GameTech 结构良好的实践系列 —— MOBA/FPS架构文章

大厅及周边服务一般无情况,服务相对较轻,Graviton2可根据arm架构选择(m6g)或intel架构型号(m6i)

大多数FPS游戏在战斗环境中会选择帧同步和DR状态同步的组合通信系统,对内存的要求会比较高,最好使用m6g或m6i,选择还需要注意编程语言,如果Graviton2适合Graviton2,如果采用C 在其他语言中,或者建议选择intel架构的型号,目前新版本的编译器也可以适用于arm架构的Graviton2型号。

大厅及周边服务一般无情况,服务相对较轻,Graviton2(m6)可根据arm架构选择g)或intel架构型号(m6i)

大多数MOBA游戏在战斗环境中都会选择帧同步通信系统,在同步帧中需要大量的CPU和网络吞吐,如果Graviton2适用于Graviton2,则最好使用C6g或C5。如果使用C6g或C5,则还需要注意编程语言。 在其他语言中,或者建议选择intel架构的型号,目前新版本的编译器也可以适用于arm架构的Graviton2型号。可根据作战环境的实际系统选择竞技游戏。可根据作战环境的实际系统选择竞技游戏。

FPS/MOBA游戏,由于配对动作游戏属于,操作环境往往与数据库无交互,主要是与数据交互的组件或大厅、注册、登录、充值等业务模块。根据业务类型,注册、登录和充值系统更适合应用关系数据库,因为它属于强关系和事务所有权。最好使用Aurora MySQL提供弹伸缩和更高的读写能力。大厅角色数据关系弱,信息量大。有大量适合key-value的数据库,通常需要强烈的一致性。最好使用amazon 用DynamoDB。而且考虑到减轻整体数据库的压力,可以使用Elasticachee, for Redis分享同样的数据读取压力。如果有些数据需要持续化,也可以使用Amazon MemoryDB for Elasticachech取代Elasticachedis for Redis。

Aurora for MySQL是亚马逊云技术自主研发的新一代完全适合Mysql语法的关系数据库,实际原理如图所示:

    Aurora for MySQL的优点:

  • 专为数据库设计的日志结构分布式存储系统

  • 存储卷跨分布在 3 数百个不同可用区域的存储节点

  • 六份数据,每个可用区两个,避免可用区 1等级的故障


  • 离散IO,减少短板,给予同规格的MySQL RDS 5-10倍吞吐能

读团本弹伸缩,还支持多写案例,而且在写案例中出现问题会主动提高只读案例作为写实例,一般关系数据库载入点射风险处理

RPO( Recovery Point Objective,数据修复点的目标是0,RTO只有几分钟( Recovery Time Objective ,恢复时间目标)


    Amazon DynamoDB是亚马逊云技术自主研发的适用key-value方法的nosql数据库,可以对读写容量进行弹扩缩,并支持流日志进行审计和回滚。使用primary key和sort keyhash进行数据分片和查询数据搜索。

    FPS/MOBA适合DynamoDB的技术场景:

  1. 从数据库中读取每个玩家的数据(Key-ValueGet)

  2. 从数据库中读取玩家拥有的设备和属(SortKeyQuery)

  3. 对决(纯内存操作)

决斗结束后,结论升级到角色数据库(KeyValueUpdate)

    DynamoDB的优点:

  • 同时支持强一致性和最终一致性

  • 基于primary和sort key的读写弹扩缩容,并支持按需方式面对激增的读写要求模型

  • 其他毫秒读写和0客户运维压力

客户审计必须采用流日志记录方式,还支持持持续备份(PITR)及其按需备份

Amazon Elasticache for Redis是亚马逊云技术与Redis协议完全兼容的内存缓存,支持pub/sub达到序列。Elasticache for Redis 有两种模式(集群模式,主备模式)。Elasticache for Redis 有两种模式(集群模式,主备模式)。在FPS/MOBA场景中,它主要用于共享和存储数据库读取缓存、大厅消息队列及其计算过程中的状态数据。MemoryDB可用于对SLA要求较高的数据进行持久存储。

    优点:

  • 多可用区域布局及容灾及其跨区域,并支持快照计划

  • 单独集群适用于超过250个节点和超过170TB的存储空间,还支持每秒5000万的阅读,也支持最新的Gravinton2案例,给予更高的能量

  • 水平扩展和重新平衡适用于集群模式,所有方法也支持垂直扩展

  • MemoryDB还支持数据落盘和持久性

单独集群适用于超过250个节点、超过170TB的存储空间、每秒5000万的阅读和最新的Gravinton2案例,给予更高能


    FPS/MOBA游戏一般分为大厅服和战斗服,玩家在进入战斗前后都停留在大厅服,玩家可以在大厅服中查看自己角色的信息,和朋友聊天,在线,查询战斗回访视频,进入商场购买最喜欢的道具和皮肤,查看他们的战斗状况列表,与其他玩家打开游戏决斗等。

    大厅服装包括大厅、信息通道、聊天、排名榜、配对、商场等程序模块,以支持玩家所需的各种功能。

  • 大厅主要用于承载玩家的联系,获得玩家角色状态信息

  • 聊天用于玩家之间的语音交流

  • 排名列表用于显示每个玩家的排名

  • 玩家和玩家团队之间的匹配

新闻中心是大厅和其他程序模块之间通信的中间桥

亚马逊云技术推荐部署架构

  • Amazonn可用于消息队列 Elasticache pub/sub的作用

  • Amazondis应用Amardis应用程序 Elasticache 或者MemoryDBB

  • Amazonn可以使用配对服务 Gamelift Flexmatch

  • DynamoDB可用于非关系数据库,DocumentDB

建议使用Aurorara MySQL

大厅服装中的大厅、配对、排名榜、闲聊、商场等模块都可以设计成无状态,因此可以借助AWS的弹性伸缩作用,对CPU来说、监控内存或业务指标,在业务高峰期自动扩展更多EC2,以承载玩家流量。随着业务的逐渐下降,一些服务器自动退出以降低成本。随着业务的逐渐下降,一些服务器将自动退出以降低成本。当服务器出现故障时,弹性伸缩也会自动拉动服务器进行体积填充。

Amazon EC2 Spot 案例让你可以使用 AWS 云中未使用的 EC2 容积。与按需案例的价格相比,应用程序 Spot 最大限度地享受案例 90% 的折扣。同样,Spot案例类型可以用于大厅、排名榜、聊天等模块。当案例有被回收的风险时,会发出警告,让业务有足够的时间转换为更多的案例类型。当案件确定要回收时,报警将在2分钟内发出,业务可以利用这段时间优雅地停止接收流量。

    容器化部署的好处

    • 管理简便
  • 许多容器可以根据容器编排工具轻松管理,快速分发,完成秒级开服;

    • 资源隔离
    • Amazon GameTech 结构良好的实践系列 —— MOBA/FPS架构文章

  • 每个容器资源都可以独立规划和配备,确保不相互影响;

    • 高度弹
  • 集成监控工具和容器布置工具,可实现全自动容器的分发和回收,快速弹伸缩资源;

    • 研运一体
  • 融合 CI/CD 一个版本是一个容器镜像,完成研发和运维的集成和自动化,开发、检测、包装、布局一气呵成,促进R&D与运维紧密合作,大大提高效率,快速迭代游戏;

游戏战斗听从以前的网状对等网络模式(P2P,peer to peer)到目前为止,专用服务器已经发展成为主要方式(Dedicate Servers),帮助我们提高玩家的游戏体验,处理网络对决游戏的稳定性和连接问题。

并且,DedicateServer  方式,操作同步可以放在服务端,这样可以特别好地处理游戏插件和作弊的问题。

并且,DedicateServer  方式,操作同步可以放在服务端,这样可以特别好地处理游戏插件和作弊的问题。

Amazon GameLift 运用 AWS 管理游戏服务器的全球基础设施。将玩家匹配到游戏对话中可以自动扩展(即同时启动一个、数百个甚至数千个案例),而无需考虑如何根据玩家的实际需求进行扩展。


在开发游戏时,gamelift可以集成,后端服务器管理基本上不需要花费太多精力,服务器资源管理和弹出扩展可以很容易地克服两个问题。




理想的Matchmaking技巧每个人都需要一个很好的游戏配对感觉,那就是游戏平衡和等待时间; 对于理想的战斗体验,我们应该扩展服务器和较低的延迟。

这部分我们通过Lambdada DynamoDB形成对决配对ticket传输到序列服务SQS,然后开发者可以使用上述大厅服务ECS/EKS 从SQS中获得player对决序列的服务部署自己的匹配程序。


Amazon GameTech 结构良好的实践系列 —— MOBA/FPS架构文章

在讨论了一场游戏后,我们可以要求Gamelift进行分配对决session,Gamelift 根据最佳思路,将配对服务的IP和端口分配给最佳,我们将session信息和players信息返回到游戏客户端,玩家可以用客户端连接到Gamelift进行战服游戏。在这个过程中,Gamelift将始终测试对决session。

在游戏对战中,我们经常收集一些对战数据和服务器log进行分析和监督。如下图所示,我们可以使用APIGWog作为客户端log Lambda Elasticsearch是以http的形式收集的。我们通过在服务器镜像中添加日志收集工具、Fluentd或服务器logFluent Bit等。如下图所示,我们可以使用客户端logAPIGW Lambda Elasticsearch是以http的形式收集的。我们通过在服务器镜像中添加日志收集工具、Fluentd或服务器logFluent Bit等。以下数据分析部分将在准实时和非实时动态收集和分析方面进行更多介绍。

游戏对决完成后,Amazon Gamelift 游戏程序可以回收或删除session过程。游戏完成后,我们可以以http的形式将决斗结论返回数据库,然后在大厅服务后在游戏结算界面上宣传每个人的排名和奖励。

从那时起,我们完全实现了一场比赛的整个过程。从大厅到战斗,我们可以通过亚马逊云技术的各种服务快速开发和部署,帮助开发者专注于制作游戏本身。

标签: 架构   系列   游戏   数据库