“辅助可靠广播采用本库的普通 crash 版本:正确发送者的消息最终到达所有正确进程,正确进程一旦可靠交付,其他正确进程也最终可靠交付,且任何进程都不交付伪造或重复消息。这里不额外要求 uni…”
“本库的分布式主线可按“可靠广播 → 共识 → 原子广播及其等价定理 → 状态机复制”阅读:可靠广播先固定消息传播与去重责任,共识决定一个值或一个日志位置,本页证明连续共识与全序交付可以互相构…”
模型Model
施工中 · 内容逐步修订
Reliable broadcast
保证有效性、一致性和完整性的广播抽象。
固定消息传递系统中的发送者
在崩溃故障模型中,常用规格分别是:
uniform agreement 把前件扩展为“任何进程已交付”,因而也约束崩溃前的故障进程。Byzantine 模型则必须另外固定身份认证假设和有效性口径:恶意发送者可以向不同人发不同值,“发送者实际广播”不再是无歧义条件。
可靠广播把发送者可能中途崩溃导致的“只传到一部分”修补为正确进程之间的一致交付。有效性约束正确发送者的消息最终到达,完整性禁止伪造与重复,一致性保证若某正确进程交付则所有正确进程最终交付。它不决定多条消息的全局顺序,也不等同于共识。
在崩溃模型中,一种 eager 转发协议为每条消息保存唯一实例标识。首次收到消息时,节点安排向所有节点转发,并向本地应用交付;这里先只要求正确节点最终完成转发,不假定全部发送与交付是一个不可中断步骤。重复收到同一标识则忽略。若发送者 A 只把消息发给 B 就崩溃,而 B 正确,那么 B 最终完成转发,C、D 随后收到并交付。这证明的是“某个正确节点交付后,其他正确节点最终交付”的 non-uniform 一致性。
证明依赖正确转发者持续取步,且已发送给正确节点的消息最终送达;若只有公平丢包信道,则一次发送不够,要持续重传直到相应确认。不能一面允许永久丢失,一面仅靠单次转发推出最终交付。
Uniform 版本必须检查本地交付发生在何种证据之后。若 B 先交付,再只向 C 发出消息就崩溃,而 C 也在继续传播前崩溃,所有存活节点可能永远得不到消息,non-uniform 前件不成立,却已经违反 uniform agreement。若模型把“向所有人转发”拆成可中断的多步,必须完成足够的传播或取得协议规定的确认后才交付;不能在伪代码中把一条 send-to-all 默认为不会中断的原子广播。
发送者若可拜占庭式地向 B 发
消息传递与崩溃模型下,可靠广播分离一致交付和最终性。它只保证正确进程最终交付同一消息集合,不保证两条消息的全序、因果序或任何日志前缀关系;不同副本收到相同集合却按不同顺序应用,仍可能得到不同状态。
原子广播在可靠广播之上加入共同全序,并可进一步映射到复制日志的 committed 序列。FIFO 或因果排序约束不同维度,不能从“可靠”一词推出;群通信协议必须按应用需要逐项叠加。