3. Service Properties
为何 n >= 3f + 1?
与分布式系统的RW有关。
首先定义一个分布式系统的两种操作:Read,Write。
由于f是最大的可容忍宕机数量。因此,当client发出一个W请求后,只需要有n-f个机器响应就代表写入成功。
此时,设集合W为写入成功的集合,大小为n-f。
设此时有个读请求,同样,当有n-f个机器响应时,则该读请求为成功。设响应的机器集合为R,R的大小为n-f。
W和R的交集最小为n-2f。
而实际上,很有可能,f个错误节点包含在交集中,因此为了至少能读到一个正确W的节点,那么n-2f-f>=1。
Additionally, it is possible that the f replicas that did not respond are notfaulty and, therefore, f of those that responded might be faulty.
这句话的意思应该是,W请求发出后,有n-f个机器响应则认为写入成功,但这并不说明这n-f个节点都是正确的。很有可能由于延迟原因,有f个节点虽然写入成功,但没有及时响应,因此这f个正确节点被排除在了W之外。因此,W或者R可能包含了f个虽然响应了,但实际上值错误的节点。
4.
本网络可以看作一个分布式状态机。在一组特定顺序的operation下,算法保证每一个正常节点都会产出一组特定顺序的state。
client只需要等到f+1个相同result的reply即可。(因为允许出错的上限是f,所以f+1一定是正确的)
本网络最主要的问题是,如何保证每个节点都以同样的顺序执行。其引入了两个概念。view和quorum
view:
一个view是一种网络情景。In a primary-backup mechanism, replicas move through a succession of con-figurations called views.
一个view中有一个primary和其他的backup。backup可以检测到primary出问题,并重新推选。此时就是view change。
quorum:
To order requests correctly despite failures, we rely on quorums
特性:任意两个quorum必有一个公共节点;网络中至少有一个quorum,其节点都是正常的。
quorum是一个集合。
quorum certificates:来自quorum元素的信息,声明其拥有某个数据。which are sets with one message from each element in a quorumsaying that it stored the information.
(??? set里面的msg是代表一个element还是代表一个quorum)
weak certificates:which are sets with at least f + 1 messages from different replicas. 保证至少有一个replica持有正确的信息。
在本算法中,view的primary为mod,quorum的大小为2f+1
CLIENT
1. client要求执行operation o时,广播请求给所有replica。REQUEST, o, t, c,带有MAC。 timestamp如何确定???
2. replica若接收请求,则纪录日志。请求的排序规则在下面讲到。replica回复格式为,REPLY, v, t, c, i, r。t为req中的t,v为当前view,r为result,i为replica no
3. client采用weak certificates。等待f+1个回复。回复具有相同的t和r。若成功则称其拥有一个reply certificate.
若client未在一定时间内接到回复,则重发请求。
若replica收到重复请求(查日志可知),则重发reply。
若primary未分配有效seq number,则会被suspect,并cause view change
problem:
每个replica对每个client持有单独的一个加密key,当client过多时无法扩展。
solution:
4.3 Normal Case Operation
三阶段提交
state of each replica包含the state of the service, a message logcontaining messages the replica has accepted or sent, and an integer denotingthe replica’s current view
PRE-PREPARE
1. Primary收到client的REQ m,为REQ分配一个seq number=n,记录日志并广播给所有backup,PRE-PREPARE, v, n, D(m),带MAC。D(m)是对m的hash。
2. Backup i若之前并未接受到冲突的消息(除了D(m)其他都相同),且m已经记录在REQ日志中(即,client的REQ曾经发送给i),则i进入prepare阶段,并广播一个prepare消息,PREPARE, v, n, D(m), i,带MAC。同时,将PRE-PREPARE 和 PREPARE 记录日志。此时该REQ被视为PRE-PREPARED状态。
3. 如果上述i不接受,则什么都不做。
PREPARE
1. 每个replica需要收集a quorum certificate ,包含PRE-PREARE的和 2f 的PREPARE。此时该replica具有prepared certificate,这表明a quorum同意将n赋给m。
[Gifford1979]. [Malkhi and Reiter 1998a]
2. 该算法保证在相同的view下,req执行的有序性。This ensures that replicas agree on a total order for requests in the same viewbut it is not sufficient to ensure a total order for requests across view changes
证明:The protocol guarantees that it is notpossible to obtain prepared certificates for the same view and sequence numberand different requests.
假设有两个不同的REQ,m 和m' ,同时在相同的v和n下都取得了prepared certificates。此时,这些certificates对应的quorum至少有一个共同节点。该节点不会同时接受不同的REQ。(参照超过50%股权等于控制公司)
COMMIT
Replicas may collect prepared certificates in different views with the same sequencenumber and different requests. The commit phase solves this problemas.
1. 每个replica i广播 COMMIT, v, n, i 。 表示其持有prepared certificate,且记录日志。
2. 每个replica收集a quorum certificate with 2 f + 1 COMMIT (包含它自己)。该certificate称为committed certificate。此时该REQ被replica committed。
3. m commit之后,每个replica可以执行REQ,前提是已经执行完所有前置REQ(按序执行REQ)。执行后发送reply给client。
comitted certificate说明,有一个quorum承认该REQ的事实。(the protocol guarantees that the request hasbeen prepared by a quorum)
当view change时,新的primary将读取quorum的prepared certificate,并承认其已经分配排序的req。
New primariesensure information about committed requests is propagated to new views byreading prepared certificates from a quorum and selecting the sequence numberassignments in the certificates for the latest views.
另外,replica需要验证REQ是否是正确的,这通过MAC验证。
一些情况总结:
在prepare阶段,发生了view change,Primary发生变化。
View change
The basic idea behind the protocol is for the new primary to read informationabout stable and prepared certificates from a quorum and to propagatethis information to the new view.
通过读取日志的方式。
集合P在replica i上,存储了prepared REQ。该REQ已经获取了一个prepared certificate。
集合Q在replica i上,存储了pre prepared REQ。该REQ已经获取了一个pre prepared certificate。
1. backup i怀疑primary错误,其进入v+1,并广播VIEW-CHANGE, v + 1, h, C, P, Q, i。h是i所知的最新的checkpoint对应的req num,C是所有的checkpoint对应的pair,kv对(seq number,digest)
2. replicas发送ACK报文给新的primary P。为了防止错误的view change msg,replicas对msg做验证。
Replicas only accept these VIEW-CHANGE messages if all the information in their P and Q components is for view numbers less than or equal to v.
3. 新的P收集上述信息。所有的view change msg保存在一个集合S中。仅当收到2f-1个ACK(不包含自身)才将来自i的view change msg保存至S。这些CHANGE请求和ACK构成了一个quorum certificate,被称为view-change certificate。S中的每个entry对应一个不同的replica。
4. P从S中选择一个checkpoint和一些REQ。