paxos 原理分析 简单图解

参考链接:
https://www.zhihu.com/question/19787937/answer/107750652
http://www.importnew.com/24420.html

1.首先还是概念:

Paxos算法包含三个角色Proposor,Acceptor,Learner,Client。

Client : 发起请求
Proposor : 提出提案。
Acceptor : 接收或者拒绝提案,并返回相应内容。
Learner : 学习已经确定的提案。

2. 重要原则:

  1. 一共有两个阶段,第一个阶段是申请提案的权限(准备阶段),
    第二个阶段才是真正提案(提交阶段)。以下用准备请求和提交请求区分。
  2. Proposor在多数Acceptor同意自己的准备请求的情况下,才能进入提交阶段。
  3. 如果Acceptor之前没有收到过任何准备请求,则直接同意请求。(下图,步骤1)
  4. 如果Acceptor接收到的准备请求的编号,大于上一次准备请求的编号,则同意新请求。否则,拒绝。(下图,步骤2中,同意编号2的新请求)
  5. 如果Acceptor已经接收了某个提交请求,再接收到准备请求时,告知Proposor已经接收的提交请求编号以及值。(下图,步骤5,Acceptor1告知已接受编号1、value=a, Acceptor2告知已接受编号2、value=b)
  6. 当Proposor发送准备请求,被一个或多个Acceptor告知,其已经接受某些提交请求时,则当前Proposor从所有被接受的提交请求中,找到编号最大的请求的值,进行下一次提交。 (下图,步骤6,)

3.图示

在这里插入图片描述

4. 文字说明:

参考上图, 假设2个Proposor, 3个Acceptor。 初始编号 Proposor1=1, Proposor2=2 。

以下按时间顺序进行:

  1. Proposor1 把自己的编号(1)发送给所有Acceptor申请批准进行提案。

  2. Proposor2 把自己的编号(2)发送给所有Acceptor申请批准进行提案。

  3. Acceptor1,Acceptor2 先收到Proposor1的请求,由于之前没有接受过申请,所以都同意Proposor1。

  4. Proposor1获得超过半数同意,准备提交。(此时还没向Acceptor3发送,或者已经发送还没有应答)。

  5. Acceptor3接收到Proposor2的请求,由于之前没有接受过申请,所以同意Proposor2。

Acceptor2接收到Proposor2的请求,判断编号2大于之前的1,所以同意Proposor2。

  1. Proposor2获得超过半数同意,准备提交。(此时还没向Acceptor1发送,或者已经发送还没有应答)。

  2. Proposor1向Acceptor1,Acceptor2提交。

  3. Acceptor1同意Proposor1,Acceptor2发现当前编号已经为2,所以拒绝Proposor1。

  4. Acceptor3同意Proposor2,Acceptor2同意Proposor2。

  5. Proposor2提交成功。

  6. Proposor1增大编号,将编号(3)发送给所有Acceptor重新申请批准进行提案。

  7. Acceptor2同意Proposor1,并且告知已经接受编号1(value=a)的提案。

Acceptor3同意Proposor1,并且告知已经接受编号2 (value=b) 的提案。

  1. Proposor1选择上一步中编号大的值提交。所以,提交编号3,value=b;

  2. 达成一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值