翻译:分布式架构自然演化出“中继”

3 阅读10分钟

以下是该文章《Nature's many attempts to evolve a Nostr》的中文翻译,保留了原文的结构、技术术语与风格,并适当本地化表达以便中文读者理解:


自然多次尝试演化出 Nostr

P2P 与联邦协议殊途同归,最终走向 Nostr,只是绕了点路

典型的 App 架构是这样的:云端一个大型中心化服务器,支撑大量客户端。Web 是这样工作的,移动 App 也是如此。

这种架构赋予服务器对用户的完全控制权——服务器拥有你的数据、你的账户,甚至用于保护这些数据的加密密钥。

最后这一点看似晦涩,却至关重要。加密密钥是我们在软件中实现安全性、隐私性、所有权和控制权的核心机制。正所谓:“密钥不在你手,数据就不属于你”(Not your keys, not your data)。

这种 App 架构本质上是“封建式”的。App 拥有密钥,并用它筑起一道加密高墙,将我们这些“平民”生产的数据围在城堡之中。你只有“登录”才能穿过吊桥进入;而城堡随时可以升起吊桥,将你拒之门外。

“中心化”(Centralization)指的是一种状态:单一实体或少数几个实体能够独家地观察、捕获、控制或对某项互联网功能的运行或使用进行“收租”。

—— RFC 9518: Centralization, Decentralization, and Internet Standards

这些“城堡”内部形成了强大的网络效应。它们可以利用这种效应进一步强化中心化、榨取租金、打压竞争。

今天我们正亲眼见证这种中心化架构的后果——像 App Store 这样的平台已进入“晚期阶段”。当增长放缓,那些坐拥巨大城堡的“国王”便开始变成“暴君”。


联邦化(Federation):你可以选择住进哪座城堡

互联网之所以成功,很大程度上归功于它刻意避免了单一控制实体

—— RFC 9518

那么,既然 App 是中心化的,我们该如何改进?一个自然的想法是:在不同 App 之间架起桥梁

这叫做联邦化(Federation)。用户与自己的服务器通信,而服务器之间彼此通信,交换消息,从而让你能与使用其他服务器的用户对话。你现在有了选择权:你想住进哪座城堡?

电子邮件就是这么工作的。Mastodon 和 Matrix 也是如此。我的邮箱是 @gmail.com,你的是 @protonmail.com。我们使用不同的域名、不同的服务商、不同的客户端,却仍能自由通信。

联邦化最棒的一点是:它实现起来很简单。它本质上仍是普通的客户端-服务器架构,只是在后面加了个通信协议。我们不需要发明什么黑科技,只需对现有基础设施稍作改造即可。这也是为什么 Mastodon 本质上就是一个普通的 Ruby on Rails 应用。

但这里有个问题……


联邦网络在规模化后会演变为寡头垄断

为什么会这样?

因为网络天然趋向中心化,最终会形成幂律分布(指数分布)的规模、权力和财富结构。这种中心化是不可避免的。你在 Web、社交网络、航空航线、电网、铁路、银行、比特币矿池、蛋白质相互作用、生态食物链、神经网络,乃至政治寡头中都能看到这一现象。

网络理论解释了其背后的原因:

  • 优先连接(Preferential attachment):连接越多 → 网络效应越强 → 吸引更多连接,最终形成高密度“枢纽节点”。
  • N² 扩展问题:如果每个联邦节点都要与其他所有节点通信,连接数将随节点数呈平方级增长(n×(n−1)),导致系统必须依赖大型枢纽来聚合和中继全局状态。
  • 适应性压力(Fitness pressure):小节点容易被流量洪峰击垮,而大节点资源充沛、稳定性高,自然吸引更多连接。
  • 效率:幂律网络是“超小世界”——任意两点之间只需几次跳转即可连通(通过枢纽)。
  • 弹性:这类网络能抵御随机故障,因为失效的节点大概率来自长尾(即小节点)。

这种特性被称为“无标度网络”(scale-free),在所有演化中的网络中都会自然出现。联邦网络也不例外。

以电子邮件为例:

电子邮件早已不再是“分布式”的了。你几乎不可能再创建一个“一级节点”加入这个网络。

邮件服务如今被几家巨头垄断,不再遵循网络中立原则。

我从 1999 年家里装上宽带起就一直在自建邮件服务器。我为此专门申请了静态 IP 和专业路由器,只为让外界能访问我的服务。那时我感觉自己是互联网的一等公民,也学到了很多。

但后来我发现,住宅 IP 段早已被主流邮件服务器拉黑。我只好把邮件迁到 VPS,依然行不通。我终于明白:自建邮件服务器已无希望。但我仍出于纯粹的倔强、反抗和理想主义坚持着——因为这是“对的事”。

然而如今,我发出的邮件根本无法投递。我差不多可以放弃这个服务器了。

——《自建邮件 23 年后,我终于认输》,Carlos Fenollosa,2022

类似的整合趋势也正在 Fediverse(联邦宇宙)中初现端倪。2023 年,Facebook 的 Threads 宣布支持 ActivityPub 协议,一夜之间成为 Fediverse 中最大的节点。这让一些人非常愤怒,甚至呼吁“去联邦化”(defederation)。但 Threads 的规模已是整个 Fediverse 其余部分的 10 倍以上——“去联邦化”几乎毫无作用。网络已经完成了整合。网络科学再次应验。

在规模化之后,联邦系统其实面临着与中心化 App 类似的诸多问题。因为联邦节点本质上仍是“封建领主”——它们拥有你的数据、账户和密钥。

大型联邦节点占据了网络拓扑中的战略核心位置,对整个网络拥有巨大影响力。它们可以利用网络效应“升起吊桥”——比如推出不支持联邦的新功能,或直接切断与其他节点的通信。

所以,联邦网络最终会演变为寡头垄断。你确实可以“选择服务器”,但前提是它得被寡头们“认可”。当然,寡头垄断总比独裁好——电子邮件总比 Facebook 强。但……我们还能做得更好吗?


P2P:所有节点生而平等

好吧,干脆抛弃服务器。如果我们能直接彼此连接呢?这就是点对点(Peer-to-Peer, P2P)。

在 P2P 网络中,每个用户运行一个“对等节点”(peer),可以自主发现其他节点并发送消息。用户自己持有密钥,用于签名、验证和加密消息。这太棒了!我们拥有了“可信退出”(credible exit)和最低限度的用户自主权。

但 P2P 带来了棘手的工程挑战:

  • 没有中心化的“真相源”,不同节点对网络状态的看法可能不同。因此,系统必须设计为最终一致性(eventual consistency),并能合并潜在冲突的状态。
  • 时间戳、事件排序等问题也变得复杂。
  • 去中心化协议就是难做!相比传统 App 开发,这简直是逆风前行。

还有现实的网络问题:

  • 没有中心服务器,许多请求需要多跳(peer → peer → peer)才能抵达目的地。
  • 节点不可靠:它们带宽有限,且会频繁上下线。合上笔记本,你的节点就消失了。
  • 节点发现成本高:你尝试连接一个之前可用的节点,但它已下线,只好再试下一个……
  • 不可靠的节点 + 多跳传输 = 高延迟,甚至无法触达网络某些部分。

……但有些节点比其他节点更平等

适用于其他网络的演化压力,同样作用于 P2P 网络。而像“可靠性适应性”这样的压力,在 P2P 中甚至被放大了——这催生了超级节点(superpeers):高带宽、高可用性的节点,专门服务于其他普通节点。

P2P 网络规模已如此庞大,高效搜索变得极为困难。早期如 Gnutella 系统在用户数达到数万时就遭遇严重可扩展性问题。如今用户已达数百万,系统设计者不得不引入超级节点(supernodes)来提升搜索效率和可扩展性。

—— Hadaller, Regan, Russell, 2012. The Necessity of Supernodes

于是,我们不再直接连接彼此,而是连接到某个高可用的超级节点。节点发现不再是问题,一切只需一两跳——又回到了“超小世界”。

等等……这不就是披着去中心化外衣的中心化吗?

和联邦节点一样,超级节点也占据了网络拓扑的核心位置,对网络拥有巨大影响力。我们的 P2P 网络再次收敛为幂律分布。网络科学,又一次赢了。

当然,P2P 的一大进步在于:我们确实拥有了自己的密钥。无信任(trustless)协议优于需要信任的协议,密钥自主是实现用户最小自主权的基础。

但为了支持一个“扁平化 P2P 网络”,我们投入了大量工程努力——而这种网络在现实中根本不会存在。有没有更简单的方式?


大自然多次尝试“演化”出中继(Relay)

让我们从终点倒推:

  1. 所有大规模网络最终都需要大型服务器
  2. 密钥必须由用户自己掌控(Not your keys, not your data)

我们能否设计一种分布式架构,同时承认这两个事实?它会是什么样子?

设想一下:使用一些现成的普通服务器,把它们当作无状态、不可信的管道。它们唯一的职责是中继信息。密钥由你掌控——你用自己的私钥签名消息,然后将消息发布到一个或多个中继服务器。其他用户关注一个或多个中继,收到消息后,用你的公钥验证签名。仅此而已!

这就是 Nostr 协议

我想宣称:Nostr 发现了一种全新的分布式协议基础架构——它既不是联邦,也不是 P2P,而是一种全新的范式:中继(Relay)。

中继直击要害:

  • 简单:使用 boring tech(如普通 Web 服务器),享受传统应用开发的所有便利。
  • 利用规模经济:云端的大而笨的服务器具有高可用性和高稳定性,且已成为商品化基础设施。
  • 规避 N² 扩展问题:中继之间不互相通信,用户只需连接少量(通常 2~12 个)中继即可获得自主性。我们永远不会真正遭遇 N² 瓶颈。
  • 支持用户所有权:你拥有数据、账户,最重要的是——你的密钥。中继虽大,但没有控制权。如果某个中继宕机或封禁你,毫无影响!你的账户不变,数据早已同步到其他中继——可信退出

最重要的是:中继架构正是你最终会得到的结果。Nostr 只是用更少的步骤,抵达了同样的终点。


译注:本文深刻揭示了去中心化系统在规模化过程中的结构性矛盾,并论证了 Nostr 协议作为一种“务实去中心化”方案的合理性。其核心洞见在于:与其对抗网络自然演化规律,不如顺势而为,将“不可避免的中心节点”设计为无状态、可替换的中继,从而在保持用户主权的同时实现可扩展性。