
分布式系统|共识算法 Paxos
Paxos 算法是由 Leslie Lamport 在 1990 年代提出的一种基于消息传递共识算法。在讨论分布式算法时,Paxos 几乎是一个绕不开的话题。在过去的几十年中,它已经成为分布式共识的象征,许多流行的共识算法都是基于 Paxos 进行改进的,比如 Fast Paxos、Raft、ZAB 等协议。虽然 Paxos 算法可以认为是一些共识算法的基础,但是其本身也相对较复杂,理解起来有一定的难度。
Paxos 算法是由 Leslie Lamport 在 1990 年代提出的一种基于消息传递共识算法。在讨论分布式算法时,Paxos 几乎是一个绕不开的话题。在过去的几十年中,它已经成为分布式共识的象征,许多流行的共识算法都是基于 Paxos 进行改进的,比如 Fast Paxos、Raft、ZAB 等协议。虽然 Paxos 算法可以认为是一些共识算法的基础,但是其本身也相对较复杂,理解起来有一定的难度。
Raft 算法是一类基于日志复制的分布式共识算法,由于 Raft 算法易于理解和实现,在提出后,迅速获得了广泛关注,并成为了分布式系统中实际应用最广泛的一致性算法之一。目前,已经有十多种语言的 Raft 算法实现框架,比较有代表性的有 etcd、Consul,CockroachDB 等。
由于分布式系统中的程序是部署在多个节点上的,各个节点通过网络通信。一旦有网络通信,就会有网络的可靠性问题,延迟问题,以及各个节点的故障问题等等。可能出现有的节点能正常工作,而有的节点挂掉,导致有的请求达到正常节点就能正常处理,而打到故障节点又会失败。又或者因为网络故障,导致有的写操作在部分节点成功,而在另一些节点失败,总之可能存在种种状态不一致的情况,这些问题的存在影响着系统在高性能,高可用等方面的设计。
崩溃一致性是指系统在发生崩溃(例如服务器宕机、进程异常退出或断电)后,能够确保持久化的数据仍然处于一致的有效状态。也就是说,无论何时发生崩溃,系统存储上的数据要么保持崩溃前的完整更新,要么回退到崩溃前的稳定状态,不会出现部分更新导致的数据不完整或损坏。