Skip to content

模型Model

因果广播

施工中 · 内容逐步修订

Causal broadcast

保证所有进程按因果先后顺序交付消息的广播抽象。

形式陈述 ​

因果广播在可靠广播的性质(有效性、一致交付、完整性)之上追加因果顺序约束:若消息 m 的广播事件按 happens-before 关系先于消息 m′ 的广播事件,记

broadcast(m)→broadcast(m′),

则任何正确进程都不得在交付 m 之前交付 m′。对因果上并发的消息(互相没有 happens-before 关系),不同进程可以按不同顺序交付。下面的实现示意把因果范围限定在广播层:依赖由同一进程的广播先后,以及应用交付一条广播后再发起广播的顺序生成。所用向量时钟按发送者统计广播次数:发起广播才递增自身分量,应用交付消息时合并其依赖信息;内部事件不消耗广播序号,原始网络收包也不等于应用交付。接收方将因果前置尚未满足的消息放入缓冲区,待前置广播全部交付后再交付它。若模型还包含其他应用通信,须另将其依赖纳入,不能直接套用这一广播计数方案;可靠性与故障假设仍由底层可靠广播与所选模型单独声明。

直觉

因果顺序想守住的是"果不得先于因出现"这条叙事逻辑:一条回复消息的内容可能依赖原消息,若某个副本先看到回复再看到原文,它相当于观察到了信息从未来流向过去。happens-before 恰好刻画了"信息可能流动过"的路径——同一进程的先后两步,或经由一次消息收发——因此按它约束交付顺序,就足以保证每个进程看到的历史都是一种自洽的讲法。同样重要的是它不约束什么:两条并发消息之间没有模型记录的因果链,但交付次序仍可能影响应用结果,例如对同一值执行“加一”和“乘二”。因果广播允许接收者选择不同次序;要得到一致结果,还须由应用证明并发操作可交换,或另加共同排序机制。

例子与边界

正例:进程 A 广播"提交事务 t",进程 B 向应用交付该消息后广播"确认 t"。由于 B 的广播在应用交付 A 的消息之后,happens-before 成立,所有正确进程必须先交付"提交"再交付"确认";若进程 C 先收到网络上跑得快的"确认",实现会把它压在缓冲区里,直到"提交"到达并交付。用向量时钟检查即为:B 的消息携带的时钟显示"依赖 A 的第 1 条消息",C 发现自己尚未交付该条,于是等待。

边界情形:若 C 与 D 并发广播两条独立更新,接收者甲可以先交付 C 的、接收者乙先交付 D 的——这完全合法,因为因果广播刻意不规定并发消息的先后。普通原子广播会让所有进程对这两条消息采用同一顺序,却可能反过来打乱有因果关系的消息,因此两种规格彼此并不包含;若两类保证都需要,应采用同时尊重因果关系的全序广播。另一个易忽略的边界是"库外因果":happens-before 只追踪系统内的消息收发,若两个用户通过电话等旁路信道传递了信息,再各自广播,系统视这两条消息为并发,因果广播不会(也无法)保护这种系统外的因果链。

用户先发布帖子 m1,另一用户读到后发送回复 m2,任何副本都不应先显示回复再显示原帖。两位互不通信用户同时发帖属于并发消息,不同副本可交换顺序而不违反因果广播。仅保持每个发送者 FIFO 顺序不足以捕获跨发送者的间接因果。

推论与应用

因果广播在异步崩溃模型中可以直接实现,不像原子广播那样与共识等价、受同一终止性不可能结果约束。协作编辑与聊天系统可用它保证回复消息不先于原文交付;操作型无冲突复制数据类型也常把因果交付列为传播前提,再单独证明并发操作可交换。

因果一致性约束的是读写版本对客户端的可见顺序,还要定义 reads-from、会话上下文和读返回值;因果广播只约束消息交付。前者可以用后者作为传播层,却仍需把消息映射为版本可见性,因此两页不能互作同义定义。选择广播规格时,应分别判断是否需要保留因果先后、统一并发消息顺序,或同时需要两者。

参考资料
  • Nancy A. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996,Chs. 1–25。

  • Leslie Lamport, “Time, Clocks, and the Ordering of Events in a Distributed System,” Communications of the ACM 21(7), 1978,Full paper。

  • Kenneth P. Birman, André Schiper, and Pat Stephenson, “Lightweight Causal and Atomic Group Multicast,” ACM Transactions on Computer Systems 9(3), 1991,§§4.3–5.1,pp. 280–283:广播计数向量、网络接收与应用交付的区分。

关系图谱11 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。

类型化关系

使用的工具

被这些条目使用

并列辨析