Python 还能承担下一个时代的发展重任吗?Mojo 语言的横空出世对 AI 研发生态有什么影响? 了解详情
写点什么

揭秘 Meta 的云游戏基础设施

  • 2022-09-20
    北京
  • 本文字数:3422 字

    阅读完需:约 11 分钟

揭秘 Meta 的云游戏基础设施

云游戏的未来是实现游戏大众化。任何一个喜欢游戏的人都应该能够享受游戏,并与好友分享游戏体验,无论他们身在何处,即使他们没有最新最贵的游戏硬件。Meta 在 2020 年启动了云游戏平台,让 Meta 用户可以通过各种屏幕和网页浏览器即时地访问原生 Android 和 Windows 游戏。


这种前所未有的云游戏访问体验需要 Meta 的工程师们迎接新的挑战,开发出能够为世界各地的人们提供高质量游戏体验的硬件基础设施。


游戏本身也在不断演化,从 AR 和 VR 等 3D 体验到元宇宙,世界各地的人们都希望尽可能无缝且轻松地玩越来越具有沉浸感的游戏。实现元宇宙需要整个行业投入巨大的努力,但我们相信创建基础设施和解决云游戏的挑战将为我们指明走向元宇宙的道路。



为什么要构建云游戏


云游戏关注的是可访问性——为人们提供游戏,不管他们使用什么设备,也不管他们位于世界何处。将游戏应用放到云端,人们就不需要购买新硬件,也不需要大量下载或等待更新。它支持游戏跨桌面和移动设备无缝交叉,可以实现灵活的应用分发。


云游戏还为开发者提供了更轻松的开发体验,因为他们不再需要过多地考虑针对多个硬件平台(如桌面和手机)优化游戏。在理想的情况下,开发者只需要构建一次应用,就可以分发到多个设备上,而不需要构建多个二进制文件。对于关心安全和完整性的玩家和开发者来说,云游戏意味着更少的作弊和盗版问题。

Meta 云游戏基础设施


在 Meta 实现云游戏意味着工程师们需要开发新的硬件和软件基础设施来解决云游戏所面临的挑战。云游戏要求较低的端到端延迟,并提供快速流畅的游戏体验,而高质量的视频和音频需要以尽可能小的抖动进行传输。为了提升成本效率,基础设施还需要能够在单个云游戏服务器上运行多款游戏。所有这一切都必须受到保护,免受各种网络攻击,同时保持健壮和高效。

边缘计算、GPU 和虚拟化


Meta 云游戏基础设施为玩家提供低延迟体验的方法是在网络距离方面让其尽可能地靠近玩家。Meta 的数据中心无法单独为云游戏提供超低的延迟,所以我们依赖边缘计算,在靠近大量人口的大都市地区边缘部署服务,让云游戏基础设施更靠近玩家。



通过增加边缘计算站点降低延迟


我们的目标是在每一个边缘计算站点中都有一个统一的托管环境,确保我们可以尽可能平稳地运行尽可能多的游戏。如今的游戏都是为 GPU 设计的,所以我们与 NVIDIA 合作,基于 NVIDIA Ampere 架构的 GPU 构建托管环境。随着游戏图像渲染变得越来越密集和复杂,GPU 将为游戏的加载、运行和流化提供高保真度和低延迟。


为了运行游戏,我们在我们的边缘计算操作系统上使用了我们的集群管理系统 Twine。我们构建了编配服务来管理流媒体信号,并使用 Twine 来协调边缘的游戏服务器。


我们为 Windows 和 Android 游戏使用了容器技术,提供了不同的托管解决方案,其中 Windows 托管解决方案集成了 PlayGiga。我们已经构建了一个统一的编配系统来管理和运行两个操作系统平台的游戏。这意味着我们可以更灵活地跨不同的平台交付游戏和管理容量。



视频和音频流


提供流畅的视频和音频是云游戏体验最重要的部分之一。任何玩过在线游戏的人都体会过延迟可能带来的挫败感。


考虑到技术的成熟度和兼容性,我们结合了 WebRTC 和安全实时传输协议(SRTP),将其作为流式处理用户输入和发送游戏视音频帧的解决方案。随着时间的推移,这种方案显著提高了视频和音频流式传输的性能。


我们将从刚开始的云游戏基本的流开始讲起。


无论玩家在何时点击执行游戏中的动作(例如让游戏角色跳跃),我们都会捕捉到点击事件并将其发送给服务器,服务器将接收到这个事件。然后,游戏渲染包含该动作结果的帧(即角色跳跃)。我们捕获并复制渲染的帧,使用视频编码器对其进行编码,然后将其打包,装入用户数据报协议(UDP)数据包,再通过网络发送给玩家。最后,玩家端有一个抖动缓冲区来平滑接收到的数据包。我们将数据包解码为帧,然后为玩家渲染帧。


所有这一切都发生得如此之快,以至于玩家察觉不到点击和角色动作之间存在延迟。然而,每一个步骤都需要花费一点时间,这些时间累积起来会给玩家带来更高的延迟。


我们当前的模型在此基础上进行了显著改进,通过 GPU 编码降低了延迟。使用 GPU 编码意味着游戏渲染帧是在 GPU 中进行的,并且在编码完成之前不会离开 GPU 的内存。这个过程非常高效,并且不需要在 GPU 和主服务器之间占用大量的 PCI 总线带宽。编码后的帧也会比原始帧小。



目前的视频和音频流媒体模型,通过使用 GPU 编码显著降低了延迟


在网络方面,让边缘计算站点靠近玩家也有助于降低视频和音频的延迟——甚至比将整个流式管道转成 GPU 所节省的成本更加显著。


在玩家端,我们现在也使用硬件解码来缩短解码时间。视频和音频通常是同步在一起的,但我们也可以为了降低延迟在音频之前发送视频。我们还可以利用玩家电脑显示器或手机屏幕的固有延迟。屏幕会以一定的速率(如 30fps 或 60fps)逐帧显示视频。我们可以利用帧之间难以察觉的间隔吸收掉一些抖动,让视频变得更加平滑。对于支持更高 FPS 的设备,延迟可能会进一步下降。


确保云游戏的安全


玩家和开发者需要确保云游戏体验是安全的。玩家希望他们的数据是安全的,游戏不会被作弊者利用。开发者需要确保他们的产品不会受到盗版和其他安全漏洞的侵害。


边缘计算、GPU 虚拟化和视频 / 音频流的结合使得云游戏基础设施变得非常复杂。这种复杂性带来了独特的安全性挑战。作为一个基于 Windows 和 Android 的系统,系统本身承担了这些环境的安全性挑战,还需要保护免受 DDOS 攻击等威胁。


为了识别和解决安全问题,我们在开发的每个阶段(从设计、实现到测试)都会评估安全性,包括威胁建模、安全代码评审、模糊测试和安全测试。我们不希望云游戏成为攻击其他 Meta 系统的入口,所以云游戏基础设施与 Meta 的核心数据基础设施是完全隔离的。我们还有一个内部安全团队与外部公司一起工作,定期对系统进行安全评估。


云游戏和元宇宙


元宇宙对游戏的未来有着重要的影响——不仅是关于人们可以玩的游戏类型,还包括如何向人们分发这些游戏。元宇宙将比以往任何时候对网络连接有着更高的要求。我们今天奠定的基础将在帮助整个行业构建云基础设施方面发挥重要作用,这些基础设施将承担创建元宇宙体验所需的复杂计算。


就像 3A 级游戏一样,未来的元宇宙体验需要最高的保真度和最低的延迟。如果无法无障碍地实现这种体验,那它就不适合任何人,这意味着元宇宙网络必须具有超低延迟、高可伸缩性、高吞吐量和联邦数据存储。


无论这种新的网络架构是什么样子,我们都需要对今天的整体网络架构进行改进。它将需要一个可靠的、服务质量(QoS)感知的、点对点的通信链路和协议,让在同一个区域内(例如,在相同的 Wi-Fi AP 覆盖下)的人们可以相互交换信息。它需要一个统一的、无处不在的网络拓扑来限制全球范围内的延迟、抖动和丢包。降低延迟、提高可靠性、提升吞吐量和开发联邦数据库的挑战可能会迫使工程师在端到端通信网络中重新设计和分配计算和路由资源。然后,元宇宙在网络的每一段以及每一个应用 / 网络协议层(从顶部的应用层到底部的操作系统层)都需要无处不在的端到端 QoS 管理策略。


我们正在研究解决这些问题的方法。我们的云游戏基础设施提供了一些见解,我们正在与移动网络运营商和运营商、硬件芯片组制造商和其他合作伙伴合作,创建可以满足元宇宙需求的解决方案。


云游戏的未来


许多人将通过游戏进入元宇宙。我们朝着元宇宙的长期愿景努力,我们将继续构建新的二维体验,帮助 Meta 应用用户跨越元宇宙鸿沟。最近 Facebook 游戏平台推出的 Crayta 就是一个很好的例子。


随着云游戏平台的规模不断扩大,我们也在不断升级和完善云游戏基础设施。在接下来的 2 到 3 年里,我们将进行更多的国际扩张,将游戏带给世界各地更多的人。我们还与移动网络运营商合作,显著降低其接入网络的延迟。在硬件方面,我们正在与芯片组制造商合作,降低用户设备的延迟。我们还在研究新的容器技术,提供更好的流媒体效率。当然,随着系统的发展和改进,安全性也会不断提高。


开发者对显著的改进有所期待,包括改进系统的兼容性,减少开发者负担,并为他们提供更好的开发、测试、调试、实验和分析工具。玩家是我们云游戏工作最重要的组成部分,他们可以期待即将到来的更具沉浸感的全新游戏体验。


我们的目标是让人们在任何时刻、任何地点一起玩优秀的游戏,这一点始终不变,我们在云游戏方面的持续努力将确保这些体验变得更好。


原文链接:


https://engineering.fb.com/2022/06/09/web/cloud-gaming-infrastructure/


2022-09-20 09:453223

评论

发布
暂无评论
发现更多内容

电商系统微服务拆分

tom

浏览器原理

wudaxue

面试突击34:如何使用线程池执行定时任务?

王磊

java面试

java培训JVM面试题分享

@零度

JVM JAVA开发

重学架构之拆分电商系统为微服务

陈华英

架构实战营

时间轮原理及其在框架中的应用

vivo互联网技术

服务器 时间轮

云原生-模块十二

hunk

模块六作业-拆分电商系统为微服务

浪飞

关于技术团队的考核(24/100)

hackstoic

技术管理

Ant Design Landing

云原生

SaaS React Ant Design Landing page

Java中的序列化安全漏洞梳理

陈德伟

Java 安全 编程语言、 序列化机制

【模块六】拆分电商系统为微服务

yhjhero

#架构训练营

「架构实战营」毕业总结

DaiChen

「架构实战营」

什么是分支模式 ? 各(类)分支正确的使用方式

阿里云云效

云计算 阿里云 云原生 Feature 分支模式

【高并发】解密导致并发问题的第二个幕后黑手——原子性问题

冰河

并发编程 多线程 协程 异步编程 精通高并发系列

Vue

wudaxue

常见的反爬措施:UA反爬和Cookie反爬

华为云开发者联盟

Python 爬虫 Python爬虫 反爬虫 Cookie反爬虫

适合 Kubernetes 初学者的一些实战练习(一)

Jerry Wang

云原生 #Kubernetes# Kubernetes 集群 Serverless Kubernetes 3月月更

表数据都删了一半,可我的表文件咋还是那么大

华为云开发者联盟

MySQL 文件 innodb 数据页

【前端架构必备】手摸手带你搭建一个属于自己的脚手架

战场小包

前端 脚手架 3月月更

电商系统微服务拆分

Geek_8d5fe5

「架构实战营」

模块六作业

Leo

架构实战营

ABAP 简易弹出输出/输入框

Jasen Ye

Input abap decide CONFIRM

模块六作业

blazar

「架构实战营」

一文了解MySQL的Buffer Pool

华为云开发者联盟

MySQL 缓存 缓冲池 Buffer Pool 脏页

模块九作业-设计电商秒杀系统

CH

架构实战营

DDD实战(6):战略设计之技术决策

深清秋

DDD 软件架构 生鲜电商系统 3月月更

一文带你了解 Python 中的装饰器

踏雪痕

Python 装饰器 3月程序媛福利 3月月更

css

wudaxue

AppCube低代码快速开发健康打卡应用

DS小龙哥

3月月更

AliSSR 语音超分算法:让在线会议语音更明亮更自然

阿里云视频云

阿里云 音视频 智能降噪 音频3A 音频算法

  • 扫码加入 InfoQ 开发者交流群
揭秘 Meta 的云游戏基础设施_语言 & 开发_Qunshu Zhang_InfoQ精选文章