简要说明:我们为以下版本发布了重大更新(v0.1.1)- 在非私人浏览模式下打开桌面 Chrome 浏览器或火狐浏览器,试试看!

大家好

很多人都知道,自 12 月中旬以来,我们几个人一直在努力尝试在点对点架构中运行 Matrix,在这种架构中,每个用户对自己的对话都拥有绝对的自主权和所有权,因为他们的对话只存在于他们拥有的设备上。

在某种程度上,这正是 Matrix 的最终目标:我们的目标一直是让用户能够完全控制自己的通信,而不是受制于任何特定的服务提供商。

谷歌云搭建ssr

P2P Matrix 不仅仅是让用户存储自己的对话:它还可以通过本地网络、网状网络或互联网被切断的情况下工作,从而避免对互联网本身的依赖。 更有趣的是,如果没有家庭服务器,元数据就无处积累,无法了解谁在何时与谁通话--这是对当今 Matrix 网络的合理抱怨,因为特定对话中所有用户的家庭服务器都必须存储该对话的元数据。 如果新用户不需要选择服务器就能开始使用,那么 P2P 还能让我们从根本上简化注册程序,避免用户扎堆使用公共服务器的无意集中化。

P2P 还迫使我们解决 Matrix 中许多最棘手的问题:例如,鉴于多设备 P2P 要求账户存在于多个地方,因此需要多归属账户。 这反过来又为当今 Matrix 网络上的账户带来了高可用性和地理冗余(想象一下,主服务器和备份家庭服务器都能神奇地做正确的事!),以及账户的可移植性,从而在服务器之间实现虚拟主机和账户负载平衡,甚至改善 GDPR 合规性(因为如果你的用户 ID 是短暂的,它们就不再是你 Matrix 房间中的个人身份信息)。 我们还需要更好的安全机制,以避免有人利用网络的匿名性质进行滥用,同时加快我们已经在 Matrix 网络上开展的工作。

我们处理 P2P 的方式是"别有洞天"在 Matrix 客户端上或在 Matrix 客户端内运行家庭服务器,这意味着有因此,P2P Matrix 可以立即从 Riot 和其他应用程序的所有工作中获益。 因此,P2P 也是开发更小的家庭服务器的巨大动力,这些家庭服务器可以在客户端高效运行(例如 Dendrite!)--这对整个 Matrix 来说当然是个好消息。 这也迫使我们开发更多可扩展的路由算法(因为你不希望你的客户端每次发送信息时都要与房间里的其他设备对话!),同时也促进了低带宽 Matrix 传输技术的开发(因为你不希望与多个对等设备对话时产生的额外喋喋不休耗尽你所有的带宽)。 最后,鉴于节点会不断出现和消失,它迫使我们真正实现联盟的坚固耐用,使联盟经受更多的压力测试,而不是我们今天看到的相对静态的家庭服务器。

谷歌云搭建ssr

因此,在过去的几个月里,P2P 已成为我们许多长期 Matrix 工作的燃料。 迄今为止,我们主要进行了三项试验:在FOSDEM我们展示了下一代 Dendrite 家庭服务器通过 HTTP 在客户端运行的情况。libp2p作为交通工具。 我们还重点介绍了 Timothée Floure 的项目尝试使用 Synapse 通过代理在 yggdrasil 上传输 P2P CoAP。

不过,最近我们一直在尝试将 Dendrite 编译成 Web Assembly,并将其嵌入 Riot Web 作为服务 Worker 运行,通过 libp2p 的 websocket 传输使用 HTTP(通过 websocket 会合服务器协调)。 从架构上看,它是这样的

谷歌云搭建ssr

今天,我们将在以下网站上发布这个 P2P 演示的全新 alpha 版本(v0.1.1)(需要在非私人浏览模式下使用桌面 Chrome 浏览器或 Firefox 浏览器)--希望它能为我们提供一个真正可用的、具体的未来形态。

主要功能有

  • 现在,您的对话将持久保存在浏览器存储中(通过 IndexedDB),这意味着只要参与特定对话的所有浏览器不清除其本地存储,P2P 网络上的房间就不会消失!
  • 您的房间目录列出了网络上活跃节点发布的所有房间的别名。 此外,现在只要您加入一个公共房间,我们就会自动发布一个本地房间别名,这样即使最初创建别名的服务器已经消失,其他人也能通过您发现该房间。
  • 对节点间的联盟关系进行了大量改进--例如,当一个节点上线时,其他节点现在应能自动检测并向其发送回滚。 邀请应该可以正常工作,也不会再出现意外编辑的信息。

不用说,所有代码都是根据 Apache 许可证开源的,如果你觉得自己特别有冒险精神,你可以通过以下网址的 Dockerfile 将自己的 P2P Dendrite 嵌入 Riot Web 中。或按照以下网址的说明进行操作.

请将错误报告至!

最后,请理解,演示很有可能P2P Matrix 的最终版本会是什么样子 - 这只是我们研究最佳前进道路的一系列实验中的一步:)

谷歌云搭建ssr

对于当前的演示版来说,还有很多内容,包括

  • 更多联盟调试(并挂钩none并写下我们在 Dendrite 中实施联盟的所有心得!)
  • 让内容存储库在浏览器中运行(必须用一些 GIF 填充 IndexedDB)
  • 在 Dendrite 中连接 E2E 加密应用程序接口(在纯粹的 P2P 世界中,这并不能为我们带来多少好处)
  • WebRTC 传输。 原来,服务工作者不允许使用 WebRTC,所以我们必须通过 Riot 来实现真正的点对点 WebRTC 数据通道,而不是通过 websocket 交会服务器来转发所有流量。
  • 支持多设备的分散式账户 - 回顾MSC1228并让 Dendrite 支持多归属账户!
  • 完成所有 Dendrite 的其他剩余应用程序接口。

除此之外,还有一些更大的问题有待未来的实验来解答。

首先:我们还没有 "存储和转发 "节点的解决方案,如果所有参与设备都处于离线状态,这些节点可以代表房间转发信息。 为此,我们首先要在服务器端运行一个具备 P2P 功能的家庭服务器,但这样一来,服务器端就会开始为其托管的对话积累元数据。 更有趣的方法是使用存储和转发系统,混淆谁在与谁对话,如混合网络,甚至可以抵御网络流量模式分析。 这在很大程度上是一个开放的研究领域,但我们正在着手研究。

第二:我们希望更多地尝试其他传输方式,找出最适合 Matrix 的方式。 Libp2p 有一些非常令人兴奋的新东西,如Gossipsub v1.1- 在 libp2p 中为 pubsub 流量提供了一种更加智能的路由算法。贵宾参观在第一次 "开放技术将拯救我们"(Open Tech Will Save Us)见面会上的演讲。 因此,我们需要将 libp2p 传输重构为 pubsub,看看实际效果如何。 另外,我们还想把Yggdrasil(Yggdrasil可以让我们轻松跨越不同的底层网络传输方式,但也有不同的折衷方案(例如,还不支持浏览器)。 我们还想看看DAT / 超核 / 超温 / 卡巴尔生态系统,看看是否匹配 :)

第三,也是最后一点:我们显然希望将新的 P2P 矩阵网络与现在的联合网络统一起来。 最理想的结果是采用混合模式,希望用户拥有专用家庭服务器的团队(出于可用性、IT 政策等考虑)可以像现在一样继续拥有家庭服务器,但刚刚安装 Riot 的新用户将在 P2P 上四处漂泊,除非他们决定有意识地在一两个服务器上扎根。 最重要的是,这样我们就可以关闭 matrix.org 主页服务器:最好的公共主页服务器就是你自己在手机上运行的服务器;) 我们将 P2P 与今天的 Matrix 连接起来的方法,将在很大程度上取决于我们为 P2P 选择的长期传输方式,但现在的家庭服务器很可能会发展出 P2P 网关,将网络连接起来。

谷歌云搭建ssr

所以,就这样吧。 P2P Matrix已经存在,而且正在以惊人的速度发展,并推动着Dendrite的发展。 最令人兴奋的是,Matrix的P2P规格完全没有变化;我们只是把https换成了http-over-libp2p作为传输方式。 所以所有我们为使 Dendrite 在 P2P 世界中运行所做的工作,也直接转化为使 Dendrite 在当今的 Matrix 上运行。尽管我们仍在匆忙地实施 API(我们已通过了 35% 的 API),但我们现在可以建立一个 Dendrite,并使其与更广泛的 Matrix 网络可靠地联合。系统测试尽管这 35% 的覆盖率确实包含了大部分重要的测试:)

最后,如果你担心为什么 Matrix 核心团队都在追逐 P2P 的梦想,而不是改进 Riot 的用户体验,或实施社区,或可扩展配置文件,或处理 MSC 的积压工作等等...... 实际上,只有两个人(不包括马修)一直在从事P2P工作--尼尔-亚历山大(Neil Alexander,FOSDEM演示的原作者,Dendrite的管理者和Yggdrasil的共同维护者)和基根-道格尔(Kegan Dougal,原矩阵开发团队的成员,Dendrite的原作者之一,现在也在管理WASM的P2P工作)。 非常感谢 Kegan & Neil 推动了 P2P 的发展,同时也非常感谢核心团队的其他成员和更广泛的社区,是他们让今天的 Matrix 不断进步!

希望这篇文章能让大家看到未来事物的雏形。 老实说,当我们在 2014 年创办 Matrix 时,我们从未想过我们会走到 P2P 这样的地步,但现在终于赶上了未来的步伐,这真的很有趣:D

-- 马太福音

附注:您可以从尼尔-亚历山大的角度阅读更多相关内容在他的博客上(包括对潜在 Yggdrasil 演示的更多想法!)。

附注:您可以从 Kegan'S 的角度阅读有关 P2P 和 WASM 实施的血腥细节。在 Dendrite 维基百科上.

P.P.P.S 评论在HN