Paxos 提出时间1990年,RAFT提出时间2013年。RAFT 是Paxos的简化版,或者说是提高投票效率,但是降低了投票公平性的妥协方案。
RAFT
分布式raft(Replicated And Fault Tolerant)选举算法原理
-
分成三个角色,领导者,跟随者,和候选者。
-
在没有领导者的时候和领导者联系不上的时候。跟随者通过自身随机超时发起选举。
-
选举的过程,把自己变成候选人,把自身的任期+1,然后投自己一票,然后请求其他节点给把当前任期的那票投给自己一票。
-
每个节点在一轮任期中只有一票。给了先来要票的候选者,后来的就得不到了。
-
跟随者收到投票邀请以后,如果自己的任期比当前投票任期小,更新自己的任期,否则就拒绝。
-
随机超时 时间是为了减少大家一起扎堆成为候选人发起选举的情况。
-
候选者得到大多数的票以后变成领导者。并且通知大家自己成为领导。
-
如果这时候前领导回来了,收到新领带任期比自己大的心跳,就会默默地把自己降级成跟随者。
-
如果当前领导心因为网络不通,丢失了其他节点的心跳,那么其他节点在随机时间以后开始重复走选举的流程。
-
选举平票会重新选举。
-
如果领导者能一直保持心跳,那么它会终身任命。
-
在领导不失联的情况下,别的候选者不能更成为领导,如果让领导者失联,并且立即发起选举,很容易成为新的领导者。
Paxos
- 分成三个角色提议者(Proposer),接受者(Acceptor),告知者(Learner)
- 提议者发起提议的两个阶段请求,接受者处理提议的两个阶段的请求。告知者只是同步数据的角色,不参与投票。
- 提议分成两个阶段,1是准备阶段,2是接收阶段。只有两个阶段都通过才能写入数据。
- 提议内容,提议包含提议编号和提议内容。
- 提议编号是全局递增的一个编号。
- 提议内容是修改的内容。
- 提议者发起准备提议,并且只有提议号
- 接受者如果重来没有响应过提议,那么直接响应 [无提议],表示可能接受。
- 接受者如果直接接受过提议.
- 如果之间接受过的最大提议编号小于当前提议编号,那么响应之前接受过得最大提议编号和提议值。表示可能接受。
- 如果之前接受过的最大提议编号大于当前提议编号,那么久不响应。表示拒绝
- 提议者如果收到超过一半接受者的响应那么就发起接受阶段的请求。否者就需要丢弃提议或者再次发起新的提议。更换更大的提议号可能导致活着锁问题。可以阶梯的提高等待时间来避免这个问题。
- 提议者发起接受提议,提议号+提议值
- 如果接受者依旧按照大于等于当前提议号的就响应,小于就不响应,如果该提议在前面阶段被别的提议覆盖那么就不会通过。通过的一定是没有被覆盖的。不会有重复修改的。
- paxos存在的问题在于如果提议者比较多(多余2个),那么可能需要很多次投票才能满足过半通过这个条件。另外一个问题就是投票过程有两轮,比较慢慢,如果有一个主来协调,那么只需要一轮就能得到投票的结果。
RAFT 和 Paxos区别
RAFT 是一个选主算法,先选主,然后听主的得到主以后每次投票只需要一轮。Paxos是一个投票算法,没有主,每次投票至少需要两轮,但是避免了恶意抢主带来的问题。
分布式一致性算法和分布式事务一致性区别
分布式一致性算法Paxos,RAFT和分布式架构中的分布式事务的数据一致性有完全不同
- 分布式一致性算法:解决分布式系统中谁是主,谁的数据应该是有效数据。通常描述的对等节点之间的关系。比如A节点走到接受了100个请求,但是B节点只接受到了99 个请求,然后他们网络分区了。
- 分布式事务一致性:描述的是分布式系统中,因事务在没有原子性的情况下中断,而带来的数据不一致。通常描述的是关联节点的一致性被被破坏。比如游戏卖出装备,就应该增加对应的金币。