可靠广播与拜占庭广播算法解析
1. 可靠广播与因果顺序
在可靠广播中,每个正确的进程最终都会 rb - 交付消息 m。根据算法,依赖可靠广播的一致性属性,每个正确的进程最终也会 rb - 交付因果先于 m 的每个消息,从而最终 crb - 交付 m。
因果顺序属性方面,进程 p 处的向量时钟 V 在 V[rank(q)] 条目中存储了由发送者 q 发送且已 crb - 交付的消息数量。进程 p 会在附加向量的 rank(p) 条目中为其 rb - 广播的每个消息分配一个序列号(从 0 开始)。当 p rb - 广播带有如此计算的附加向量 W 的消息 m 时,W[rank(q)] 个来自发送者 q 的消息在因果上先于 m。每个接收者会统计从发送者 q 已 crb - 交付的消息数量,并在 crb - 交付 m 之前等待 V[rank(q)] 个这样的消息被 crb - 交付。
该算法在性能上,不会给底层可靠广播算法添加额外的通信步骤或消息。消息头的大小与系统中的进程数量呈线性关系。若将底层可靠广播原语替换为统一可靠广播原语,“等待因果广播”算法也可实现因果顺序统一广播。
2. 拜占庭一致广播
2.1 动机
在任意故障系统模型中,进程可能会出现拜占庭故障,这为实现广播抽象带来了诸多复杂情况。拜占庭进程可能会任意偏离算法指令,故意阻碍算法达成目标。例如,本章前面提到的可靠广播算法在有拜占庭进程参与时会失效,一个有故障的发送者可能会干扰底层尽力而为的广播原语,导致其他进程交付不同的消息,从而违反可靠广播的一致性或无重复属性。
多数在任意故障模型中实现原语的算法依赖于密码学机制,至少用于实现所有算法都使