博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Paxos协议学习---3.Paxos Made Simple
阅读量:4255 次
发布时间:2019-05-26

本文共 3514 字,大约阅读时间需要 11 分钟。

先读Parliament再读simple确实,要好很多。

下面是阅读笔记

Paxos made simple

P2
1.为什么不是采用一个acceptor就好?
答:因为那个节点可能失败。
2.为什么任意qrm的人通过了一个值,就能确定一个值?
答:因为任意qrm至少有一个相同的人,
如果我们能确保一个acceptor只能最多接受
一个值,就能确保任意qrm确认的值都是同一个值。
3.为什么要满足条件P1?
答:因为我们在没有失败和消息丢失的情况下,我们希望即使只有一个值被提议,也应该被选定。
它的意义就在于,我们应该确保有提议能被通过。
4.为什么一个acceptor必须要被允许接受多于
一个的提议?
答:因为存在节点失败的可能性,某一次提议可能无法
找到一个qrm,也就无法确定一个值。这就需要进行多次提议。一个acceptor是可以在不同的提议中接受
不同的值得提议的。
这样遇到2N+1台,有N个选x,有N个选y,还有一台崩了的情况下,有人改变主意,才能选出一个值。
P3
1.为什么要提出条件P2?
答:P2条件直接满足了只要有一个值被选择。
那么它肯定满足一致性。
2.为什么要提出条件P2a?
答:因为P2是说,v被选择后,所有比v
的编号大的并且被选择的提议的值都应该是v。
而P2a是说,v被选择后,在所有编号比v大的提议
投票中,accept只能投有v值的提议。
显然P2a能满足P2。 
3.为什么要提出条件P2b?
现在值为v的提议已经被通过了。
总会有之前没有接受过任何提议的acceptor
同时也会有不知道情况的proposer,提出
编号更高的值不是v的提议。
由于P1的存在,该acceptor会接受编号大于v,
但是值不是v的提议。
这与P2a的要求是矛盾的。
为了解决这个矛盾,我就不能让你提出这种提议。
这就是P2b。
P4
1.为什么要提出P2c?
答:这个P2c就是The Part-time Parliament中的
第3个条件。而P2b就是里面提出的引理1。
这个条件根本就不管有没有通过
都限制了,现在将要提出的这个提议,必须要和
你的qrm中的MaxVote相同。
可以通过反证法证明满足了P2c就满足了P2b。
从而证明满足了P2c就满足了P2。
2.为什么proposer要求acceptor给promise说
不要接受编号比n小的提议?
答:因为为了遵守P2c的规定,proposer在新提议
之前要询问qrm的MaxVote。
为了确保这个MaxVote是最新的,有效的,就必须要求
不能再接受编号小于n的提议。
因为一旦接受编号小于n的提议。
那么MaxVote有可能就变了,传给编号n的提议的proposer的MaxVote信息就失效了。
P5
1.acceptor到底接受还是不接受request呢?
答:无论何时,acceptor不接受request都不会影响
一致性。所以对于acceptor的不接受没有要求。
对于回应请求
①prepare request想回应就回应
②acceptr request只有在没有承诺过不回应的情况下,才能回应。
2.acceptor会忽略对于它已经接受了的提议的prepare
request,为什么一个已经接受了的提议还会有prepare
request呢?
答:因为异步网络会有丢包和重复包存在。
3.一个acceptor需要持久化两样东西。
①它accept过的最大提议
②它promise过的最大提议
为什么?
答:①是为了回答MaxVote
②是为了拒绝一些prepare request
持久化这两个东西可以保证2Pc的顺利进行。
P6
1.acceptor实际的接受行为
答:为了保证协议的快速运行,实际行为如下
①对于prepare request,遇到比自己promise过的
提议编号更大的提议就respond promise
②对于accept request,只要没有遇到promise里面
承诺过不接受的,就accept
原文摘录:
P1.An acceptor must accept the first proposal that it receives.
P2.If a proposal with value v is chosen, then every higher-numbered proposal that is chosen has value v.
P2a.If a proposal with value v is chosen, then every higher-numbered proposal accepted by any acceptor has value v.
P2b.If a proposal with value v is chosen, then every higher-numbered proposal issued by any proposer has value v.
P2c.For any v and n , if a proposal with value v and number n is issued,then there is a set S consisting of a majority of acceptors such that
either (a) no acceptor in S has accepted any proposal numbered lessthan n , or (b) v is the value of the highest-numbered proposal among
all proposals numbered less than n accepted by the acceptors in S .
P1a.An acceptor can accept a proposal numbered n iff it has not responded to a prepare request having a number greater than n.
Question
1.如果总共10个人,通知了8个人,
但是有7个人同意,那么算不算通过?
答:算,只要有任意的qrm全员赞成,就算提议通过。
2.如果有2N+1个acceptor。
有两个提议同时提出,这个时候N个赞成提议1,
N个赞成提议2,第2N+1个acceptor崩了。
好像协议是说,只能accept与自己一样的。
那么只要第2N+1个不出现,不是永远选不出来吗?
答:这里之前的理解有问题。acceptor是可以接受和自己之前接受的提议不一样的值得提议的。
但是对于提议者来说,提议怎样的提议是有要求的。
3.一个proposer怎么知道得到了一个qrm
的acceptor的回应?
是因为在系统设定的时候就会给出一个集群里拥有的
所有的acceptor的数量吗?
那么这个数量怎么维护呢?感觉只能人工给定啊?
4.怎么保证,多个proposer不会提出相同的
编号的提议呢?
答:每一个proposer能够用的编号集是不想交的。
所以不同的proposer没有相同的编号可用。
而对于某一个proposer只要保证不和自己之前的编号一样就好。
5.这个proposer和learner都要选择leader,
那么这个leader选举过程怎么保证一致性呢?
如果将选择leader看成一个提议,那么在实际选上之前
会有多个proposer一起提提议,可能会导致不断地
prepare request冲突,无法进行怎么选择?
原文P7有这样的语句,
 a reliable algorithm for electing a proposer must use
either randomness or real time—for example, by using timeouts. 
但是选出来了,怎么保证一致性,怎么让所有机器知道呢?
答:leader并不要求保持严格的一致性,同时存在一个以上的leader是
允许的。所以只需要通过心跳或者租约来查看leader的存活状况即可。
Summary
1.P1保证了能选出一个值。
2.P2保证了选出的值是一致的。
3.P2a保证了P2的成立。
4.P2b保证了,P1和P2a同时成立,也就保证了P1和P2
同时成立。
5.P2c保证了P2b的成立。

转载地址:http://aiiei.baihongyu.com/

你可能感兴趣的文章
聊聊Vue.js的template编译
查看>>
Vue源码阅读连载之响应式设计
查看>>
CSS布局 -- 圣杯布局 & 双飞翼布局
查看>>
产生随机数
查看>>
android 基本布局
查看>>
android 操作系统
查看>>
button事件的两种处理方法
查看>>
android 震动
查看>>
【数据结构与算法】(四) c 语言静态队列的简单实现
查看>>
[linux] unix domain socket 例子
查看>>
[linux] c 实现简单的web服务器
查看>>
栈--判断回文字符串
查看>>
Dijkstra算法--一个点到其余点最短路径
查看>>
解决 The `master` repo requires CocoaPods 1.0.0 - (currently using 0.39.0)
查看>>
gdb调试常用命令
查看>>
vim正则表达式批量修改文本
查看>>
objective-c init方法的写法
查看>>
极客公园 Mac 第三方客户端(swift)
查看>>
【Lintcode】寻找峰值
查看>>
Arduino 串口读写 SD 卡模块
查看>>