Paxos思考

前言

前段时间学了下Paxos,但是一直没有写博客,前两天中秋在外面吃饭突然想起来Paxos的过程,发现有些细节已经记不太清了。这两天又回头看了下,发现自己之前的理解还是有些纰漏,这次再复习印象也加深了不少。

大致过程

两个阶段。

1. prepare阶段

所有的提议者把自己独特的序号发给接收者,有三种情况:

a. 这是第一个接收者收到的序号,那么接收者给提议者promise如果你之后再来发accept请求我这个接收者会批准

b. 如果目前这个接收者没有批准别的序号和value但是给了别的序号m promise,且这次接收的序号n比m大,那么会给这次新的序号n promise;,如果n比m小,那么就拒绝给它promise。

c. 如果目前这个接受者已经批准了别的序号和value,那么将不会接受这个序号了,并且会回复接收者

注意:

a. 这一轮的时候提议者发送的是序号而没有value;

b. 这一阶段basic paxos可能会发生活锁

c. 这一阶段里很多博客里说的可以接受多个提案就是说如果后面接收者收到的提案越来越大,那么接收者也会给这些提案promise,但是它们再来确认accept的时候可能就不会比接收者当前保存的最大提案号大了,这个时候就会拒绝掉。

d. Basic Paxos这里面第四步说的如果在第一阶段收到了某个接收者返回的accept value,那么会重新从最初的发序列号开始再来一遍。同时接收者也会把自己这边记录的最大提案号更新!

扫描二维码关注公众号,回复: 3397545 查看本文章
2. Accept阶段

a. 提议者在prepare阶段收到了多数接收者的promise,那么这个阶段就会向多数接收者发送accept确认的消息,消息中包含的是<提案号,value>,此处的value如果在第一阶段中收到了接收者返回的value,那么选择从接收者收到的最大提案号对应的value,如果没有收到,那么此value值可以由提议者自己决定。

b. 接收者收到消息<n, value>后,如果提案号n不小于当前接收者保存的最大的题案号,那么就接受这个提案,否则会被拒绝掉。

c. 接收到接收者的消息后,提议者会通知所有的学习者其接收的提议,这样学习者会学习到哪个提案被选出。

注意:

a. 一,二阶段的大多数接收者可以不同;

b. 接收者通知学习者可能会导致大量通信(m*n),优化方案是选一个或几个学习者代表,然后让它们通知其他学习者。

c. 之前思考过一种情况,如果某个提议得到了5个接收者ABCDE中ABC的promise,第二阶段又得到了C的接受,这时候另一个提议者提出了一个更大的提案得到了BDE的promise,第二阶段带着新的提案号和value去访问C时,这时候新的提案号大于C保存的提案号,那么C该怎么办呢?其实这就是当时没有理解PAXOS导致的!根本不可能出现这样的情况,根据P2C:

tiki wiki 如果一个编号为 n 的提案具有 value v,那么存在一个多数派,要么他们中所有人都没有接受(accept)编号小于 n 的任何提案,要么他们已经接受(accept)的所有编号小于 n 的提案中编号最大的那个提案具有 value v。

这里的多数派三个字非常重要,在前面说的例子中,如果第一个提案得到了5个接收者里多数的accept,那么第二个提案去访问接收者只有两种情况,第一种是这个时候接受第一个提案的多数派还没有在第二个阶段接受第一个提案,如果在这个时候给了第二个提案promise,那么第一个提案就不可能被接受了,同样的,如果第一个提案已经被接受,那么接收者直接就会返回第一个提案的value,提出第二个提议者就会把自己的value改成第一个提案的value了!

几个问题

这里说的只是basic paxos,希望以后真正工作上能用上的时候好好理解下multi-paxos。

提案号的生成

Chubby的解决方案是有n个提议者,那么第i个提议者第m次发送prepare请求的id是m*n+i。其实思路就是不是完全要求表现提案号提出的先后的,只要保证同一个提议者提议的提案号有先后就可以了。

活锁

当一proposer提交的poposal被拒绝时,可能是因为acceptor promise了更大编号的proposal,因此proposer提高编号继续提交。 如果2个proposer都发现自己的编号过低转而提出更高编号的proposal,会导致死循环,也称为活锁。

选出一个主proposer。但是有个问题是怎么选呢?主的挂了怎么办?

Paxos和分布式事务的关系

分布式事务是指在分布式系统中保证跨界点的事务的原子性和一致性等,也就是说同一次分布式事务中,各个节点的事务要么都成功,要么都rollback。

而Paxos是为了一个分布式系统中各个节点如何就某一个值达成一致。

参考

分布式事务: 分布式系统的事务处理真的写的特别好,多回看几遍。

Paxos原理:Paxos证明 Paxos算法原理与推导 算法形成理论 算法过程

例子:图解分布式一致性协议Paxos 分布式一致性算法Paxos 必看! Paxos实例 Paxos通俗理解 五虎将 实例理解

其他:WIKI 基本原理 必看 Paxos与ZK

猜你喜欢

转载自www.cnblogs.com/gongcomeon/p/9720229.html
今日推荐