分布式一致性算法paxos和raft

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一, 分布式系统

定义

分布式系统是这样一种系统,它的各个组件分布在联网的若干台计算机上,通过传递消息进行相互通信和协同工作。

特点

•并发性:在没有协同的情况下,组件各自行事。

•没有全局时钟:目前的时间同步精度不够。

•故障无处不在:总是会发生各种各样的故障。

二, basic-Paxos算法原理:

1.Paxos算法解决的问题

是分布式系统如何对一个问题达成共识。

2.Paxos算法中的角色

从提案到表决流程涉及到三个角色:

•Proposer:提案者,可能有多个,它门负责提出提案。

•Acceptor:接受人,一定要有多个,它们对指定提案进行表决,同意则接受提案,不同意则拒绝。

•Learner:学习人,收集每位Acceptor接受的提案,并根据少数服从多数的原则,形成最终提案。

实际上,分布式系统中一个组件可以对应一种或多种角色。

3.Paxos算法描述

•第一阶段(Prepare阶段)

Proposer:

o选取提案编号n,并向大多数Acceptor发送携带编号n的prepare请求。

Acceptor:

o如果收到的提案编号n比自己已经收到的编号都要大,则向Proposer 承诺不再接收编号小于n的提案,如果之前接受过提案,则同时将接

受的提案中编号最大的提案及其编号发给Proposer。

o如果收到的提案编号n小于自己已经收到提案编号的最大值,则拒绝。

•第二阶段(Accept阶段)

Proposer:

o首先,对接收到响应,逐条处理:

▪如果接收到拒绝,则暂不处理。

▪如果接收到同意,同时还接收到Acceptor已经接受的提案,则

记下该提案及编号。

o处理完响应后,统计拒绝和同意个数:

▪如果大多数拒绝,则准备下次提案。

▪如果大多数同意,从这些Acceptor已经接受的提案中选取提案

编号最大的提案作为自己的提案,没有则使用自己的提案,逐

个向Acceptor发送Accept消息。

Acceptor:

o如果收到的提案编号n小于自己已经收到最大提案编号,则拒绝。

o如果收到的提案编号n等于自己已经收到最大提案编号,则接受该提案。

o如果收到的提案编号n大于自己已经收到最大提案编号,则拒绝。

•形成共识(与Prepare&Accept阶段并行)

Acceptor:

o每当接受一个提案,则将该提案及编号发给Learner。

Learner:

o记录每一个Acceptor当前接受的提案,一个Acceptor先后发来多个提案,则保留编号最大的提案。

o统计每个提案被接受的Acceptor个数,如果超过半数,则形成共识。

三, multi-paxos算法:

1. 选主阶段

Multi Paxos一边先运行一次完整的paxos算法选举出leader,有leader处理所有的读写请求,然后省略掉prepare过程.

PS:

因为 Paxos 协议的基本保证就是一旦形成决议,就不能更改,那么再次选新主就没办法处理了。因此对“选主”,需要变通一下思路,还是执行 Paxos 协议,但是我们并不关心决议内容,而是关心“谁成功得到了多数派的 AcceptRespo nse”,这个 Server 就是选主产生的 Leader。而多轮选主,就是针对同一个 Paxos Instance 反复执行,最后赢得多数派 Accept 的 Server 就是“当选Leader”。

2, 提交阶段

Multi Paxos要求在各个Proposer中有唯一的Leader,并由这个Leader唯一地提交value给各Acceptor进行表决,在系统中仅有一个Leader进行value提交的情况下,Prepare的过程就可以被跳过, 变成了一个一阶段的递交协议:

一阶段a:client经过发起者(leader)直接告诉Acceptor,准备递交协议号为I +1的协议

一阶段b:收到了大部分acceptor的回复后(超过半数),leader就直接回复client 协议成功写入

四, paxos算法应用场景

1, 高可靠的分布式锁实现:

1, client(1,2)向Proposer(leader)发起lock请求

2, leader将该lock记录发给所有的acceptor

3, 超过半数的acceptor接受该lock记录, 则认为lock成功, 返回给client

4, 每个lock都有一个lock number, 这个是递增的整数, 当恢复时, lock number最大, 而且存在大部分的acceptor上, 则被认为lock成功

5, 如果client1,2发现lock失败(leader异常), 获取想释放lock, 都必须调用unlock, 该过程和lock一样, 都需要acceptor记录该lock状态的转变.

Client异常恢复:

1, 假设client1获取锁成功, 并异常

2, leader必须复制检查client1是否存在(headbeat), 如果client1异常,

则将client1的lock释放

Leader异常恢复:

1, 新选举leader

2, 新选举的leader必须从accept中获取所有的locker记录,

超过半数的acceptor有记录的lock, 被认为是合法的

3, 同步这些locker记录, 恢复locker的状态, 后开始工作

4, leader的locker记录必须是最权威的

Acceptor异常恢复:

1, 从leader的记录中恢复locker的状态, 并开始工作

2, paxos状态机(高可用状态机)

状态机认为, 只有初始状态和事件的执行顺序是一样的, 那么状态机器的结果必然也是一致的

当有server1, server2, server3组成一个分布式状态机的时候, 先需要考虑

使用paxos来保证状态记录的一致性和事件的执行顺序的一致性, 这样就可以无差别的恢复状态机, 保证了状态机的高可用

1, multip-paxos保证事件的顺序是event1(seq=1), event5(seq=2), event3(seq=3), 这个顺序即使在异常发生后, 恢复也是保证不变的

2, 状态机1按照顺序执行事件event1, event5, event3, 记录最新的seq=2号,

并且经过paxos记录当然状态(status)

3, 状态机1在执行的过程中发生任何异常, 执行中断

4, paxos有高可靠保证, 可以获取状态记录(status)和有序事件记录(event1, event2, event3),

5, 根据状态(status)恢复状态机2, 根据status记录的最新seq, 假设seq=1

表示当前状态是已经执行了event1, 但是event2(seq=2), event5(seq=3)还没执行, 继续执行event2和event5,

6, 状态机2的最终结果和状态机1在没有发生异常的情况下的最终结果是一致,

相关文档
最新文档