一、视图更换的必要性
视图更换是零碎因为Primary出故障而可能保障可用性(liveness)的伎俩,可用性指操作可能在无效工夫内实现。
checkpoint, stable checkpoint
the states produced by the excution of these requests : checkpoint
a checkpoint with a proof : stable checkpoint
proof指节点达成2f+1的共识,达成全网共识的checkpoint就是stable checkpoint。
checkpoint是对于单个节点来说的,其设置是周期性的,比如说节点每当音讯序号n是100的倍数设置一次,每个节点设置checkpoint互相独立,chekpiont音讯带有申请的序列号,水位线机制确保了最低chekpoint和最高checkpoint的距离。节点在确立检查点的时候会多播<CHECKPOINT,n,d,i>音讯给其余节点;stable checkpoint是对于全网节点来说的,达到全网共识的checkpoint就是stable checkpoint。
checkpoint的作用:缩小内存占用。
二、视图更换的流程
backup在收到无效申请但并未执行的时候就会进行期待,这期间会开始计时(starts a timer),计时在期待时启动,非期待状态会进行。
- 节点查看到timer超期会进行承受音讯并多播一个视图更换音讯<VIEW-CHANGE,v+1,n,C,P,i>给所有的replica。n代表i以后所晓得的最新稳固检查点s(stable checkpoint)的音讯序号,C是2f+1个可能证实s正确的无效的检查点音讯<CHECKPOINT,n,d,i>汇合,汇合P由Pm形成,m是所有大于n的音讯的序列号,汇合Pm是由在i中达成prepared状态的音讯的汇合,Pm的内容包含对于m的pre-prepare音讯和2f个prepare音讯。
- 当下一个视图确定的primary p收到2f+1个视图更换音讯后,就会多播一个<NEW-VIEW,v+1,V,O>的音讯给所有的节点,V是p收到和收回的无效的<VIEW-CHANGE>音讯的汇合,O是pre-prepare状态的音讯的汇合。
O的确定,p依据收到的<VIEW-CHANGE>音讯能够得悉min_s和max_s。min_s是p收到的所有<VIEW-CHANGE>音讯中最新的稳固检查点的音讯序号n,max_s指的是<VIEW-CHANGE>音讯中已知是prepare状态的最大音讯序号(由汇合P失去)。确定min_s和max_s之后,p就为这些音讯创立pre-prepare音讯。
- p将所有的O中的音讯写入本人的日志,其余节点在对O验证之后就承受<NEW-VIEW>音讯。到这里就实现了视图的更换,之后的流程与三阶段音讯就一样了。
其余优化
1. 为了节俭网络带宽和CPU占用,通过client指定一个replica存储计算结果,其它replica存储计算结果的摘要,如果验证后发现后果不正确,再从新提交申请,要求所有节点都提交残缺信息。
2. 当不产生视图更换的时候,节点达到prepare状态之后,会执行节点的申请并发送长期后果给client,当client收到2f+1个雷同的临时性后果时就能够承受。这一步利用了从prepare到commit之间的等待时间。
参考文献
https://www.jianshu.com/p/fb5...
https://www.cnblogs.com/gexin...
https://lessisbetter.site/202...
https://zhuanlan.zhihu.com/p/...