本文共 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/