
想象一下,你是一位军队的将军,驻扎在俯瞰山谷的山顶上。在对面的山顶上,是你的同一支军队的另一位将军。山谷下方坐着敌人。你和你的将军同袍已经同意发起攻击,但你们必须在同一时间攻击,才有胜利的希望。唯一的协调方式是通过派遣信使,而信使必须穿过敌人占领的山谷。问题是,你不知道你的信使是否能成功抵达。如果你发送一条消息说“黎明时分进攻”,你无法确定对方是否收到,除非你收到回执。但是,你的将军同袍也无法确定你是否收到了回执。这种情况可以永远持续下去。你陷入了一个无限循环的不确定性之中,攻击永远不会发生。
这个被称为“两将军问题”的思想实验,抓住了分布式系统中的核心挑战:在一组独立的参与者之间,通过不可靠的通信渠道达成共识(agreement)。在数字世界里,将军是计算机服务器,信使是网络上的数据包,而“山谷里的敌人”就是互联网本身的不可预测性——消息可能会丢失、重复,或者最令人烦恼的是,被任意长时间地延迟。
让我们把场景描述得更精确一些。我们有一组计算机进程,它们需要就单个值(比如,账本中的下一个交易区块)达成一致。每个进程都运行着相同的确定性程序。网络是异步的——消息保证最终会到达,但可能需要多长时间没有上限。更糟糕的是,一些进程可能会因“崩溃”而失败——它们只是永远停止工作。
在这个看似合理的设定中,我们能否编写一个程序,保证每个未崩溃的进程最终都会决定相同的值?1985年,三位研究人员——Fischer、Lynch 和 Paterson——给出了一个惊人的答案:不可能。这就是著名的 FLP 不可能定理。
其证明过程既优雅又深刻。它设想系统处于一个犹豫不决的状态,或称双值状态,即最终达成一致的值可能倾向于‘A’也可能倾向于‘B’,这取决于下一条到达的消息是哪一条。FLP 证明表明,一个对手,其唯一的权力就是控制消息传递的时序(这在异步网络中是完全合法的),总能找到一条关键消息并将其延迟。通过延迟这条消息,对手可以让系统在双值状态的刀刃上摇摆不定,从而阻止进程安全地做出决策。如果它们过早决定,就有可能出现“裂脑”式的不一致。如果它们为了等待那条被延迟的消息而永远等待下去,它们就永远无法取得进展。因此,任何安全的确定性协议都可能被置于一个永不终止的状态。
如果完美的一致性是不可能的,那么像谷歌、亚马逊或任何区块链这样的系统是如何存在的呢?答案是我们必须放宽我们对“正确性”的定义。我们被迫做出权衡。传统观念中的“完全正确性”——即算法必须总能终止并给出正确答案——对于分布式计算这个混乱的真实世界来说过于苛刻。
取而代之的是,我们将正确性分解为两个不同的属性:
安全性:该属性指出“坏事永远不会发生”。对于共识而言,这意味着系统绝不会产生不正确的结果。例如,不会有两个进程决定不同的值。安全性是至高无上、不可妥协的保证。
活性:该属性指出“好事终将发生”。对于共識而言,这意味着每个正确的进程最终都会决定一个值。系统会持续取得进展。
FLP 定理告诉我们,在存在故障的异步系统中,我们无法无条件地同时保证安全性和活性。几乎所有现实世界系统所采纳的解决方案是绝对优先保证安全性。像 Paxos 这样的算法——许多共识协议的鼻祖——无论网络变得多么混乱,都绝不会违反安全性。然而,它牺牲了活性的保证。在完美的对手时序控制下,它可能无法取得进展。为了恢复活性,我们需要对 FLP 不可能定理的前提进行“作弊”。
既然我们无法在完美的理论世界中构建我们的系统,我们就必须找到聪明的方法,稍微改变异步模型的规则,从而使取得进展成为可能。有三条主要路径可以摆脱 FLP 陷阱。
纯粹的异步模型是一片纯粹的混乱之地。如果我们假设现实世界并不总是那么病态呢?这就引出了一系列的网络模型:
这个部分同步的假设是我们的第一个作弊手段。它允许我们有意义地使用超时。一个算法可以从一个短超时开始。如果失败,它就增加超时并重试。最终,超时会变得比实际(但未知)的网络延迟更长,从而允许一个领导者被稳定地选举出来,并推动系统做出决策。这是许多实用算法,包括实用拜占庭容错 (PBFT) 的构建基础。
FLP 对手的威力在于它能完美预测确定性系统的下一步行动。如果系统的行动不是确定性的呢?这是我们的第二个作弊手段:引入随机性。
如果我们的将军们,在他们不确定的循环中陷入困境时,能够同意抛硬币来做决定,那么对手的完美计划就会被挫败。一个随机化算法可以使用随机抛硬币来打破对手试图构建的对称、双值状态。虽然对手可能会幸运地在几轮中延迟进展,但它永远成功的概率会变为零。这使得算法能够以概率 1 终止。
这就是最著名的共识机制——比特币中使用的工作量证明 (PoW) 背后的秘密。 “挖矿”过程本质上是一场大规模的全球彩票。解决一个困难计算难题的参与者可以提议下一个区块。这个难题非常难,以至于没有人能预测下一个赢家是谁。领导者选择的这种随机性使得网络能够不断取得进展,从而绕开了 FLP 陷阱。
第三种,更理论化的方法是,想象为我们的异步系统配备一个叫做故障检测器的神奇黑匣子。这个预言机提供关于哪些进程可能已经崩溃的提示。这些提示可能不可靠——它们可能会出错或改变主意——但如果它们“最终准确”,它们就能提供足够的信息来打破双值状态,并允许一个确定性算法终止 [@problemid:4264576]。这种方法揭示了要规避不可能性究竟需要多少信息的优美的理论边界。
这些理论原则催生了两大类共识机制,每一类都适用于不同的社会和技术世界。
这是像比特币和以太坊这样的公共区块链的世界。世界上任何人都可以加入、参与并保持匿名。这种开放性很强大,但也造成了一个巨大的漏洞:女巫攻击。一个对手可以创建数百万个虚假身份(“女巫”),并利用它们来压倒网络的投票过程。
为了应对这种情况,无需许可的系统必须让参与变得昂贵。你不能仅仅创建一个身份;你必须赢得它。
这种密码经济学防御机制非常巧妙,但它带来了一个关键后果:概率性最终确定。一个区块永远不是 100% 最终确定的。它的最终确定性是一个概率,随着在其上构建更多区块(称为“确认”)而增强。对于日常交易,等待几次确认是可以的。但想象一个信息物理系统,其中一个数字孪生体控制一个物理机器人,要求在 8 毫秒内做出决策。像 PoW 这样的共识机制,平均出块时间为数秒或数分钟,将是灾难性的。延迟和抖动(延迟的变化性)将使任何实时控制成为不可能。在这个世界里,主要威胁是能够积聚超过总资源一半(在 PoW 中是哈希算力,在 PoS 中是权益)的对手,即所谓的 51% 攻击。
这是企业和联盟区块链的世界。在这里,参与不是开放的。参与者是一组已知的、经过审查的实体——比如共享一个医疗保健账本的一组医院 或管理供应链的组织。身份不是通过昂贵的计算来处理,而是通过法律协议和公钥基础设施 (PKI) 来处理。
由于女巫问题通过治理得到解决,因此不需要资源密集型的挖矿。取而代之的是,这些系统可以使用高效的“经典”共识算法。这些协议的核心安全机制是法定人数交集这一优雅的数学属性。法定人数是其同意是做出决策所必需的参与者子集。法定人数的大小被选择为使得任意两个法定人数都保证至少有一个共同成员。这种重叠确保了系统永远不会产生“裂脑”并同意两件不同的事情。
容忍崩溃故障 (CFT):在参与者被信任不会作恶但可能因崩溃而失败的更简单模型中,使用像 Paxos 或 Raft 这样的协议。它们需要一个简单的多数法定人数。对于一个有 个节点的系统,法定人数大小为 。这个简单的公式保证了任意两个法定人数都会重叠,从而保持系统状态的单一、一致的日志。
容忍恶意行为 (BFT):在更敏感的应用中,必须假设一些参与者可能被攻破或主动恶意行为(即所谓的拜占庭故障)。一个拜占庭节点可以撒谎并发送冲突的消息来试图破坏共识。为了容忍这种情况,我们需要一个更强的协议,如 PBFT。它需要一个更大的法定人数和更复杂的多轮投票过程。它的基本规则是,只要节点总数 ,它就可以容忍多达 个恶意节点。对于一个由 13 家医院组成的联盟,这意味着即使有多达 家医院变为恶意,系统仍然安全。一次攻击需要与 个验证者勾结,阈值约为 38.5%,而不是 51%。
这种需要许可的设置带来的回报是巨大的:确定性最终确定。一旦一项交易被法定人数同意——这个过程可能只需几毫秒——它就立即且不可逆转地最终确定了。这使得 BFT 协议成为高性能、安全关键应用的唯一可行选择,比如用 PoW 无法实现的实时机器人控制回路。
从完美一致性的不可能到 PoW、PoS、Raft 和 PBFT 的丰富景观,这段旅程见证了计算机科学的创造力。机制的选择不仅仅是一个技术细节;它深刻反映了一个系统的哲学——其对信任的假设、对失败的容忍度以及对风险的偏好。其美妙之处不在于找到一个单一、完美的解决方案,而在于理解其中的权衡,并为其所要栖息的世界选择正确的工具。
在我们迄今的旅程中,我们探索了共识的基本原则,这是一套巧妙的规则,让一组独立的计算机能够就一个单一的、共享的真理达成一致,即使在某些成员出现故障或通信线路嘈杂的情况下也是如此。我们已经看到它作为分布式计算的一大胜利,一种构建比任何单一组件都远为坚韧的数字系统的方法。
但是共识的故事远比这更宏大、更深刻。事实证明,从多样性中锻造统一,从不可靠的部分创建可靠的整体,是一个普遍的问题。自然界和人类社会亿万年来一直在发明它们自己的共识协议。在本章中,我们将走出数据中心,去看看这个基本思想在最意想不到的地方发挥作用——从我们细胞中分子的复杂舞蹈到科学知识的结构本身。我们将发现,共识不仅仅是一种算法;它是宇宙创造秩序和智能的核心策略之一。
让我们从共识的本土领域开始:计算机世界。最直接的应用,也是这些算法最初被设计的目的,是创建容错服务。想象一个关键系统,比如银行的交易日志或电网的控制系统。把它托付给单台计算机会是灾难的根源;一次硬件故障就可能是灾难性的。
解决方案是状态机复制 (SMR)。我们在多台机器上运行我们服务的相同副本,并使用共识算法来确保它们都以完全相同的顺序处理完全相同的命令序列。如果一台机器发生故障,其他机器可以无缝地继续运行。这是通过维护一个复制日志——一个由群体商定的所有操作的不可变历史记录——来实现的。
但是当一台新机器加入,或者一台故障机器恢复上线时会发生什么?它需要赶上系统的整个历史,这可能非常庞大。而且,如果为了节省空间,活动机器已经将它们日志的最旧部分压缩成一个摘要,即某个时间点的状态“快照”,那该怎么办?这是一个实际且关键的挑战。如果共识组的领导者已经丢弃了缺失的日志条目,它就不能简单地发送它们。在这种情况下,唯一的办法是领导者将其最新的快照发送给落后的机器。一旦跟随者加载了这个快照,它就立即被带到一个最近的状态,然后可以像任何其他对等节点一样恢复接收新的日志条目流。这个机制不仅仅是一个优化;它是任何真实世界共识系统长期健康和可行性的基本要求。
有了这个容错复制的基石,我们就可以构建更复杂的系统。考虑一个现代数据中心,其中有一组网络地址转换 (NAT) 网关,它们都共享一个公共 IP 地址。当内部计算机想要连接到互联网时,这些网关之一必须为其分配一个唯一的临时端口号。如果两个网关意外地同时将相同的端口分配给两个不同的连接,就会出现混乱——数据包将发送到错误的地方。你如何在多个独立的机器之间协调这种分配?你可以指定一个单一的“端口主管”,但这会产生一个单点故障。
这是共识的完美用武之地。这组 NAT 网关可以使用共识协议来管理可用端口池。一个特别优雅的解决方案涉及共识领导者向每个网关授予不相交端口块的限时“租约”。在一段时间内,一个网关拥有从其分配的块中分配端口的独占权限,这是一项它可以快速执行而无需咨询群体的任务。在它的租约到期之前,它会请求续约。如果一个网关或领导者发生故障,共识协议确保选举出新的领导者,并且在一个安全超时期限(为考虑机器之间的时钟偏斜而精心计算)之后,死掉的网关的租约可以被安全地重新分配。这种设计既提供了安全性——没有端口冲突——也提供了活性——即使某些机器发生故障,端口分配也可以继续进行。这是一个美丽的例子,说明了共识如何允许创建既安全又高效地管理共享资源的去中心化、健壮的系统。
共识的力量远远超出了就日志条目或端口分配等简单事实达成一致。它可以成为一个更宏伟目标的强大引擎:协作学习。
在大数据和人工智能时代,我们常常面临一个两难的境地。我们想在庞大的数据集上训练一个机器学习模型,但这些数据通常是敏感的,并且分布在许多地方——想想不同医院的医疗记录或数百万部手机上的个人数据。强迫每个人将他们的私人数据上传到中央服务器是一场隐私噩梦。
联邦学习提供了一个解决方案,而共识是其关键的赋能技术之一。想象一个由“数字孪生”——电网子系统的虚拟模型——组成的网络,它们希望协作学习一个模型来预测故障。在一种去中心化的、基于共识的方法中,每个数字孪生都以全局模型的副本开始。它仅在自己的私有数据上本地训练这个模型,然后只将其更新的模型参数传达给网络中的直接邻居。然后,每个孪生体计算其自身模型和从邻居那里收到的模型的加权平均值。这个本地训练和点对点共识平均的循环被重复。奇迹般地,在适当的数学条件下,这个过程使得每个节点的参数能够收敛到如果所有数据都在一个地方学习时会得到的那个最优模型。不需要中央服务器,这使得系统对单点故障具有鲁棒性,并且更能抵抗“掉队者问题”,即整个系统必须等待最慢的参与者。
我们可以将这种集体智慧的思想推得更远。想象一下,一群自主无人机或传感器试图跟踪一个移动的物体。每架无人机都有自己充满噪声的传感器,并且只能看到画面的一部分。它们如何融合各自不完美的测量,以得出一个单一的、高度准确的对目标真实状态的“上帝视角”?这就是分布式状态估计的领域。
一个非常优雅的解决方案使用了著名的卡尔曼滤波器的一个变体,但以“信息”的方式重新表述。代理们不是分享他们对状态的最佳猜测,而是分享他们的本地“信息贡献”——一个表示从他们最新的传感器读数中获得的新知识的数学量。然后他们使用一个共识协议来完美地加总整个网络中所有的信息贡献。一旦每个代理都有了这个全局信息总和,它就可以计算出一个最终的状态估计,这个估计在数学上与一个假设的、能够同时访问所有传感器的集中式超级计算机会计算出的结果相同。这是一个深刻的结果:通过简单的本地对话,整个集群作为一个整体实现了最优的全局理解。
分布式代理使用本地规则来实现连贯的全局结果的想法,可能看起来像是计算机科学最近的发明。但是,大自然这位终极修补匠,在数十亿年前就偶然发现了这些原则。我们自己的身体,实际上是由数万亿个代理——细胞——组成的网络,它们必须不断地协调和达成一致。
考虑一下基因转录这个基本过程。一个基因的启动子就像一个微小的计算设备,整合来自不同信号通路的众多信号,来决定是“开启”还是“关闭”基因。一些通路可能发送“激活”信号,而另一些则发送“抑制”信号。由于分子噪声或串扰,其中一些通路可能行为异常——从某种意义上说,它们是“有故障的”。细胞需要一个能够容忍这些故障的健壮决策机制。它必须满足两个属性:安全性——它绝不应同时决定激活和抑制,因为这将是无意义的。以及活性——如果存在一个真正的、压倒性的激活信号,就必须做出决定。
这个问题在结构上与分布式计算中的拜占庭协议相同。如果我们将调控复合体建模为需要一个由 个“激活”信号组成的法定人数来开启,和一个由 个“抑制”信号组成的法定人数来关闭,我们就可以推导出对 的数学约束。如果总共有 个通路,并且最多有 个可能出现故障,那么为了保证安全性,法定人数大小必须满足 。为了保证活性,它必须满足 。对于一个比如有 个信号输入,其中最多 个是不可靠的细胞,满足这两个条件的最小整数法定人数是 。容错计算的逻辑为活细胞的逻辑提供了一个清晰、可预测的模型,这一事实惊人地证明了这些原则的统一力量。
共识的主题也出现在阅读生命之书的现代科学中:基因组学。一个生物体的基因组是一个单一的、真实的序列。但我们阅读它的方法,比如单分子实时 (SMRT) 测序,是不完美的。它们产生长但充满噪声的DNA“读序”。我们如何从嘈杂的数据中得到真实的序列?
一种强大的技术是环形共識測序 (CCS)。一个單一的DNA分子被变成一个圆圈,并一遍又一遍地通过一个分子读取机器。这会产生同一个分子的多个“子读序”。由于读取错误主要是随机的,机器在每次通过时在相同位置犯相同错误的可能性极小。通过在每个位置对多个子读序进行多数投票,我们可以计算出一个“共识”序列,其错误率比任何单个子读序低几个数量级。这是最纯粹形式的共识:从多个噪声副本中生成一个高保真信号。
这个过程可以变得更加复杂。简单的多数投票对随机错误效果很好,但对于倾向于在特定序列上下文(如长串的相同碱基)中发生的系统性错误怎么办?为了解决这个问题,生物信息学家开发了先进的“润色”算法。一些算法,如 Arrow 算法,使用生成式统计模型(隐马尔可夫模型)来计算在给定一个假设的真实序列的情况下观察到这些读序的可能性,然后找到使这个概率最大化的序列。其他的,如 DeepConsensus,则使用判别式方法,训练一个深度神经网络直接从数据中学习复杂的错误模式并预测正确的碱基。这类似于一个专家小组,一些人使用深奥的理论模型,另一些人使用训练有素的直觉,共同努力重建一个单一的、潜在的真相。
在见证了共识在硅和蛋白质中的作用后,我们来到它的最后一个,也许是最复杂的领域:我们自己的人类社会。我们作为一群易犯错误的个体,如何得出可信的结论,做出公平的决定,并建立行为标准?我们是通过正式和非正式的协议来做到的,这些协议与我们一直在研究的算法有着深刻的类比。
考虑一个高风险的医疗诊断。一位放射科医生阅读CT扫描以检查是否存在危及生命的状况,如颅内出血。单次读片是会出错的。因此,医院可能会实施双重读片协议。但是应该如何结合这两种意见呢?如果漏诊(假阴性)的代价极高,最佳策略可能是“任一阳性”规则:如果任一放射科医生看到可疑之处,就发出警报。这以更多的假警报为代价,最大化了敏感性。然而,如果假阳性(不必要的、有风险的干预)的代价是主要考虑因素,那么最佳策略可能是“共识阳性”规则:只有当两位放射科医生都同意诊断时才采取行动。这最大化了特异性。“正确”共识规则的选择不是绝对的;它是一个依赖于上下文的决定,基于对风险和收益的仔细权衡。
在我们日益数字化的世界中,这种对可信、可审计的协议的需求正在爆炸式增长。考虑使用区块链——一种围绕密码学共识协议构建的技术——来维护临床样本的监管链。区块链的不可变、去中心化账本提供了强大的防篡改证据,这对于确保记录的完整性非常好。但正是这种不可变性与欧洲的 GDPR 等以人为中心的法律产生了深刻的冲突,后者赋予个人“被遗忘权”。你不能从不可变的日志中删除数据。这是否意味着该技术无用?不。这意味着技术共识机制必须整合到一个更大的社会法律框架中。一个聪明的解决方案是在区块链上只存储加密哈希和匿名指针,而将敏感的个人数据保存在传统的、可擦除的链下数据库中。区块链提供了一个不可变的事件审计 trail(包括撤销同意),而链下系统执行法律要求的操作,如数据删除。这种混合方法表明,技术共识必须服务于,而不是取代,人类的治理和价值观。
最后,让我们放大到最高层面:整个专业领域,如医学,是如何建立“诊疗标准”的?它是通过创建集体认知产品,如临床实践指南来实现的。一个可以被可信地用来评判专业行为的指南,不能仅仅是几个著名医生的意见。要具有合法性,其创建必须遵循一个严格、透明的协议。这种知识共识的社会协议包括:对所有可用证据的系统性回顾,使用结构化方法对证据质量进行分级,由一个管理利益冲突的多学科委员会(包括方法学家和患者代表)进行审议,以及至关重要的是,一段外部同行评审和公众评论的时期。每一步都旨在对抗偏见,融入不同视角,并将主张置于有组织的怀疑之下。这是一个人类规模的、社会化的容错共识协议的实现。
从计算机的心脏到细胞的心脏,从机器人群到医生小组,对共识的追求是相同的。它是从像我们自己一样天生有限且易犯错误的个体部分中,构建可靠、智能和可信赖的整体的艺术。它是宇宙中最深刻、最美丽的模式之一。