“这次接收必发生在接收者上一轮采样之后:上一轮采样先于本轮发起,而这里的发送已经晚于本轮某次采样。第一轮可把初始化作为前一边界。于是接收者在本轮采样时必把黑色交给令牌;根上的接收则由black…”
形式陈述
设一次分布式执行的事件集合为
换言之,
对消息
反向蕴含并不成立:
一致切片是数学对象,不指定怎样在线收集它。快照算法需要在只有局部观察的条件下记录局部状态和通道状态,并证明结果满足上述闭包;可靠信道、FIFO、marker 与故障假设属于具体算法,而不是 consistent cut 定义的一部分。
直觉
切片像用一条弯曲的线横穿多条进程时间轴。线不必垂直,也不代表同一墙上时刻;它只需保证线左边如果已经记录了一个结果,就不能把造成该结果的原因留在线右边。因果原因必须随结果一同纳入,尚未到达的消息则可以横跨边界,作为在途状态存在。
这一视角解释了为何分布式全局状态可以一致,却无法由任何机器瞬时读取。每个局部片段在不同时间记录,只要组合后不制造“收到一条从未发送的消息”,整个切片仍对应某个合法因果前缀。
例子与边界
进程 P 执行事件
另一条切片包含 P 的发送,却在 Q 接收之前截断。它仍一致,消息
若 P 在发送前先扣减本地账户,Q 接收后才增加另一账户,切在两事件之间时局部余额之和暂时少了一笔,但加上通道中的在途转账后总量不变。这个例子说明一致性并不保证每个只看进程局部状态的业务谓词都成立;谓词必须对完整配置——包括通道——求值。
推论与应用
一致切片把因果偏序与全局状态验证连接起来。稳定性质检测、分布式断点、死锁检测和垃圾回收都可在某个一致全局状态上判断;若输入切片不一致,检测器可能把尚在途的证据误判为丢失,或凭空观察到没有发送来源的消息。
所有一致切片按集合包含形成格结构,向下闭包则提供构造与审计的直接判据。具体快照协议的任务是从运行中得到其中一个切片,并说明终止条件;本页不把算法的 marker 规则、FIFO 假设或无故障条件混入抽象对象。
参考资料
- K. Mani Chandy and Leslie Lamport, “Distributed Snapshots: Determining Global States of Distributed Systems,” ACM TOCS 3(1), 1985, pp. 63–75。
- Friedemann Mattern, “Virtual Time and Global States of Distributed Systems,” Parallel and Distributed Algorithms, 1989, pp. 215–226。
- Colin J. Fidge, “Timestamps in Message-Passing Systems That Preserve the Partial Ordering,” Australian Computer Science Communications 10(1), 1988, pp. 56–66。