Distributed Algorithm Basics (II) - Broadcast and Converge-cast

Notes on DA study

Posted by swimiltylers on September 10, 2018

这是分布式算法笔记的第二章,讲述洪泛(Flooding)算法和汇合(Converge-cast)算法。

从本章开始,分布式算法的笔记也将围绕算法展开。本章主要讲述两个非常基础的生成树算法。本章介绍的算法非常基础,尤其是洪泛,但也存在在效率的问题。这一章的内容主要围绕Yale讲义,由于本章算法比较简单,因此只是简述算法流程,不进行详细的讨论。

Simple Flooding

得到网络的MST,在同步信息系统中,得到的是BFS遍历树

Class node:
	Procedure initialize:
		if this.pid == root
			this.parent := root
			this.sendMessageTo(this.neighbors)
		else
			this.parent := null
	End Procedure
	
	Procedure receiveMessage(message) :
		if this.parent == null
			this.parent := message.from.pid
			this.sendMessageTo(this.neighbors)
	End Procedure
End Class

Converge-cast

Flooding的逆运算,从底向上汇总信息传递给root,这个运算是建立在已经建立好spanning tree的基础上进行传播的

Class node<f>:
	Procedure initialize:
		if this.pid != root
			this.sendMessageTo(this.parent)
	End Procedure

	Procedure receiveMessage(message) :
		this.buffer.append(message)
		this.receivedProcessId.push(message.from.pid)
		if this.receivedProcessId.equal(this.children)
			this.message := f(this.buffer, this.message)
			if this.pid == root
				return this.message
			else
				this.sendMessageTo(this.parent)
	End Procedure
End Class