Page 199 - 《软件学报》2021年第6期
P. 199

谷晓松  等:支持乱序执行的 Raft 协议                                                           1773


                  \/\E i,j\in Server:RequestSync(i)
                  \/\E i\in Server:HandleRequestSyncRequest(i)
                  \/\E i\in Server:HandleRequestSyncResponse(i)
                  \/\E i,j\in Server:UpdateSync(i)
                  \/\E i\in Server:HandleUpdateSyncRequest(i)
                  \/\E i\in Server:HandleUpdateSyncResponse(i)

             Spec==Init/\[⋅][Next]_vars
             --------------------------------------------------------------------------------------------

         5    ParallelRaft-CE 的正确性证明

             本节简要论证 ParallelRaft-CE 协议的正确性.ParallelRaft-CE 的正确性包括两部分:一是共识协议的一致
         性,二是 ParallelRaft-CE 中不会出现“幽灵日志”现象.由此可以得到复制状态机的安全性:节点间执行每个日志
         项的顺序没有冲突,状态机的状态一致.
             性质 1.  节点的任期与同步号单调递增.
             根据规约容易得到,任何节点的任期和同步号是单调递增的;
             根据规约,节点只会修改任期等于同步号的日志项,而不会增加、删除或修改日志中任期小于同步号的日
         志项.
             性质 2(选举的安全性).  每个任期最多选出一个主节点.
             ParallelRaft-CE 中,从节点成为主节点需要两个阶段:一是从节点通过选举成为主节点候选者,二是主节点
         候选者转变为主节点.其中,选取主节点候选者的方式与 Raft中选取主节点的方式相同.根据 Raft 选主的安全性,
         可以得到 ParallelRaft-CE 中每个任期最多选出一个主节点候选者;
             主节点候选者可能成功转变为主节点,可能由于失效,或是任期更大的节点发起选举等原因没有转变为主
         节点,在这种情况下,系统进入下一任期.因此,每个任期最多选出一个主节点.
             任期相同、编号相同的日志项一定包含相同的命令.根据选举的安全性,以及对任意编号,每个主节点最多
         添加一个日志项可以得到.这个性质与 Raft 相同.
             性质 3.  设主节点候选者的任期为 t,同步号为 s,则 s<t 且系统内不存在任期大于 s 的日志项.
             首先,任何节点的同步号不大于任期.由于节点在发起选举需要增大任期(同步号不变),且在选举过程中任
         期与同步号不变,因此主节点候选者的同步号小于任期.设主节点候选者 i 的同步号为 s,任期为 t(s<t);
             对任意 s<k<t,不存在任期为 k 的主节点.使用反证法,假设存在节点 j 为任期 k 的主节点.根据规约,存在多数
         派节点 Q 1 为 i 投票.j 由主节点候选者转变为主节点,因此存在多数派节点 Q 2 升级同步号为 k.根据多数派的性
         质,Q 1 ∩Q 2 ≠∅.设 r∈Q 1 ∩Q 2 .若 r 先为 i 投票,那么 r 升级任期为 t.由于 t>k,因此 r 之后会拒绝 j 升级同步号的请求,
         这与 r∈Q 2 矛盾.若 r 先升级同步号为 k,那么由于 k>s,之后,r 会拒绝 i 的选举请求(注意,选举投票要比较同步号),
         这与 r∈Q 1 矛盾.由此可知,不存在这样的 k;
             对 k≥t,不存在任期为 k 的主节点.若系统中存在任期为 k 的主节点,那么 k 在选举中获得多数派节点 Q 的
         投票,因此 Q 中节点的任期至少为 k.由于节点的任期递增,因此 i 发起选举时,Q 中的节点的任期要么大于 t,要么
         已经为任期为 t 的其他节点投过票,因此不会为 i 投票.这与 i 成为任期为 t 的主节点候选者矛盾.
             综上,系统中没有出现过任期大于 s 的主节点,因此不存在任期大于 s 的日志项.
             性质 4(主节点的完全性).  若主节点的任期为 t,则其日志中包括所有任期小于 t 且被提交的日志项.
             ParallelRaft-CE 中,任期为 t 1 的主节点失效后,新的主节点候选者(任期为 t 2 )会对任期为 t 1 的日志项进行重
         确认.在重确认的过程中,所有上一任期的日志项的状态被确定:被提交或者丢弃.重确认过程结束后,主节点候
         选者成为新的主节点.重确认的过程实质上是对每个位置执行 Paxos 协议的过程,因此可以保证取得共识,且之
   194   195   196   197   198   199   200   201   202   203   204