try ai
科普
编辑
分享
反馈
  • 共识算法

共识算法

SciencePedia玻尔百科
核心要点
  • 法定人数交集原则(通常要求多数票)是确保分布式系统安全、防止决策冲突的数学基础。
  • FLP 不可能定理证明,在纯异步网络中,即使只有一个进程可能崩溃,也没有任何确定性算法能同时保证安全性和终止性。
  • 现实世界中的共识协议通过在部分同步模型下运行来实现活性,利用超时等机制来推断故障,同时始终保证安全性。
  • 与容忍简单的崩溃故障(N≥2f+1N \ge 2f+1N≥2f+1)相比,容忍恶意(拜占庭)故障需要明显更多的节点(N≥3f+1N \ge 3f+1N≥3f+1)。
  • 共识实现了状态机复制,使得分布式组件在从数据库到区块链等应用中,能够像单一的容错实体一样运行。

引言

在一个日益互联的世界里,我们的数字基础设施——从云服务到金融网络——都依赖于一种隐藏却至关重要的能力:让独立的计算机达成一致。但是,一群通过不可靠网络通信且可能发生故障的机器,如何在没有中央协调者的情况下,形成单一、一致的真相?这个分布式计算的核心挑战由共识算法解决,它们是于潜在混乱中创造秩序的无形引擎。本文将对这一关键领域进行全面探索。第一章“原理与机制”将奠定理论基础,剖析通过法定人数实现安全的数学基石,直面 FLP 不可能定理揭示的一致性深刻限制,并详述容忍恶意行为者所需的稳健防御措施。随后,“应用与跨学科联系”一章将理论付诸实践,展示这些概念如何成为高可用性数据库、去中心化区块链和协同机器人集群等不同技术背后的驱动力,揭示共识在众多领域中的统一力量。

原理与机制

要构建能够达成一致的系统,我们必须首先理解“达成一致”意味着什么,尤其是在一个不可靠的环境中。通往这一理解的旅程将我们从熟悉的单机领域带到分布式网络的狂野前沿,揭示了计算的根本限制以及我们为绕开它们而学到的巧妙方法。

两个世界的故事:本地与分布式

想象一下,你有一块白板和几个人需要往上写字。为了避免混乱,你制定了一条简单的规则:一次只能有一个人拿笔。这就是​​互斥​​的本质。在一台现代多核计算机上,这是一个相对直接的问题。所有的处理器核心都可以访问同一个共享内存,即我们的“白板”。它们可以使用特殊的原子指令——保证执行时不可分割、不会被中断的命令——来构建一个“锁”。希望访问共享数据的线程首先要获取锁。如果另一个线程已经持有锁,它就等待(或“自旋”)。这保证了​​安全性​​:坏事不会发生,即任何时候都不会有两个线程同时处于临界区内。虽然确保​​活性​​——即好事最终会发生,例如每个线程最终都能轮到机会,无人饿死——需要在设计上多加注意,但协调的根本问题通过拥有一个共享的、原子的参考点得以解决。

现在,想象白板消失了。取而代之的是,每个人都在一个单独的房间里,只能通过门下传递纸条来交流。纸条可能会延迟、乱序送达,甚至丢失。你们如何才能就一个单一、一致的故事达成共识?这就是分布式系统的世界,一个截然不同且更具挑战性的地方。这里没有共享内存,没有单一的事实来源。所有的协调都必须通过消息来完成,而连接各个房间的网络从根本上是不可靠的。这就是​​共识算法​​的领域。

安全性的基石:法定人数与共享理解

当分布式服务器(或称“节点”)无法信任网络时,它们如何才能就一个值达成一致?一种常见的方法是选举一个领导者。领导者提出一个值,其他节点(跟随者)对其进行投票。但是,多少票才算足够?简单多数吗?

让我们从第一性原理出发思考这个问题。我们的首要目标是安全性:我们绝不能允许系统对两个不同的值做出决策。这就是​​一致性​​属性。想象一个由 N=7N=7N=7 个节点组成的集群,负责一个关键系统,比如发电厂数字孪生的配置。一个领导者,我们称她为领导者 A,提议“将温度设置为 300K”。为了提交这个决策,她需要从一组称为​​法定人数​​的节点那里获得“同意”票。假设这个法定人数的规模是 qqq。

危险在于,如果领导者 A 速度很慢或看起来已经崩溃,另一个节点(领导者 B)被选举出来。领导者 B 可能会提出一个冲突的值,例如“将温度设置为 350K”。如果领导者 B 也能为它的提议收集到规模为 qqq 的法定人数,我们最终可能会得到两个不同的决策,这是一致性的灾难性失败。

我们如何防止这种情况?解决方案异常简单:我们必须设计我们的法定人数,使得任意两个法定人数集合都保证至少有一个共同成员。这就是​​法定人数交集​​属性。如果领导者 A 的法定人数和领导者 B 的法定人数必须重叠,那么至少有一个节点对两者都投了票。根据协议规则,该节点可以发出警报,阻止冲突决策的产生。

我们来为这个 N=7N=7N=7 的集群计算最小的法定人数规模 qqq。如果我们有两个法定人数集合 Q1Q_1Q1​ 和 Q2Q_2Q2​,大小均为 qqq,那么它们并集的大小最多为节点的总数 NNN。根据容斥原理, ∣Q1∪Q2∣=∣Q1∣+∣Q2∣−∣Q1∩Q2∣|Q_1 \cup Q_2| = |Q_1| + |Q_2| - |Q_1 \cap Q_2|∣Q1​∪Q2​∣=∣Q1​∣+∣Q2​∣−∣Q1​∩Q2​∣。为了保证交集非空,我们需要 ∣Q1∩Q2∣≥1|Q_1 \cap Q_2| \ge 1∣Q1​∩Q2​∣≥1。这意味着必须满足 N≥q+q−1N \ge q + q - 1N≥q+q−1,可简化为 2q−1≤N2q - 1 \le N2q−1≤N。整理得到 q≥N+12q \ge \frac{N+1}{2}q≥2N+1​。对于我们 N=7N=7N=7 的集群,最小法定人数规模为 q≥7+12=4q \ge \frac{7+1}{2} = 4q≥27+1​=4。这是一个多数法定人数。通过坚持任何决策都需要多数同意,我们保证了任何两个相互冲突的决策永远不会并行发生。这是许多共识协议中安全性的数学基石。

机器中的幽灵:一致性的根本限制

有了法定人数,我们保证了安全性。但是我们总能保证做出决策吗?这就是​​终止性​​(或活性)属性。看起来我们应该能够做到。但在 1985 年,一个惊人的发现动摇了分布式计算的基础。

考虑我们传递纸条类比的最纯粹形式:一个​​异步网络​​。信使是可靠的——他们从不损坏或丢失纸条——但他们可以任意缓慢。一条消息可能在一纳秒内到达,也可能在一个世纪后到达。你没有时钟来衡量过去了多长时间。在这个世界里,节点可能仅通过崩溃并不再采取任何行动而发生故障。

现在,你向你的同事 Bob 发送一个提案,等待他的投票。你等了又等。你会得出什么结论?Bob 崩溃了吗?还是信使只是花的时间特别长?你完全无法区分这两种情况。如果你在没有 Bob 投票的情况下做出决定,你可能会违反一致性,因为 Bob 可能只是速度慢,并且正准备与另一组人就不同的提案进行投票。如果你永远等待 Bob,如果 Bob 已经崩溃,你又可能违反终止性。

这个两难困境正是著名的 ​​Fischer-Lynch-Paterson (FLP) 不可能定理​​的核心。该定理证明,在纯异步系统中,如果哪怕只有一个进程可能崩溃,任何​​确定性​​共识算法都无法保证终止性。其证明是逻辑推理的杰作。它表明,对于任何确定性算法,一个敌对的调度器——它只控制消息传递的时机,这在异步世界里是合法的行为——总能让系统精巧地维持在一种“双值”状态,即两种不同的结果都仍有可能发生。通过传递一个精心选择的消息,敌对方可以将系统导向另一个双值状态,如此循环往复,从而永远阻止最终决策的产生。这不是算法中的错误;而是模型本身的根本性限制。

逃离不可能:现实系统如何工作

如果共识是不可能的,那么我们每天依赖的成千上万的分布式数据库、云服务和金融系统是如何运作的?它们之所以能工作,是因为它们并非在 FLP 定理那般严苛的世界中运行。它们巧妙地变通了规则。

第一步是哲学层面的:我们重新定义“正确性”。对于单台计算机上的简单算法,我们通常要求​​完全正确性​​:对于任何输入,它必须终止并给出正确答案。对于分布式共识,这个要求太强了。相反,我们将正确性分解为两个部分:

  1. ​​安全性(“坏事永不发生”)​​:这是不可妥协的。一致性和有效性必须无条件地成立。我们绝不能对两个不同的值做出决策。我们的法定人数交集逻辑就是这样一种安全保证。

  2. ​​活性(“好事终将发生”)​​:这就是终止性属性。我们放宽了保证。我们接受系统在病态恶劣的网络条件下可能无法取得进展,但我们确保一旦网络行为变得合理,它就一定会取得进展。

这导致了对异步假设的实际放宽。现实世界的系统在​​部分同步​​模型下运行。我们假设,虽然网络可能混乱,但消息延迟和处理时间最终存在一个上界。这个假设允许我们使用超时机制。如果领导者在特定时间内没有收到回复,它可以怀疑某个跟随者已经崩溃并继续执行。这种怀疑可能是错误的,但在部分同步模型下,系统最终会趋于稳定,一个正确的领导者将被信任,决策终将做出。这就是像 Paxos 和 Raft 这类协议的精妙之处:它们即使在纯异步环境下也始终是安全的,但需要部分同步来保证活性。

另一个逃逸门是放弃确定性。FLP 敌对方的力量来自于它能够预测系统的每一步行动。如果我们允许我们的算法使用​​随机性​​——在关键时刻抛硬币——它们就能打破敌对方为困住它们而制造的对称局面,最终以概率 1 达成决策。

对付恶棍:拜占庭容错

到目前为止,我们只担心因崩溃而失效的节点。它们就像在战斗中倒下的士兵——不幸,但可预测。但如果有些节点是叛徒呢?如果它们是恶意的,积极试图破坏协议呢?这就是​​拜占庭将军问题​​,一个更难对付的敌人。一个拜占庭节点可以撒谎。它可以告诉一个同伴“进攻”,告诉另一个“撤退”,从而制造最大的混乱。

为了抵御此类背叛行为,我们需要加强防御。针对 fff 个崩溃故障的多数法定人数要求 N≥2f+1N \ge 2f+1N≥2f+1 已不再足够。为了容忍 fff 个拜占庭叛徒,Lamport、Shostak 和 Pease 的著名结果表明,总共需要 N≥3f+1N \ge 3f+1N≥3f+1 个节点。

为什么需要更多的节点?考虑一个简单的例子,一个叛徒和两个忠诚的将军(N=3,f=1N=3, f=1N=3,f=1)。指挥官(可能是叛徒)发布命令。如果指挥官是叛徒,他可以告诉一个将军“进攻”,告诉另一个“撤退”。两个忠诚的将军现在收到了相互矛盾的信息。他们无法知道是该指挥官是叛徒,还是另一个将军是叛徒。没有办法解决这种模糊性。为了打破僵局,你需要第三方忠诚者在忠诚者中形成三局两胜的多数。这个 3f+13f+13f+1 的要求,是在一个参与者可能怀有主动敌意的世界中,为安全付出的高昂代价。

关键在于要将其与过滤不良数据这个更简单的问题区分开来。想象一个有 nnn 个传感器监测温度的系统,其中最多有 fff 个可能出故障并报告异常值。如果这些传感器仅仅是故障,而不是恶意串通,我们可以使用一个过滤算法。例如,我们可以对所有读数进行排序,丢弃 fff 个最低值和 fff 个最高值,然后对其余的求平均。只要有足够多的正确传感器形成一个中心集群,这种“截尾均值”就能保证给出一个很好的估计,而这只需要 n≥2f+1n \ge 2f+1n≥2f+1 个传感器。从 2f+12f+12f+1 到 3f+13f+13f+1 的跃升,是处理噪音与处理恶意之间差异的量化体现。

作为物理过程的共识:一致意见的流动

让我们从一个完全不同的角度来看待共识,不把它看作离散消息的协议,而看作一个连续的物理过程。想象一个传感器网络,每个传感器都有一个不同的初始读数。在每个时间步,每个传感器都将其自身的值微调,使其向其直接邻居的平均值移动。

会发生什么?这个过程非常像热的扩散。如果你加热一根金属棒的一端,热量会逐渐扩散,直到整根棒达到均匀的温度。在我们的传感器网络中,各个状态值在网络链接上传播“扩散”。最终,整个系统会稳定到一个共识状态,其中每个传感器都显示完全相同的值。而这个最终的值是什么?它是所有初始传感器读数的平均值。系统保存了总价值并将其均匀分配。

这种“局部平均”行为可以用图论的数学语言优雅地描述。网络的通信拓扑是一个图,而更新规则可以用​​图拉普拉斯​​矩阵——一个捕捉连通性本质的算子——来简洁地表达。更美妙的是,系统达成共识的速度与图的结构直接相关。收敛速率由一个称为​​代数连通度​​(用拉普拉斯算子的特征值 λ2\lambda_2λ2​ 表示)的属性决定。代数连通度越高的图,其瓶颈越少,信息——也即一致意见——就能更快地在网络中流动。这为我们提供了一个深刻而统一的视角:网络的几何结构决定了一致性达成的动态过程。

现代综合:区块链与不可变历史

这些原则——基于法定人数的安全性、FLP 限制的变通方案、拜占庭容错以及信息流的物理学——都汇集于我们这个时代最受关注的技术之一:区块链。

从核心上讲,​​分布式账本​​只是一个复制的、只追加的日志的抽象概念,其内容由共识算法达成一致。它是我们的分布式参与者一直试图共同书写的共享故事的数字体现。

​​区块链​​是这种账本的一种具体而巧妙的实现。在这里,条目(交易)被打包成区块。共识算法(可能是一种像 Raft 一样基于领导者的算法,也可能是一种拜占庭容错算法)是决定哪个区块成为序列中下一个区块的引擎。但真正的加密魔法在于,每个区块都包含前一个区块的数字指纹——即加密哈希值。这就创造了一个区块之链,从最新的区块一直链接回第一个区块。

这种哈希链接机制创造了强大的​​抗篡改性​​。如果一个敌对方试图修改旧区块中的一笔交易,该区块的哈希值就会改变。这反过来又会改变下一个区块的哈希值,以及再下一个,从而引发一场级联反应,破坏从那一点开始的整个链条。任何诚实的参与者都可以立即检测到伪造。这使得记录在区块链上的历史实际上是​​不可变的​​。

这种分布式共识与密码学的综合创造出一种新事物:一个系统,其中一群互不信任的参与方,比如一个共享访问日志的医院联盟,可以维护一个单一、共享、可审计且不可否认的历史记录,而无需信任任何单一的中央权威。这证明了数十年来对如何达成一致这一基本问题研究的价值。

无形的管弦乐队:运行中的共识

在穿越了共识的理论腹地之后,我们可能会留有一种抽象之美感,就像欣赏一台宏伟引擎的蓝图。但引擎的真正用途只有在它被装入载具并启动时才能显现。那么,共识这台引擎在哪里发挥作用呢?我们在哪里能找到这个由独立代理组成的“无形管弦乐队”,通过沟通协作来创造一个单一、连贯的现实?事实证明,答案是无处不在——从我们数字世界最深厚的基础,到机器人技术的前沿,甚至在人类社会的抽象模型中。

在本章中,我们将探索这些应用,看共识的优雅原则如何不仅仅是理论上的奇珍,而是使我们复杂、互联的世界成为可能的关键机制。我们将看到这同一个思想,以不同的面貌,如何解决各种各样的问题,揭示出分布式协调挑战中深刻的统一性。

数字基石:于混乱中锻造秩序

现代计算的核心存在一个悖论:我们基于固有的不可靠组件构建了看似可靠的庞大服务,如云数据库、消息队列和文件系统。服务器会崩溃,网络会延迟和丢弃消息,然而,服务必须呈现出坚定不移的一致性。这种幻象很大程度上是由共识算法精心打造的。

想象一个像实现简单先进先出 (FIFO) 队列这样基础的任务,但为了容错,这个队列分布在多台服务器上。如果客户端可以随时向任何服务器发送 enqueue 和 dequeue 请求,我们如何保证每个项目都被精确处理一次,并且顺序全局正确?如果一台服务器单独行动,它可能会出队一个比另一台服务器上某个项目“更新”的项目,从而违反 FIFO 的承诺。要实现这一点,需要所有服务器就所有操作的*单一全序*达成一致。这正是状态机复制 (SMR) 的问题,而共识是其经典解决方案。通过使用共识协议来商定一个有序的操作日志,分布式系统可以像一个单一、连贯的状态机——一个单一、完美的队列——一样运作。

这种强大的模式远不止于简单的队列。考虑管理一个稀缺资源池的问题,比如计算集群中的几块高性能 GPU。我们可以构建一个分布式信号量来控制访问,其中可用 GPU 的数量是复制在协调服务器上的一个状态。一个 Acquire 请求是一个操作,如果 GPU 空闲,它会递减计数并授予访问权限。一个 Release 操作则相反。通过共识将这些操作在复制日志中排序,我们可以确保资源计数永远不会被破坏(安全性),并且请求得到公平处理,例如根据它们在日志中的顺序以先到先得的方式服务。

但这也暴露了分布式系统的严酷现实。如果一个客户端获取了 GPU 然后崩溃了怎么办?如果没有机制来检测此故障并回收资源,该 GPU 将永远从系统中丢失,可能会饿死所有其他等待的客户端。这凸显了为什么现实世界中基于共识的系统通常与有时限的租约等机制配对,而这些机制本身也必须通过共识协议进行管理以确保一致性。

共识在创建单一、容错实体方面的作用,在数据库世界中或许最为关键。几十年来,两阶段提交 (2PC) 协议是确保跨多个数据库的事务具有*原子性*——即事务的所有部分要么全部提交,要么全部中止——的标准。然而,2PC 有一个众所周知的致命弱点:如果中央协调器在关键时刻崩溃,参与的数据库可能会被阻塞,无限期地等待决策。这对于高可用性系统是不可接受的。现代的解决方案是用一个容错的决策服务——一个运行 Paxos 或 Raft 等共识协议的小型服务器集群——来取代单一、易出错的协调器。提交或中止事务的决策成为复制日志中的一个条目。如果共识组的领导者失败,另一个会被选举出来,读取日志并继续该过程。这种“Paxos 提交”方法提供了 2PC 的原子性,却没有其对协调器故障的致命弱点。

然而,这种强大和稳健性是有代价的。在共享内存多处理器上,由极其复杂的缓存一致性硬件仲裁的原子指令可能需要数百纳秒。而在网络上实现分布式机器间的一致性则完全是另一回事。在一个必须容忍 fff 个崩溃故障的同步系统中,存在一个基本的下限:任何共识协议在最坏情况下都需要至少 f+1f+1f+1 轮通信。由于网络延迟以微秒或毫秒计,单个共识决策可能比硬件原子操作慢几个数量级。一次共享内存更新的实测延迟为 300 ns300\,\mathrm{ns}300ns,而一个仅容忍两次失败的共识决策,其计算出的最小延迟为 150 μs150\,\mu\mathrm{s}150μs(即 150,000 ns150,000\,\mathrm{ns}150,000ns),两者相差 500500500 倍,形成了鲜明对比。这就是跨越距离和故障进行协调的根本代价。

现代前沿:区块链与去信任系统

虽然共识长期以来一直是像 Google 和 Amazon 等公司内部中心化分布式系统的无形基石,但随着区块链的出现,它闯入了公众视野。区块链的核心是状态机复制的一个辉煌而大胆的应用。其根本性的不同在于,参与者(“节点”)不再是私有数据中心里一小撮受信任的服务器,而是遍布全球的大量匿名且互不信任的实体。

这种从“许可制”到“非许可制”世界的转变改变了一切。在许可制系统中,比如一个由银行联盟或公用事业公司使用的系统,参与者是已知且经过身份验证的。这允许使用高效的、基于通信的拜占庭容错 (BFT) 共识协议。由于验证者集合小而固定,他们可以快速交换消息以达成一致,从而实现高吞吐量(每秒数千笔交易)和近乎即时的最终性。这使得它们非常适合受监管的环境,如交易能源平台,其中正式的治理结构可以控制成员资格并确保符合法律要求。

在像比特币这样的非许可制系统中,任何人都可以加入。这种开放性需要防御“女巫攻击”,即恶意行为者可能创建无数虚假身份来压倒共识过程。工作量证明 (PoW) 的天才之处在于,它使得参与的成本高昂,不是通过身份,而是通过计算能力。为了提议下一个交易区块,参与者(或“矿工”)必须解决一个困难但任意的计算难题。这个过程是一种彩票式的共识,其全球性、去信任的性质要求其运行缓慢而审慎——长区块间隔和有限的区块大小——以确保网络有时间收敛。其结果是一个具有惊人弹性和抗审查能力的系统,但其吞吐量每秒仅有几笔交易,这使其不适用于像实时能源交易这样的高频应用。

物理世界:协调机器与机器人

共识的原则并不局限于比特和字节的数字领域。当它们应用于原子——协调无人机集群、自动驾驶车队或物理传感器网络时,它们同样强大。在这些信息物理系统中,需要达成一致的“状态”不是数据库条目,而是一个物理量:位置、轨迹、速度或对环境的估计。

考虑一组被建模为图中节点的自主代理,其任务是跟随一个领导者。只有一小部分代理——“钉住”的代理——可以直接接收到领导者的信号。整个集群如何能够一致地跟随?答案在于局部共识动态。每个代理根据其直接邻居的状态不断调整自身状态(例如速度),努力最小化局部差异。这种相互作用可以被图拉普拉斯矩阵 LLL 优雅地捕捉。当加入钉扎控制——对钉住的代理施加一个额外的、朝向领导者状态的推动力——时,整个系统的误差动态由一个修正的拉普拉斯算子 L+KpL+K_pL+Kp​ 控制,其中 KpK_pKp​ 代表钉扎增益。如果通信图是连通的,并且至少有一个代理被钉住,那么该系统保证是稳定的,整个集群会收敛到领导者的状态。这是一个优美的数学结果:你不需要控制每个代理;你只需要引导少数几个,网络的内在共识需求就会将其余的拉入队形。

共识对于分布式估计同样至关重要。想象一个传感器网络,每个传感器都在对一个共享的物理过程进行自己带噪声的测量,比如一个房间的温度或一个目标的位置。网络如何将这些局部的、不完美的视图融合成一个单一的、高质量的全局估计?一种天真的方法可能是让代理们平均它们各自的状态估计。但一种更强大、更有原则的方法是让代理们对它们的信息进行共识。

在卡尔曼滤波器的优雅框架中,一个估计不仅由一个均值状态组成,还包括一个不确定性(协方差矩阵)。它的逆矩阵,即信息矩阵,代表了从一次测量中获得的“知识”。来自独立测量的信息是可加的。因此,代理们可以各自计算它们的局部信息贡献,然后使用一个标准的共识协议来计算网络中所有信息的总和。通过这个全局信息总和,每个代理都可以重构出相同的、最优的、集中式的估计,就好像它可以访问所有传感器一样。它们不仅仅是平均各自的观点;它们是在集体聚合各自的知识。

超越机器:作为一致性模型的共识

共识的影响范围甚至更广,超越了工程学,进入了政策和社会协商的抽象建模。其数学结构为描述任何独立实体群体如何收敛于一个共同决策提供了强大的语言。

考虑在一个全球分布式系统中强制执行安全策略的挑战,例如基于角色的访问控制 (RBAC) 策略。当管理员撤销用户的角色时,此更改必须立即在所有地方生效。用户在别处权限被撤销后,不能够从网络分区中的服务器获得访问权限。这种“原子性撤销”是一个关键的安全要求,需要强一致性。这可以通过使用多数法定人数共识协议将所有策略更改提交到一个复制日志来实现。在网络分区的情况下,只有多数分区可以进行更改,而少数分区中的副本知道其状态可能已过时,可以执行“故障关闭”策略——在有疑问时拒绝访问——从而在保持查询可用的同时,维护全局安全。在这里,共识是将人类定义的策略转化为不可破坏的分布式规则的机制。

在其最抽象的形式中,达成一致的过程可以被看作是一个分布式优化问题。想象一组国家正在协商一个共同的贸易关税。每个国家都有自己的效用函数,自己的理想关税水平 θi\theta_iθi​,并希望找到一个对集体最有利的单一值 xxx。这个社会和政治过程可以用数学建模为一个算法。使用像交替方向乘子法 (ADMM) 这样的技术,这个协商可以被构建为一个共识过程,其中每个国家根据自己的偏好和群体的平均提议来迭代调整其建议的关税。通过这些轮次的“协商”,这个国家体系会收敛到一个单一的关税水平,从而最大化它们的总效用。

从数字队列到国际条约,其脉络是相同的。分布式系统的世界是一个由局部视角、独立行动者和不可避免的故障组成的世界。共识算法是我们驯服这种复杂性的基本工具——一个从分裂中创造统一、从混乱中创造秩序、从众声喧哗中创造单一共享真理的秘方。