星球大战:猎人如何借Amazon GameLift达到新高度
关键字: [Amazon Web Services re:Invent 2024, 亚马逊云科技, GameLift, Multiplayer Game Requirements, Gamelift Resources Implementation, Matchmaking Rules Adjustment, Multi-Region Fleet Deployment, Launch Day Preparation]
导读
喜欢在遥远的银河系中玩多人竞技场对战游戏吗?了解Zynga如何利用Amazon GameLift来支持工作室首款实时竞技场游戏的全球发布。基于虚幻引擎开发的《星球大战:猎人》于2024年6月4日在14个亚马逊云科技区域全球发布。深入探讨多人游戏的挑战,包括开发流程和基础设施管理。看看如何利用Amazon GameLift实现全球部署、自动扩展和匹配机制,同时最小化成本并最大化开发人员和质量保证团队的生产力。
演讲精华
以下是小编为您整理的本次演讲的精华。
在充满活力的拉斯维加斯市中心,年度亚马逊云科技 re:Invent大会汇聚了来自世界各地的技术爱好者和行业领袖。其中一场备受期待的环节是题为“星球大战:猎人如何借助Amazon GameLift达到新高度”的演讲,承诺揭开多人游戏《星球大战:猎人》成功上线的秘密。
Amazon GameLift产品负责人Christina作为主讲人,身边还有来自Zynga的Natural Motion工作室的《星球大战:猎人》团队成员。Christina直接切入正题,强调对于多人游戏而言,顺利的上线体验至关重要。她生动描绘了玩家们渴望下载期待已久的游戏,却遭遇“无法找到服务器进行匹配”这一可怕的错误信息,这种情况可能会让玩家感到沮丧,甚至放弃游戏。这凸显了在关键时刻,服务器和基础设施团队所肩负的巨大责任。
Christina的话语引起了现场观众的共鸣,他们中的许多人无疑也经历过类似的上线噩梦。然而,她很快给予了希望,介绍了Amazon GameLift作为解决这些上线恐惧的方案。GameLift提供了一套专门为多人游戏开发量身定制的资源和服务,承诺成为全球游戏开发者的救星。
Chris和Steve作为《星球大战:猎人》团队的成员也登台,准备分享他们与GameLift整合的历程。在展示了游戏4v4竞技场战斗玩法的预告片后,Christina深入探讨了多人游戏在服务器层面的核心需求。公平的匹配机制确保将相近水平的玩家匹配在一起,低延迟对于身临其境的游戏体验至关重要,而合理的排队时间也是防止玩家沮丧和流失的关键。
Christina娴熟地向观众解释了匹配过程的复杂性,其中需要将具有相似属性的玩家匹配在一起,然后通过精密的服务器分配算法将他们安排到可用的游戏服务器上。她强调运行多人游戏服务器的独特挑战,服务器必须实时模拟每个客户端发生的一切,需要大量的计算能力。更令人费解的是,Christina透露《星球大战:猎人》是一款多平台游戏,可在iOS、Android、Nintendo Switch上运行,并即将在PC上推出,这进一步凸显了采用像GameLift这样强大且可扩展的解决方案的必要性。
《星球大战:猎人》团队最初的原型包括一个平台服务、一个匹配服务器和一个管理自动扩展组游戏服务器实例的服务器编排器。然而,随着项目的推进,团队意识到这种方法的局限性,并做出了采用GameLift的战略决策,原因包括其全球覆盖、通过Spot实例实现成本优化以及开箱即用的数据驱动匹配能力。
接下来,Christina深入介绍了《星球大战:猎人》团队使用的各种GameLift资源。Flex Match规则集,即定义匹配规则和参数的JSON文件,管理着诸如玩家加入比赛的最长等待时间和匹配玩家之间可接受的技能差异等关键方面。Christina透露,团队实施了部署前的规则验证检查,确保这些规则集在部署前的完整性。
然后,Christina讲到了游戏构建,即编译好的游戏服务器二进制文件、脚本和配置文件的打包部署。这些构建经过精心组装,包括编译Linux服务器二进制文件、添加监控和日志代理以及整合参数化的安装文件以适应不同的部署环境。构建完成后,它们会被归档并上传到Amazon S3,然后在GameLift中注册,标志着游戏服务器之旅的开始。
接下来介绍的是GameLift实例的概念,即负责运行游戏服务器进程的EC2实例。对于《星球大战:猎人》,团队通常在每个实例上运行4到8个游戏服务器,在成本效益和性能之间达到谨慎的平衡。每个实例上服务器太少会导致资源浪费和成本增加,而服务器太多则可能由于CPU争用而导致性能下降,这对于实时多人游戏来说是无法接受的。
为确保最佳性能和可用性,团队在这些实例上运行了一套辅助服务,与游戏服务器并行运行。一个自定义代理监控并将服务器指标报告给Amazon CloudWatch和Prometheus,而一个自定义日志代理则会聚合和发送游戏会话日志到OpenSearch,实现全面的日志分析和故障排查。认识到崩溃报告和分析的重要性,团队开发了一个使用Golang编写的自定义报告代理,可检测核心转储并立即将其发送到S3存储桶和崩溃聚合服务,同时实施了节流逻辑,防止在大规模上线期间大量核心转储淹没系统。
然而,GameLift的真正力量在于其能够根据玩家需求动态扩展资源。Christina介绍了舰队的概念,即一组可根据需求扩大或缩小的实例,具有高度可配置的参数,如扩展规则、实例定价模式(按需或Spot)和实例大小。GameLift舰队的一大亮点是其跨区域能力,允许团队在几分钟内将游戏部署到世界各地的多个亚马逊云科技区域,确保全球玩家获得低延迟的体验。
为确定每个区域的适当舰队配置,团队采用了严格的计算过程。Christina向观众展示了一个假设场景,说明了预期并发玩家数、实例类型以及按需实例和Spot实例之间的期望平衡等因素是如何被仔细考虑的。在这个假设场景中,某个特定区域预计会有16,000名并发玩家,假设每个服务器在空闲状态下容纳8名玩家,那么就需要2,000个游戏服务器。如果每个实例运行4个游戏服务器,那就需要500个实例。然后,团队将这些实例平均分配到c5.large和c6i.large实例类型上,根据他们对风险和成本的考虑,将一部分分配给按需实例,其余的分配给Spot实例。
团队甚至开发了内部工具“舰队规模计算器”,用于简化这一过程,并根据各种Spot实例利用率场景提供成本估算预测。
将这些资源联系在一起的是游戏会话队列,一个组件,它汇总了舰队,并根据延迟或成本优化等策略确定将匹配的玩家放置在哪个服务器上。
尽管技术细节令人印象深刻,但Christina认识到,真正的挑战在于有效管理和监控这些资源。为此,团队构建了一个名为Fleet Deployer的内部工具,这是一个网站和API,它抽象了GameLift资源的复杂性,使工作室的任何人都可以为测试、公测或正式上线而启动部署组。
Fleet Deployer扮演着中心枢纽的角色,将舰队、规则集和配置等资源聚合到一个部署组对象中。该对象被注释了元数据,包括时间相关信息,如预定的扩展和关闭时间,确保资源利用效率和成本管理。例如,团队可以在200人的公测会话开始5分钟前安排扩展,确保实例已准备就绪应对负载。
Fleet Deployer的威力不仅限于资源供应。它还主动监控GameLift,并在部署组准备就绪时通过Slack通知用户。此外,它与平台服务集成,实现了游戏基础设施不同组件之间的无缝通信和协调。Fleet Deployer的一大亮点是,它能够在预定时间段内没有任何玩家(如24小时无玩家)后自动缩减资源,这在团队开发周期的高峰期(每天有20到30个构建在测试)为他们带来了福音。
作为在Amazon Elastic Kubernetes Service (EKS)中运行的.NET Core应用程序,Fleet Deployer利用了GameLift API,允许团队以编程方式执行GameLift控制台提供的几乎任何操作。这种自动化水平和与亚马逊云科技服务的集成,使团队能够简化工作流程,专注于提供高质量的游戏体验。
在介绍完GameLift和Fleet Deployer的技术细节后,《星球大战:猎人》团队的Chris上台分享了开发过程和与GameLift的集成点的见解。他强调,集成主要集中在Unreal游戏服务器本身和平台服务上,而游戏客户端对GameLift的存在一无所知。
Chris向观众介绍了在虚幻游戏服务器中集成GameLift所需的各种功能和回调,例如初始化SDK、通知GameLift服务器已准备好托管游戏会话、处理玩家会话以及实现健康检查。作为匹配的中央通信点,平台服务在集成中发挥了关键作用,监控来自FlexMatch的SNS通知,并将有关成功匹配、超时和取消的信息传递给游戏客户端。
为了说明各个组件之间信息流动和交互的流程,Chris展示了一个全面的架构图。游戏客户端通过对ping服务器进行延迟检查并从平台服务获取活动匹配配置来启动流程。在玩家选择后,匹配请求被发送到平台服务,然后由平台服务转发给FlexMatch。平台服务接收到FlexMatch的SNS通知后,将包括服务器详细信息在内的匹配信息传递回游戏客户端。游戏客户端随后可以与虚幻游戏服务器建立连接,实现多人游戏体验。
Chris的演讲穿插了成功的故事,突出了《星球大战:猎人》的顺利推出。他们的扩展策略顺利满足了玩家需求,并能够利用Spot实例动态优化成本。也许最令人印象深刻的是,团队可以在推出期间实时调整匹配规则,解决任何假设或发现的差异。
然而,任何旅程都不可能一帆风顺,Chris坦率地分享了团队面临的障碍。为了实现理想的响应时间,需要进行大量的测试周期和开发内部匹配模拟器工具。该工具复制了FlexMatch匹配器配置,并根据来自生产环境玩家的遥测数据输入票证,使团队能够迭代和完善规则,直至达到预期结果。
Chris分享了一些关键指标,展示了在推出期间玩家会话和成功匹配的显著增长。今年6月4日《星球大战:猎人》正式推出后,活跃游戏会话数量与软启动期间相比出现了陡峭增长,搜索、完成、取消、失败和超时匹配的FlexMatch通知状态清楚地说明了游戏的受欢迎程度和匹配系统的有效性。
在整个开发和推出过程中,GameLift团队的坚定支持发挥了宝贵作用。从架构评审和开发生命周期中无数的问答环节,到确保推出时配额和限制适当,甚至在团队的Slack战斗室待命,GameLift团队的奉献精神值得赞赏。
随着演讲接近尾声,Chris为考虑使用GameLift的团队提供了宝贵建议。他强调了解多区域队列的延迟考虑因素的重要性,因为可接受的延迟阈值会因游戏类型和机制而有很大差异。明确匹配目标并确保必要数据的可用性是另一个关键考虑因素。Chris挑战观众思考诸如“哪些因素对玩家体验很重要?”和“玩家等级或技能等级将如何计算?”等问题。
确定游戏的适当实例类型和游戏会话容量也被列为关键步骤,需要彻底测试并考虑诸如每场比赛的玩家人数和游戏服务器的计算需求等因素。最后,Chris鼓励团队仔细评估所需的GameLift集成级别,权衡FlexMatch等功能的好处与所需的开发工作量。他还强调建立健全的测试策略的重要性,并将团队能够为负载测试搭建完整的GameLift队列视为成功的关键因素。
随着亚马逊云科技的Steve接过话筒,观众被介绍了GameLift Anywhere这一新功能,它有望彻底改变多人游戏的开发和测试过程。GameLift Anywhere允许开发人员在工作站上设置本地GameLift环境,实现无缝测试和调试,然后再过渡到GameLift管理的队列进行生产部署。
Steve向观众演示了设置GameLift Anywhere队列的简单过程,包括将本地工作站标识为队列计算源、注册它,然后复制游戏会话进行测试。一旦测试阶段完成,过渡到GameLift管理的队列就像更改单个服务器调用一样简单,只需移除GameLift Anywhere队列参数。《星球大战:猎人》团队已经认识到GameLift Anywhere的潜力,并计划将其纳入未来游戏迭代的开发工作流程。
对于渴望开始自己的GameLift之旅的人来说,Steve提供了一个全面的入门指南。Unity和Unreal的插件都提供了构建游戏所需的所有必要库。对于使用C、C++、C#或Go构建的自定义游戏引擎,提供了专用的SDK以支持本地游戏开发。为了进一步帮助学习过程,Steve介绍了一个工作坊,指导用户部署GameLift队列、构建队列,并亲身体验该服务。对于那些寻求更高级体验的人,GitHub上的GameLift工具包提供了示例游戏脚本、代码示例和快速构建更新工具,用于将构建部署到队列。
随着演讲的结束,观众对亚马逊GameLift的强大功能和灵活性以及其背后开发和实施团队的奉献精神有了深刻的认识。《星球大战:猎人》的成功故事证明了GameLift对多人游戏行业的变革性影响,使开发人员能够专注于创造引人入胜的体验,而无需承担复杂的基础设施管理负担。
在这个快速发展的游戏世界中,玩家要求跨多个平台实现无缝、低延迟的体验,像GameLift这样的解决方案已经成为不可或缺的一部分。随着行业不断推动可能性的边界,显然多人游戏的未来掌握在创新技术和精通运用它们的团队手中。
下面是一些演讲现场的精彩瞬间:
一款多人游戏发布时的欢庆场景,有香槟和蛋糕,但服务器和基础设施团队可能会在这个重要日子面临压力。
强调了在线游戏中需要低延迟和地理分布式服务器来支持资源密集型模拟和低玩家与服务器比率的需求。
演讲者解释了创建游戏构建对象的过程,包括编译一个Linux服务器二进制文件、添加代理、参数化安装文件、归档并上传到S3存储桶,然后在GameLift中注册。
优化GameLift实例以实现高效的资源利用和流畅的多人游戏体验。
Fleet Deployer监控GameLift以了解新的服务器群组何时就绪,并在服务器群组可用于多人游戏时通知用户和服务。
使用Amazon GameLift,团队可以在24小时不活动后自动缩减并释放资源,无需在开发高峰期手动关闭数百个资源。
Amazon GameLift在GitHub上提供了一个工具包,其中包含示例游戏脚本、代码示例和将构建部署到服务器群组的工具,帮助开发人员提升游戏托管体验。
总结
在这场引人入胜的演讲中,演讲者们分享了使用Amazon GameLift成功推出多人游戏《星球大战:猎人》的经验。他们强调了GameLift的关键优势,包括全球覆盖、利用Spot实例优化成本,以及内置的匹配功能。他们详细解释了所使用的各种GameLift资源,如FlexMatch规则、配置、游戏版本和实例集群。他们还讨论了所面临的挑战,例如调整匹配规则,以及采取的解决方案,如Fleet Deployer工具,以简化资源部署和管理。
演讲者们强调了推出的成功,包括能够满足玩家需求、通过扩展优化成本,以及实时调整匹配规则。他们为考虑使用GameLift的开发者提供了宝贵建议,如考虑延迟、匹配目标和数据要求,以及选择实例类型和游戏会话容量。
最后,他们介绍了GameLift Anywhere,这是一项新功能,允许开发者配置与GameLift类似的本地测试环境,从而在部署到托管的GameLift集群之前,便可进行开发和测试。总的来说,这次演讲为充分利用Amazon GameLift开发和推出多人游戏提供了深入的见解和实用建议。
亚马逊云科技(Amazon Web Services)是全球云计算的开创者和引领者。提供200多类广泛而深入的云服务,服务全球245个国家和地区的数百万客户。做为全球生成式AI前行者,亚马逊云科技正在携手广泛的客户和合作伙伴,缔造可见的商业价值 – 汇集全球40余款大模型,亚马逊云科技为10万家全球企业提供AI及机器学习服务,守护3/4中国企业出海。