作为互联网中的一员,我们时常沉浸在“分布式”的氛围当中——高可用、高可靠、高性能等等词汇随处可见,CAP、BASE、2PC、Paxos、Raft等等名词也能信手捏来。

作为互联网中的一员,咱们经常沉浸在“分布式”的气氛傍边——高可用、高牢靠、高性能等等词汇随处可见,CAP、BASE、2PC、Paxos、Raft等等名词也能信手捏来。不过,有些词在咱们“并不谨慎”的传达中逐步被误用了,或者说含糊不清了。今日,咱们来简略聊聊“Consistency”这个词,即共同性。

 Paxos、Raft不是一致性算法/协议?(paxos算法和raft算法) Paxos Raft 协议 第1张

Paxos、Raft等一般被误称为“共同性算法”。可是“共同性(Consistency)”和“共同(Consensus)”并不是同一个概念。Paxos、Raft等其实都是共同(Consensus)算法。

Leslie Lamport于1998年在ACM Transactions on Computer Systems上宣布了一篇《The Part-Time Parliament》[1]的文章,这是Paxos算法第一次揭露宣布。可是宣布之后,许多人仍是觉得本来那篇太难理解了,之后Lamport又写了一篇《Paxos Made Simple》[2],当咱们想要学习一下Paxos的时分,能够直接看看这篇。

回到正题,咱们在《Paxos Made Simple》中查找“Consistency”一词,如下图所示,其实是毫无匹配成果的。

 Paxos、Raft不是一致性算法/协议?(paxos算法和raft算法) Paxos Raft 协议 第2张

反观,咱们查找“Consensus”一词的时分,却呈现了许多匹配项。

 Paxos、Raft不是一致性算法/协议?(paxos算法和raft算法) Paxos Raft 协议 第3张

也便是说,Paxos论文通篇提都没提Consistency一词,何来的“Paxos is a consistency algorithm”的说法。

与此相似的是,在Raft论文《In Search of an Understandable Consensus Algorithm (Extended Version)》[3]中开始就对Raft给出了清晰的界说:Raft is a consensus algorithm....,留意这里是consensus,而不是consistency。

 Paxos、Raft不是一致性算法/协议?(paxos算法和raft算法) Paxos Raft 协议 第4张

这时分咱们无妨再翻开字典。乍眼一看,字典中Consistency和Consenus译意挨近,都有“共同”的意义,可是细心深究又有所不同:Consistency:共同性,Consensus:共同、共同的定见。

 Paxos、Raft不是一致性算法/协议?(paxos算法和raft算法) Paxos Raft 协议 第5张

 Paxos、Raft不是一致性算法/协议?(paxos算法和raft算法) Paxos Raft 协议 第6张

从专业的视点来讲,咱们一般所说的共同性(Consistency)在分布式体系中指的是关于同一个数据的多个副本,其对外体现的数据共同性,如强共同性、次序共同性、终究共同性等,都是用来描绘副本问题中的共同性的。而共同(Consensus)则不同,简略来说,共同问题是要通过某种算法使多个节点到达相同状况的一个进程。共同性着重成果,共同着重进程。

《分布式体系概念与规划》一书中对共同问题进行了如下界说:为到达共同,每个进程 pi 开始处于未决(undecided)状况,而且提议调集D中的一个值 vi 。进程之间相互通讯,交流值。然后,每个进程设置一个决议变量(decision variable)di 的值。在这种状况下,它进入决议(decided)状况。在此状况下,他不再改动di。

下图中给出了参加一个共同算法的3个进程。两个进程提议“持续”, 第三个进程提议“抛弃”但随后溃散。坚持正确的两个进程都决议“持续”。(其间i = 1, 2, ……, N; j = 1, 2, ……, N。)

 Paxos、Raft不是一致性算法/协议?(paxos算法和raft算法) Paxos Raft 协议 第7张

共同算法的要求是在每次履行中满意以下条件:

  • 停止性:每个正确进程终究设置它的决议变量。
  • 协定性:一切正确进程的决议值都相同,即假如 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.pdf

http://lamport.azurewebsites.net/pubs/paxos-simple.pdf

https://Raft.github.io/raft.pdf

浅谈 CAP 和 Paxos 共同算法

被误用的“共同性”

分布式共同(Consensus):Viewstamped Replication、Raft以及Paxos

转载请说明出处
知优网 » Paxos、Raft不是一致性算法/协议?(paxos算法和raft算法)

发表评论

您需要后才能发表评论