“也可随计算维护较小的完成摘要:Dijkstra–Scholten保留未清回执与动态父树,信用分配把责任作为精确份额随任务传递,Safra通过计数和染色取得可信巡回。它们各有独立不变量,并非把…”
形式陈述
信用分配用一个可分割但不可复制的总量,解决分布式终止检测。固定单一初始活动根r、可靠恰好一次最终交付、无故障且没有外部注入的基本计算。控制层可以把归还消息可靠路由到r。
根初始信用w[r]=1,其余节点信用0。信用是精确非负有理数,不是允许舍入的浮点估计。每条基本消息携带严格正信用,每个活动节点也保留严格正信用。规则如下:
活动节点v发送任务m:
选择0 < a < w[v]
w[v] -= a
发送(m,a)
节点v收到(m,a):
w[v] += a
基本状态变为active
非根v变为passive:
发送RETURN(w[v])给r
w[v] = 0
根收到RETURN(a):
w[r] += a // 控制消息不激活基本计算
根在passive且w[r] == 1时:Announce
每次信用转移与消息入/出信道按一个本地事件处理。根变被动时保留其信用。非根归还后仍可接收新任务并再次活动,新任务携带的新信用重新支撑它;先前的RETURN无需撤回。
直觉
每份未完成责任都必须带走一点信用。根若还缺哪怕极小一份,可能是一个活动工作者还拿着,也可能是基本任务在途中,还可能是归还信用的控制消息没到。
不能让发送者把全部信用随任务发走,自己却仍保持active。那会出现仍可继续工作的零信用节点,根收齐1不再能排除它。只分出严格小于现有信用的一部分,让发送者与新任务各自有正数见证。
这与按任务数量计数不同。一次任务可以派生任意多次有限分流,每次把现有信用再分开;只要使用精确分数并且总量不变,就不必预先知道会产生多少任务。
例子与边界
分流与归还分别记账
令r先给p发送1/2信用,再给q发送1/4,自己保留1/4。p收到后再分出1/4给q。按表中顺序交付:
| 事件后 | r持有 | p持有 | q持有 | 在途基本信用 | 在途归还信用 |
|---|---|---|---|---|---|
| r发出两项任务 | 1/4 | 0 | 0 | 3/4 | 0 |
| p、q分别接收 | 1/4 | 1/2 | 1/4 | 0 | 0 |
| p再发任务给q | 1/4 | 1/4 | 1/4 | 1/4 | 0 |
| q接收 | 1/4 | 1/4 | 1/2 | 0 | 0 |
| p完成并归还 | 1/4 | 0 | 1/2 | 0 | 1/4 |
| p的归还到r | 1/2 | 0 | 1/2 | 0 | 0 |
| q完成并归还 | 1/2 | 0 | 0 | 0 | 1/2 |
| q的归还到r | 1 | 0 | 0 | 0 | 0 |
假定r派发后已经被动。倒数第二行基本计算已经真正终止,但检测器还不能宣布,因为有1/2信用正在RETURN中。最后一行才得到根的本地完成证书。允许晚宣布是正确的;提前宣布则可能丢掉仍在途的基本任务。
守恒式必须包含控制消息
令B为在途基本消息,R为在途RETURN消息。核心不变量是
每次发送把信用从节点转入消息,每次接收把它从消息转入节点,因此保持等式。归还也遵循同一规则:若只计算基本信道,非根发RETURN时总量会凭空减少;若发RETURN后不清本地信用,总量则被重复计入。
根被动且w[r]=1时,其他各项都只能为0。活动非根必须有正信用,在途基本消息也必须有正信用,所以二者都不存在。这给出安全性。基本计算若最终终止,每个非根最终把全部信用归还;有限多条归还消息最终送达,根便收齐1,给出最终检测。
精确性是一项算法条件
假设某个活动节点仍持有
另一种失效是反复减半后下溢为0,导致基本消息或活动节点不再持有正信用。解决需要精确数值表示,或者另行证明带补充信用握手的协议;不能由节点自行补一份信用,却不先让根更新其总量账本。
若消息可能重复,同一RETURN被算两次也会破坏守恒。消息身份、去重及信用入账必须配合,不能仅因有效载荷恰好是同一个分数就猜测它是否重传。
推论与应用
检测控制层在每次发送/接收做常数次有理数加减与分割;但“常数次数”不是常数位复杂度。若总共M次发送都采用减半,精确二进制分母的指数可达到O(M),普通分子表示也可能需要O(M)位。
单根模型中,每个非根的active区间至少由一条基本消息启动,故归还消息数至多M;若RETURN要经多跳到根,还应乘上相应路由长度。暂停或崩溃节点若一直扣着信用,检测不能结束;无故障假设在这里直接支撑活性。
Dijkstra–Scholten记录责任的父链和回执数量,信用算法记录可加的份额。二者都要覆盖在途任务,差别在于保留什么证明信息。信用分配适合递归分流清楚的工作池,代价是数值表示和信用生命周期必须受到严格管理。
参考资料
- Wan Fokkink, Distributed Algorithms: An Intuitive Approach, MIT Press, 2013,§6.2及附录weight-throwing;本页固定精确分数版本,不引入书中的额外信用补充协议
- Shing-Tsaan Huang, “Detecting Termination of Distributed Computations by External Agents,” ICDCS, 1989, 79–84,信用/权重方法的原始文献线索