Paxos、Raft、PacificA一致性算法笔记

1.    Paxos算法


Paxos算法是一个经典的分布式算法,它引入了提议者,接受者,学习者三种角色,generalize了二阶段提交模型。大致思想是,提议者通过竞争获得提议资格(超过半数认可),提议被多数接受者确认后即成事实,无法改变。它是基于以下假设的,后来的提议者无条件接受已经被大多数接受者认可的提议,接受者一旦接受某个提议者的提议,那么此轮中不再接受其他提议者。具体我们可以通过一个类比来加深理解,比如说有三个代表负责采集民意,决定明天去哪玩,并且经费由大家出。这个时候代表们会优先考虑出钱多的,但同时为了尽快达成妥协,一旦某人竞标成功,三个代表不能反悔,同时,如果这个提议已经被两个代表接受(多数),那么其他提议者也只能默默接受。于是整个过程其实分为两步,第一步就是出钱,竞标提议权。第二步就是,尽快向代表们提出自己的建议,获得认可。这里有一个问题,那就是如果一个提议者虽然竞标到了提议权,但它这时接到女朋友电话,暂时没去提议。而这个时候另一位土豪又出更多的钱,那么这个提议权是可以被抢夺的,然后新土豪如果抓紧时间让自己的想法通过,那么之前那位只能自认倒霉,或者大骂一句,去她姑奶奶的坏事!我们仔细想一下,这种设置也是合理的,因为网络环境是复杂多变的,实际应用中,很有可能一个提议者获得的提议后就直接挂掉了。如果提议权不允许被他人抢夺,那整个系统就gg了,在那瞎等。在实际应用中,这里的“钱”,往往是采用一个递增的序号,这样可以保证提议者是最新的。跟raft算法相比,没有明确区分的log replication和leader election过程,提议的过程本质上就是一个值的同步过程。

2.    Raft算法


1)    选主过程
过半数原则,保证每次只能选择一个leader。当有一个follower失联时,它就会发起投票申请成为leader。
2)    日志复制
更新通过leader来完成,减少复杂度。当绝大多数follower返回确认时,leader才会正式提交。
3)    保障机制
心跳机制:保持leader和follower的联系。
随机重启:防止同时出现多个candidate,陷入无限选主的环节。
时间周期:保证candidate掌握最新情况,拒绝一些过时candidate。每个失去联系的follower首先会将自己的term加一,然后再发出当leader的申请。

Raft算法的一个重要创新就是引入了(term)时序的机制,具体体现在,1)通过时序来排除掉那些长时间被隔离,缺少最新数据的node成为candidate。2)通过随机重启的方式避免冲突的发生。
友情链接:通俗易懂Raft算法官方动态图展示

3.    PacificA算法

PacificA严格来说不是一个算法,而是一个分布式一致性框架。它采用配置集群和存储集群的方式,实现数控分离,这点和SDN有点像。其中配置集群负责管理,具体说来是采用了ETCD方案,而ETCD又是采用raft算法来实现一致性的。具体说来,选主的过程可以概括为:从者失联,自立为王;主者失联,下野流放。还有一点有意思的是,这里也应用了一种叫做租约机制的玩意,形象的说就是一厢情愿。所谓一厢,指的是授权者颁布lease时,不会管接收方的状态。就像男孩子追女孩子一样,虽然有点傻,但一般男生在一段时间内会信守承诺,克服重重困难。但和所有靠谱承诺一样,都是会是有期限的。所以lease期限到后,双方都不认了,这时授权者又可以重新颁发lease,接收方也不相信这个lease的有效性。比如说,一台服务器发出lease,我在30秒内部改变数据,那么其他client就可以放心的在这30s内访问数据,不用担心数据不一致问题。30s后,其他client再收到lease就视而不见了。

你可能感兴趣的:(分布式)