“这是在既有树上运行的确认与汇聚;建树时可使用回声波,但初始化成本须另计。树高影响每轮屏障延迟,不能只因总共n个节点就假定树是平衡的。”
形式陈述
回声波算法在有限、连通、无向消息网络中,从唯一根r出发访问全网,并最终让r知道这一轮已经覆盖所有节点。节点知道自己的邻居,消息可靠且最终恰好一次交付,无节点故障;无需知道节点总数或网络直径。
本页采用每条边每个方向只发一条WAVE的版本。非根第一次收到WAVE时,把发送者选为父节点;父边最终组成一棵树。每个节点保存seen、parent和已收WAVE的邻居集合Received。每次本地处理与相应状态更新视为一个事件。
根r开始:
seen = true; parent = none; Received = empty
向每个邻居发送WAVE
若没有邻居:完成
节点v收到u的WAVE:
将u加入Received
if seen == false:
seen = true; parent = u
向除u外的所有邻居发送WAVE
if Received包含v的全部邻居:
if v == r: 完成
else: 向parent发送WAVE,结束本轮
非父邻居发来的WAVE同时充当回应,不再另发一条ACK。因此不要把这份规则与“每次探测再单独回复”的变体混在一起计数。若系统重复运行波,消息还须带波身份,各轮状态不能混用。
直觉
根先把波向外推。第一次接触确定“我沿谁的消息被发现”;最后一次回应再沿这条父边回去。一个节点在父边上交卷以前,必须已经从每个其他端口收到WAVE。
环不会造成所有节点互等,因为非父边两端在各自被发现时就会主动发送WAVE,不等待对方先完成。真正需要逐层等待的是父子依赖,而父边按首次发现时间指向更早节点,不可能形成环。
这个协议可用来完成一轮广播或汇聚,但它本身不是任意基本计算的终止检测器。一个业务节点若在回声之后还能生成新任务,根收到回声并不能证明这些后续工作也结束。
例子与边界
菱形加横边的一轮完整执行
取四节点A、B、C、D,边集为AB、AC、BC、BD、CD,A为根。图中m=5、n=4。固定下列到达顺序:
- A发送A→B、A→C。
- B收到A的WAVE,选A为父,发送B→C、B→D。
- C收到A的WAVE,选A为父,发送C→B、C→D。
- D先收到B的WAVE,选B为父,发送D→C。
- C收到B、D的WAVE。它已从A、B、D全部邻居收到消息,发送C→A。
- D收到C的WAVE。它的两个端口B、C都已收到,发送D→B。
- B收到C、D的WAVE,加上最早的A,端口全部结清,发送B→A。
- A收到C和B的回声,完成。
发送总数为2+2+2+1+1+1+1=10,恰等于2m。C和D之间的两条消息不表示双方互为父子:D的父节点始终是B。父边负责汇聚依赖,所有边上的Received负责证明没有遗漏端口。
为什么完成一定覆盖全网
首次被发现的非根v把父指针指向此前已被发现的u;沿父指针,发现事件严格变早。因此所有已发现节点构成以r为根的树,不会出现父指针环。
若根最终完成,却仍有未发现节点,利用连通性,必有一条边连接已发现区域与未发现区域。已发现端在发现时会沿这条非父边发送WAVE,且不收到另一端的WAVE就不能完成。这个未结清条件沿父链一直阻止根完成,与假设矛盾。
进一步,根完成前每个子树都已经回声。一个非根发出父回声时,所有端口都已收到消息;归纳到根可知所有WAVE都已经交付。若要汇聚节点值,可让父回声携带本子树结果,非树边WAVE只作端口结清,不能把同一节点经横边重复计入。
为什么最终会完成
可靠交付首先保证波沿路径访问所有节点。访问完成后,父树的叶子从所有非父邻居收到WAVE,就能回复父节点;去掉已完成叶子,再对上一层重复,最终根收齐。证明依赖树的有限性与每条已发消息最终交付,不依赖超时。
异步首达树未必是BFS树。若A→C很慢,而A→B→C很快,C会选择B,即使A与C直接相邻。回声证明覆盖与完成,不把先到达自动解释为最少跳数。
推论与应用
每条树边传一条发现WAVE和一条回声;每条非树边传两个方向的WAVE。因此控制消息恰为2m,节点v的Received需
纯异步模型没有墙钟完成上界。若只为性能分析另外约定每次消息传输和处理至多一个时间单位,洪泛与树上汇聚各经过至多n−1层,可得O(n)时间;树可能很深,不能直接把它写成O(D)的BFS界。
回声还可建立孩子集合、汇聚计数或确认一次配置发布。网络同步器的全网安全确认也能采用树上汇聚,但必须先证明它汇聚的“安全”标记对应当前轮全部基本消息已到达。
参考资料
- Wan Fokkink, Distributed Algorithms: An Intuitive Approach, MIT Press, 2013,§4.3:每边双向各一条消息的echo版本及正确性
- Juho Hirvonen and Jukka Suomela, Distributed Algorithms 2020,Chapter5的广播与确认机制;回声与同步BFS的停止条件须分别分析