Decentraland 的 Catalyst:使用 WebRTC 在元宇宙中进行交互

每个去中心化平台开发者都面临着一个问题:哪些组件应该去中心化,去中心化的程度又该如何把握?

元宇宙项目 Decentraland 在解决这个问题时,他们的原始点对点消息传输遇到了性能瓶颈,限制了用户实时聊天和互动的能力。在这篇文章中,我们将探讨他们如何解决性能问题,同时保持运营者的独立性。

对于不熟悉的人来说,Decentraland 是一个去中心化的虚拟世界平台,建立在以太坊区块链上,允许任何人创建、探索和变现内容和应用程序,如虚拟土地、建筑、物品或小游戏。任何人都可以运行一个 Decentraland 节点,这就像一个游戏服务器。每个节点都能看到相同的世界实例(建筑等),但节点上的用户只能看到并与同一节点上的其他人互动。(这种设计与《魔兽世界》的“分片”非常相似。)

任何多人世界都需要一种方式来与附近玩家共享用户互动和状态变化。Decentraland 通过 WebRTC 数据通道实现这一点:一键通话语音聊天、玩家移动、聊天消息以及世界互动(例如开关门)都通过数据通道共享。

最初,所有这些状态变化都通过点对点 WebRTC 连接发生。但这种架构很快就遇到了扩展问题:点对点 WebRTC 连接无法扩展到超过4个对等节点,而玩家经常与更大的群体和人群互动。为了支持大型群体中的互动,Decentraland 团队首先尝试通过多个点对点跳跃来传播数据,但延迟太高了。对于一个100个用户的集群,客户端p75 ping时间为6-7秒。

Internal Decentraland dashboard showing p75 response time was 6.73 seconds before switching to LiveKit

为了解决这个问题,团队构建了一个传输层抽象(“Catalyst”),以支持多种 WebRTC 传输选项。除了现有的点对点传输之外,节点运营者可以托管自己的 LiveKit 开源服务器实例,或者使用 LiveKit Cloud 并将服务器维护交给我们。任何节点运营者都可以通过简单的配置更改在传输方式之间切换。自从 Catalyst 发布以来,所有基金会和社区节点都选择在 LiveKit 上运行。

Internal Decentraland dashboard showing p75 response time was 821 milliseconds after switching to LiveKit

结果是显著的。从量上看,客户端的 p75 ping 时间降至800毫秒。现在作为 WebRTC 音频轨道在用户之间交换的语音聊天得以实时传输。性能的提升也对用户行为产生了深远的定性影响,带来了自发的互动、实时音频对话以及用户唱歌卡拉OK和生日快乐的活动。

延迟的显著下降很大程度上依赖于 LiveKit Cloud 的全球网状网络。每个 Decentraland 用户连接到地理位置上离他们最近的 LiveKit 服务器,数据通过私有互联网骨干网在用户之间交换——将其想象成一个 CDN,但用于实时媒体。

回到本文开头提出的问题,LiveKit 的开源核心允许 Decentraland 部署去中心化和中心化的混合传输实现。Decentraland 节点运营者可以自行决定是使用 LiveKit Cloud,托管自己的 LiveKit 实例,还是继续使用点对点传输。

您可以在 Decentraland 的架构决策记录中阅读有关 Decentraland WebRTC 架构的更多技术细节,或者使用LiveKit Cloud创建您自己的 WebRTC 项目。也欢迎在我们的Slack社区中打个招呼——我们总是很高兴听到人们用 LiveKit 正在构建什么!