Press "Enter" to skip to content

探索共识算法在分布式系统设计中的角色

在我第一份工程师的职位中,我在一家软件呼叫中心公司,我们想要为现有解决方案添加容错性。在多次无果的尝试发明共识算法之后,我们转向了 ClusterLabs’ Pacemaker。

几年后,在 Yandex 公司,我跳过了发明阶段,成为公司内第一个引入 Zookeeper 并使用它构建集群配置管理系统的人。后来,我使用了 etcd(Kubernetes 的基础)并为开源项目做出了贡献,改进了 etcd 的更新性能。

这段经历凸显了科技界更大的故事。在互联时代中,分布式系统成为了我们技术时代的无名英雄。分布式系统的普及是不可争议的,从维持为数以百万计的客户提供服务的大型电子商务公司,到支持加密货币的复杂结构。然而,在这个数字帷幕之下,存在着一个基本的挑战:在各个地点分散布置的许多组件之间达成共识的需要,这些组件经常容易受到故障或中断的影响。

共识算法的创新领域是解决这个问题的核心。确保分布式系统的协议是确保一致性和连贯性的基础。可靠性至关重要,它们是可靠性的设计者,数据一致性的守护者,容错性的保险人。在本文中,我邀请您更近距离地了解它们在分布式系统设计中的角色。

分布式系统的崛起

计算机科学在以令人难以置信的速度不断发展,目睹了重大范式转变:从以前的整体化主机到今天的微服务,数据处理方法发生了深刻的转变。随着过去的集中化模型日益不足以满足要求,数字世界需要更具灵活性、可扩展性和韧性的解决方案。

分布式系统时代应运而生。这些系统将任务和工作负载分散到多台机器或节点上,协作配合。这种设计在各个领域都变得不可或缺:例如,电子商务巨头利用分布式系统处理数百万的并发用户。同样,加密货币的存在和安全性归功于分布式网络的原则。

这种进步的核心是对自主性的需求。我们的世界越来越互联和数字化,规模、性能和可靠性的挑战要求一个可以扩展、适应和响应的系统。

定义分布式系统中的共识

在分布式系统的背景下,共识是让一组节点就一个单一的值或结果达成一致,即使发生故障和网络延迟。这种协议对于分布式系统的正常运行至关重要,它确保所有节点在地理位置分散的情况下协同一致地运行。

在追求共识的早期阶段,最早的挑战之一是由 “Two Generals’ Problem” 阐明的。这个问题突显了在分布式系统中实现绝对确定性的困难。即使具有完美的通信,也没有算法能够保证在节点可能失败或消息可能丢失的情况下达成共识。

此外,计算机科学家 Eric Brewer 提出的 CAP 定理形式化地规定了分布式系统在一致性、可用性和分区容错性之间必须进行权衡。根据 CAP 定理,一个分布式系统至多可以同时保证这三个属性中的两个。该定理为理解分布式系统中共识的挑战提供了基础性框架。

深入研究共识算法:核心概念

我们已经讨论了分布式系统中共识的概念,知道如果节点不就数据的状态达成一致,会导致数据不一致,引发系统故障甚至数据丢失。

许多共识算法的核心概念是领导者选举,因为它确定了负责协调和做出决策的单个节点。换句话说,这个领导者确保系统中的所有节点就共同的值或决策达成一致,促进秩序,防止分布环境中的冲突。

容错性也是共识算法的关键方面,它使系统能够在节点故障、网络分区或其他意外问题存在的情况下继续运行。

一致性、可靠性和容错性是主要保证之一。它们确保一旦达成共识,行动便是不可撤销的,并在整个系统中得到一致的认可,为多个分布式系统,包括数据库、区块链和云服务提供了基础。

共识算法:从经典到新颖

Paxos

Paxos以希腊岛屿命名,是最著名的共识算法之一。由Leslie Lamport于20世纪80年代后期引入,Paxos的主要目标是确保在节点故障的情况下系统的一致性。

该协议以一系列轮次运作,并涉及提议者,接受者和学习者等角色。关键阶段包括提出一个值,收集响应,最终达成一致意见。Paxos的正式性常常导致其在实施中面临挑战,但其持久力宣示了其作为基础的重要性。

Raft

Raft是由Ongaro和Ousterhout于2013年引入的。与Paxos不同,Raft被设计成易于理解,而不会影响效率和保证。

Raft将共识过程分解为几个关键步骤:领导者选举,日志复制和安全性。其模块化和明确的角色和阶段界定使其成为许多现代分布式系统的首选。

ZAB:ZooKeeper的原子广播

ZooKeeper的原子广播(ZAB)对Apache Zookeeper的运作至关重要,它提供了分布式同步服务。ZAB确保所有对系统状态的更改(写入)可靠地传播到系统中接收到的顺序的所有节点,确保系统范围的一致性。

ZAB在两个主要模式下运行:恢复和广播。恢复模式处理领导者选举和同步副本,而广播模式处理状态更新。

然而,除了更传统的算法之外,还有下一代算法来解决新问题和困境,如潜在的恶意节点和区块链技术的独特需求。

实用的拜占庭容错(PBFT)

超越良性故障的假设,PBFT于20世纪90年代末引入,用于处理节点可能恶意行为的拜占庭故障。它关注的是尽管某些节点表现出任意行为,系统仍能达成共识。

PBFT按序列化处理视图,每个视图都有一个主节点和备份节点。该协议涉及三个主要阶段:预准备,准备和提交,确保至少有2/3的节点在继续前达成一致意见。

HoneyBadgerBFT

加密货币和区块链为共识带来了新的挑战。HoneyBadgerBFT受到蜜獾的韧性启发,旨在处理此类系统的异步性质。与假设某些同步性的其他算法不同,HoneyBadgerBFT在网络延迟是不可预测的假设下运作。

它采用阈值加密等密码技术对交易进行批处理,确保不受网络条件影响的系统进展。

Tendermint

Tendermint将PBFT风格的共识与现代区块链的需求结合起来。它提供了一种模块化方法,其中共识和应用层是分离的,使其适应各种应用场景。

Tendermint的协议包括轮次和高度,要求在最终确定决策之前获得2/3多数的投票,确保系统活性和安全性。

因此,Paxos、Raft和ZAB是经典的共识算法,主要用于确保分布式系统中的系统一致性,针对常见的故障情况。相比之下,PBFT、HoneyBadgerBFT和Tendermint则针对拜占庭容错。

现实世界的应用

共识算法的基本原理被广泛应用于各种各样的现实世界中。在最前沿的是区块链技术,通过共识协议(如工作证明和股权证明),区块链确保交易安全、不可撤销地记录下来,以分散化的方式建立信任。

同时,分布式数据库(如Google Spanner和CockroachDB)使用共识来确保多个节点之间的数据一致性。由于数据在地理上分散以增强可访问性和弹性,因此维护统一的真实版本变得至关重要。前面提到的Paxos和Raft等算法在确保每个数据操作在网络中一致反映方面起到了关键作用。

最后,广阔的云计算领域(承诺为数百万用户提供可靠的服务)依赖共识。从管理分布式存储到编排容器化应用程序,共识确保容错,确保即使云基础设施的一部分出现故障,整体服务也不受影响。

然而,共识算法在建立今天的数字基础设施的同时,也面临着不断发展的挑战,并为未来提供了有趣的前景。

结论:挑战和未来方向

就共识而言,可扩展性成为致命弱点。在分布式系统中,随着节点和交易数量的增加,高效实现共识变成了一项巨大的任务。

在这个领域,像Google的Chubby这样的工具发挥着重要作用。Google Chubby是用于松耦合分布式系统的锁服务,是一些现代系统如何在可扩展环境中解决共识问题的典范。借助Chubby,Google能够确保其庞大基础设施的协调性和可靠性,与分布式环境中的高效共识方法更广泛的背景相一致。在将共识应用于可扩展环境的回顾性论文中,还提到了在实施过程中面临的进一步挑战,例如处理磁盘损坏、主节点状态丢失、数据库事务问题等。

同时,特别是在区块链领域,人们对能源效率的关注日益凸显。像比特币所依赖的工作证明协议一样,要求大量的计算能力,导致不可持续的能源消耗。这种环境足迹促使研究人员和产业界寻求更可持续的共识机制。

量子计算也出现了,提供了威胁和机遇。其无与伦比的计算能力可能破坏许多现有的共识算法,特别是加密方法,使其变得脆弱。

最后,在应对这些挑战的同时,新兴的共识算法铺平了前进之路。创新旨在解决当下的限制,协调效率与安全。从分片技术将网络划分为改善可扩展性的部分,到混合共识方法结合现有算法的优点,共识的未来开启了许多可能性。

Leave a Reply

Your email address will not be published. Required fields are marked *