P2P矩阵

2020-06-03 02:38:28

我们为https://p2p.riot.im发布了一个重大更新--在非私人浏览模式下启动桌面Chrome或Firefox,试一试吧!

正如许多人现在知道的那样,我们中的一些人自12月中旬以来一直在试验在对等体系结构中运行Matrix-在这种体系结构中,每个用户都拥有绝对的自主权和对他们的对话的所有权,因为他们的对话唯一存在的地方就是他们自己的设备。

在某些方面,这是Matrix合乎逻辑的最终目标:我们的目标一直是赋予用户对其通信的完全控制权,而不是受制于任何给定的服务提供商,在P2P世界中,我们完全将安全通信的权力还给人们。

P2P Matrix不仅仅是让用户存储他们自己的对话:它还可以通过在本地网络、网状网络或互联网被切断的情况下工作来避免对互联网本身的依赖。更有趣的是,没有家庭服务者,就没有地方积累关于谁在与谁交谈、何时与谁交谈的元数据-这是对当今Matrix网络的合理抱怨,因为在给定的对话中,所有用户的家庭服务者都必须存储该会话的元数据。P2P还让我们从根本上简化了新用户的注册,如果他们不需要选择一台服务器就可以开始运行-而且我们避免了无意中将用户集中到公共服务器上。

P2P还迫使我们解决Matrix中许多最难解决的遗留问题:例如,考虑到多设备P2P要求您的帐户存在于多个地方,因此多宿主帐户。这反过来又为今天的Matrix网络上的帐户释放了高可用性和地理冗余(想象一下,拥有一个神奇地做了正确事情的主和备份主服务器!),以及帐户的可移植性,从而还可以在服务器之间托管和负载平衡帐户,甚至改进了GDPR遵从性(因为如果您的用户ID是短暂的,他们将不再亲自识别存储在Matrix房间中的信息)。我们还需要更好的安全机制,以避免人们利用网络的匿名性质进行滥用,从而加快我们为今天的Matrix网络所做的工作。

我们对待P2P的方式是“笨手笨脚但又天才”的方法,即在Matrix客户端旁边或内部使用家庭服务器并在客户机上运行它们-这意味着任何Matrix客户端都不需要任何更改就可以与P2P Matrix对话,因此P2P Matrix可以立即从Riot和其他应用程序中的所有工作中受益。因此,P2P也是开发能够在客户端高效运行的小得多的家庭服务器的巨大动力(例如Dendrite!)--这对Matrix整体来说当然是个好消息。它还迫使我们开发更具伸缩性的路由算法(因为您不希望您的客户端在每次发送消息时都必须与房间中的所有其他设备交谈!)。这也刺激了低带宽矩阵传输的发展(因为您不希望与多个对等点交谈的额外喋喋不休会占用您的所有带宽)。最后,它迫使我们真正加固联邦,因为节点不断出现和消失,这给联邦带来了比我们今天看到的相对静态的主服务器更多的压力测试。

因此,在过去的几个月里,P2P一直在为我们的许多长期Matrix工作提供燃料。到目前为止,已经进行了三个主要的实验:在FOSDEM上,我们展示了使用HTTP over libp2p作为传输来运行我们的下一代Dendrite主服务器运行客户端。我们还重点介绍了Timothée Flowe在EPFL的项目,该项目尝试使用Synapse通过Yggdrasil与P2P CoAP对话,作为通过代理的传输。

然而,最近我们一直在试验将Dendrite编译成Web Assembly,并将其作为服务工作者嵌入到Riot Web中运行,使用HTTP over libp2p的websocket传输(通过websocket集合服务器进行协调)。从架构上看,它看起来是这样的:

今天,我们在https://p2p.riot.im上发布了这个P2P演示的一个重要的新的Alpha版本(需要桌面Chrome或火狐在非私人浏览模式下)--希望它能给我们一个真正有用和具体的体验。

您的对话现在保存在您的浏览器存储中(通过IndexedDB),这意味着只要参与给定对话的所有浏览器不清除其本地存储,P2P网络上的房间就会一直存在!

您的房间目录列出了网络上活动节点发布的所有房间的所有别名。此外,我们现在会在您加入公共房间时自动发布本地房间别名,这样即使最初创建别名的服务器已经消失,其他人也可以通过您发现该房间。

节点之间的联合改进非常多-例如,当一个节点联机时,其他节点现在应该自动检测并向其发送回滚。邀请应该会起作用,而且应该不会再有任何意外的密文。

不用说,这方面的所有代码都是Apache许可下的开源代码,如果您觉得特别冒险,可以通过使用https://github.com/matrix-org/dendrite/blob/master/build/docker/DendriteJS.Dockerfile上的Docker文件或遵循https://github.com/matrix-org/dendrite/blob/master/docs/p2p.md.上的说明将您自己的P2P Dendrite嵌入到Riot Web中。

最后,请理解,演示很可能不是P2P Matrix最终版本的样子-这只是我们调查最佳前进途径的一系列实验中的一个步骤:)。

更多的联邦调试(以及挂接在Tardis中,并写下我们在Dendrite中实现联邦的所有知识!)。

在Dendrite中连接E2E加密API(这并不是说在纯P2P世界中它能给我们带来很多好处)

WebRTC传输。原来服务人员不允许使用WebRTC,所以我们必须通过填隙连接到Riot才能使用真正的点对点WebRTC数据通道,而不是通过WebSocket集合服务器中继所有流量。

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

首先:我们还没有一个“存储转发”节点的解决方案,可以在所有参与设备都离线的情况下代表房间中继消息。第一步是运行支持P2P的家庭服务器端,但随后元数据将开始为其托管的会话积累服务器端。一种更有趣的方法是使用存储转发系统,该系统混淆了谁在与谁交谈,例如混合网络,甚至可能提供对网络流量模式分析的阻力。这在很大程度上是一个非常开放的研究领域,但我们正在进入:d。

其次:我们希望更多地尝试其他传输方式,并找出哪种方式最适合Matrix。libp2p有一些非常令人兴奋的新东西,它的形式是Gossipsubv1.1--在libp2p中为pubsub流量提供了一个更智能的路由算法,David Dias在第一届Open Tech Will Save us Meetup上给我们做了一个贵宾之旅。因此,我们需要将libp2p传输重新构造为pubsub,看看它在实践中是如何工作的。另外,我们还想尝试将Yggdrasil(加密覆盖网络)作为一种完全不同的传输方式--Yggdrasil很容易让我们跨越不同的底层网络传输,但也有不同的权衡(例如,目前还不支持浏览器)。我们还想看看DAT/超级核心/超级核心/超温暖/阴谋生态系统,看看是否存在匹配项:)。

第三,也是最后一点:我们显然希望将新的P2P矩阵网络与今天的联合网络统一起来。理想的结果是建立一种混合模式,希望用户拥有专门的家庭服务器(在可用性、IT策略等方面)的团队可以像今天一样继续拥有一个--但刚刚安装了Riot的新手将会在P2P上四处漂浮,除非他们决定有意识地在一两台服务器上扎根。最棒的是,它将让我们关闭matrix.org home server:最好的公共home server是您自己在自己的手机上运行的服务器;)从长远来看,我们连接P2P和今天的Matrix所采取的方法将在很大程度上取决于我们为P2P选择的传输方式,但今天的home server很可能会涌现出连接网络的P2P网关。

所以,现在你就知道了。P2P Matrix的存在,正在以惊人的速度发展,并推动着树枝晶的发展。最令人兴奋的是,P2P的Matrix规范还没有任何变化;我们只是将https替换为http-over-libp2p作为传输。因此,我们在P2P世界中让Dendrite工作的所有工作都直接转化为让Dendrite在今天的Matrix上工作。现在你可以建立一个Dendrite,让它与更广泛的Matrix网络相当可靠地联合起来,尽管我们仍在匆忙实现API(我们已经通过了高达35%的系统测试覆盖-尽管这35%确实包含了大多数重要的测试:)。

最后,如果您担心Matrix核心团队为什么不去追逐P2P梦想,而不是改进Riot的UX,或实现社区,或可扩展配置文件,或处理MSC积压工作等。实际上,只有两个人(忽略了Matthew)一直致力于P2P-Neil Alexander(最初FOSDEM演示的作者,Dendrite wrangler和Yggdrasil联合维护者)和Kegan Dougal(最初Matrix开发团队的成员,Dendrite的原始作者之一,现在也在为WASM P2P工作争吵)。非常感谢Kegan&Amp;Neil推动P2P向前发展-也非常感谢核心团队中的其他每个人和更广泛的社区,让今天的Matrix保持进步!

\希望这能让我们对即将到来的事物有一个诱人的一瞥。老实说,当我们在2014年创办Matrix时,从未想过我们会走得这么远,但最终赶上未来真的很有趣:D

另外,你可以在尼尔·亚历山大的博客上从他的观点中了解到更多关于这一点的信息(包括更多关于Yggdrasil潜在演示的想法!)