当前位置: 首页 > 科技观察

Paxos和Raft不是共识算法-协议吗?

时间:2023-03-12 07:21:39 科技观察

作为互联网的一员,我们常常沉浸在“分布式”的氛围中——高可用、高可靠、高性能等词汇随处可见,CAP、BASE、2PC、Paxos、Raft等我自己动手捏。然而,在我们“不严谨”的交流中,有些词语逐渐被误用或含糊不清。今天,我们简单谈谈“Consistency”这个词,即一致性。Paxos、Raft等常被误称为“共识算法”。但“一致性”和“共识”不是同一个概念。Paxos、Raft等其实都是共识(Consensus)算法。LeslieLamport于1998年发表了一篇关于ACMTransactionsonComputerSystems的文章《The Part-Time Parliament》[1],这是Paxos算法的首次公开发表。但是发表之后,很多人还是觉得原文太难懂了。后来,Lamport又写了一篇文章《Paxos Made Simple》[2]。当我们想了解Paxos的时候,可以直接看这篇文章。回到正题,我们在《Paxos Made Simple》中搜索“Consistency”这个词,如下图,其实没有匹配到的结果。相比之下,当我们搜索“共识”一词时,有很多匹配项。也就是说,Paxos论文中并没有提到Consistency这个词,那“Paxos是一种一致性算法”这句话是怎么来的呢。与此类似,在Raft论文的开头就给出了Raft的明确定义《In Search of an Understandable Consensus Algorithm (Extended Version)》[3]:Raft是一种共识算法....注意这里是共识,不是一致性。这时候,我们不妨再翻开字典。乍一看,字典中Consistency和Consenus的翻译差不多,都是“一致”的意思,但细细研究却有所不同:Consistency:一致性,Consensus:共识,一致意见。从专业的角度来说,我们通常所说的分布式系统中的一致性(Consistency)是指同一数据的多份数据的一致性,比如强一致性、顺序一致性、最终一致性等,都是用来描述副本问题的一致性。共识(Consensus)则不同。简单来说,共识问题就是需要多个节点通过一定的算法达到相同状态的过程。一致性强调结果,共识强调过程。《分布式系统概念与设计》一书对共识问题的定义是这样的:为了达成共识,每个进程pi最初都处于未定状态,并从集合D中提出一个值vi。进程之间相互通信,交换值。然后每个进程设置决策变量di的值。在这种情况下,它进入决定状态。在这种状态下,他不再改变di。下图显示了参与共识算法的3个进程。两个进程建议“继续”,第三个进程建议“放弃”但随后崩溃。两个仍然为真的过程决定“继续”。(其中i=1,2,...,N;j=1,2,...,N。)共识算法要求在每次执行中满足以下条件:Finality:每个正确的进程最终都会做出决定多变的。一致:所有正确的进程具有相同的决策值,即如果pi和pj都正确并进入决策状态,则di=dj。完整性:如果所有正确的进程都提出了相同的值,那么任何处于决策状态的正确进程都选择了该值。在共识问题中,所有节点最终必须达成共识。由于最终目标是所有节点必须达成共识,所以没有强弱一致性之分。因此,当我们以后看到“Paxos是一种强共识算法”、“Raft是一种强共识协议”等类似说法时,我们需要用“审视”的眼光来看待后面的内容。在我们大多数人的大部分工作内容中,一致性(Consistency)和共识(Consensus)的区别其实是无伤大雅的。但是如果我们要提高一个维度,深入研究分布式领域的内容,那么如果对这些最基本的概念区分不清,将会极大地阻碍后续的学习过程。字越近,越要分清。即使是同一个词也有不同的含义。比如CAP和ACID中的C是Consistency的缩写,但是两者在各自的场景中的含义是不一样的。ACID的C是指事务中的一致性。在对数据的一系列修改操作中,保证了数据的正确性。也就是说,在交易过程中对数据的多次操作中,数据不会凭空消失或增加,数据的每一次增删改查都存在因果关系。比如用户A给用户B转了200元,就不会出现用户A扣了钱而用户B没有收到的情况。在分布式环境中,多个服务之间的复制是异步的,需要时间,不会瞬间完成。某个服务节点的数据修改后,有一定的时间间隔才会同步到其他服务节点。如果在这个区间内有并发的读请求,并且这些请求被负载均衡到多个节点,那么可能会出现多个节点的数据不一致的情况,因为请求可能会落在还没有完成数据同步的节点上。CAP中的C是保证在分布式环境下读取的数据是一致的。总的来说,ACID中的C强调的是操作单个数据库事务时数据的完整性和正确性,而CAP理论中的C强调的是一个数据的多次备份的读写一致性。今天的知识点有什么想说的吗?不妨在留言区留下你的想法。参考http://lamport.azurewebsites.net/pubs/lamport-paxos.pdfhttp://lamport.azurewebsites.net/pubs/paxos-simple.pdfhttps://raft.github.io/raft.pdf《浅谈CAP误用》共识”分布式共识(Consensus)与Paxos共识算法:ViewstampedReplication,Raft,andPaxos