* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Distributed Algorithms
Survey
Document related concepts
Transcript
Distributed Algorithms Broadcast and spanning tree Model Node Information: Adjacent links Neighboring nodes. Unique identity. Graph model: undirected graph. Nodes V Edges E Diameter D Model Definition Synchronous Model: There is a global clock. Packet can be sent only at clock ticks. Packet sent at time t is received by t+1. Asynchronous model: Packet sent is eventually received. Complexity Measures Message complexity: Number of messages sent (worst case). Usually assume “small messages”. Time complexity Synchronous Model: number of clock ticks Asynchronous Model: • Assign delay to each message in (0,1]. • Worse case over possible delays Problems Broadcast - Single initiator: The initiator has an information. At the end of the protocol all nodes receive the information Example : Topology update. Spanning Tree: Single/Many initiators. On termination there is a spanning tree. BFS tree: A minimum distance tree with respect to the originator. Basic Flooding: Algorithm Initiator: Initially send a packet p(info) to all neighbors. Every node: When receiving a packet p(info): • Sends a packet p(info) to all neighbors. Basic Flooding: Example Basic Flooding: Correctness Correctness Proof: By induction on the distance d from initiator. • Basis d=0 trivial. Induction step: • Consider a node v at distance d. • Its neighbor u of distance d-1 received the info. • Therefore u sends a packet p(info) to all neighbors (including v). • Eventually v receives p(info). Basic Flooding: Complexity Time Complexity Synchronous (and asynchronous): • Node at distance d receives the info by time d. Message complexity: There is no termination! Message complexity is unbounded! How can we correct this? Basic Flooding: Improved Each node v has a bit sent[v], initially sent[v]=FALSE. Initiator: Initially: Send packet p(info) to all neighbors and set sent[initiator]=TRUE. Every node v: When receiving a packet p(info) from u: • IF sent[v]=FALSE THEN Send packet p(info) to all neighbors. Basic Flooding: Improved Message Complexity: Each node sends once on each edge! Number of messages equals to 2|E|. Time complexity: Diameter D. Drawbacks Termination detection Spanning tree Goal: At the end of the protocol have a spanning tree Motivation for building spanning tree: Construction costs O(|E|). Broadcast on tree: only |V|-1 messages. Spanning tree: Algorithm Data Structure: Add to each node v a variable father[v]. Initially: father[v] = null. Each node v: When receiving packet p(info) from u and father[v]= null THEN Set father [v]=u. Spanning Tree : Example Spanning tree Algorithm: Correctness Correctness Proof: Every node v (except the initiator) sets father[v]. There are no cycles. Is it a shortest path tree? Synchronous Asynchronous Flood with Termination Motivation: Inform Initiator of termination. Initiator: Initially: Send packet p(info) to all neighbors and set set[initiator]=True Non-Initiator node w: When receiving a packet p(info) from u: • IF sent[w]=FALSE – THEN father[w]=u; send packet p(info) to all neighbors (except u). – ELSE Send Ack to u. After receiving Ack from all neighbors except father[w]: • Send Ack to father[w]. Flood with Termination: Correctness Tree Construction: Proof as before. Termination: By induction on the distance from the leaves of the tree. Basis d=0 (v is a leaf). • Receives immediately Ack on all packets (except father[v]). • Sends Ack packet to father[v]. Induction step: • All nodes at distance d-1 received and sent Ack. • Nodes at distance d will eventually receive Ack, • and eventually will send Ack. DFS Tree Data Structure in node v: Edge-status[v,u] for each neighbor u. Possible values are {NEW,SENT, Done}. • Initially status[v,u]=NEW. Node-status[v]. Possible Values {New, Visited, Terminated} • Initially: Node-Status[v]=NEW (except the Initiator which have Node-Status[initiator]=Visited). Parent[v]: Initially Parent[v]=Null Packets type: Token : traversing edges. DFS: Algorithm Token arrives at a node v from u: Node_Status[v]=Visited & Edge_Status[v,u]=NEW • Edge_Status[v,u]=Done; Send token to u. Node_Status[v]=Visited & Edge_Status[v,u]=Sent • Edge_Status[v,u]=Done. • (*) IF for some w: Edge_Status[v,w]=New THEN – Edge_Status[v,w]=Sent; Send token to w. – ELSE Node_Status=Terminated; send token to parent[v]. • [If v is the initiator then DFS terminates] Node_Status[v]=New • Parent[v]=u; Node_Status[v]=Visited; Edge_Status[u,v]=Sent • [Same as Node_Status[v]=Visited from (*)] DFS : Example DFS Tree: Performance Correctness: There is only one packet in transit at any time. On each edge one packet is sent in each direction. The parent relationship creates a DFS tree. Complexity: Messages: 2|E| Time: 2|E| How can we improve the time to O(|V|). Spanning Tree: BFS Synchronous model: have seen. Asynchronous model: Distributed Bellman-Ford Distributed Dijkstra BFS: Bellman-Ford Data structure: Each node v has a variable level[v]. Initially level[initiator]=0 at the initiator and level[v]= at any other node v. Variable parent, initialized at every node v to parent[v] = null. Packet types: layer(d) : there is a path of length at most d to the initiator. BFS: Bellman-Ford Algorithm Initiator: Send packet layer(0) to all neighbors. Every node v: When receiving packet layer(d) from w IF d+1 < level[v] THEN • Parent[v]=w • Level[v]=d+1 • Send layer(d+1) to all neighbors (except w). BFS: Bellman-Ford Correctness Correctness Proof: Termination: Each node u updates level[u] at most |V| times. Relationship parent creates a tree After termination: if parent[u]=w then level[u]=level[w]+1 [BSF Tree] Complexity Time: O(Diameter) Messages: O(Diameter*|E|) BFS: Bellman-Ford Example Bellman Ford: Multiple initiators Set distance (id-initiator,d). Use Lexicographic ordering. Each node can change level at most Number of initiators * |V| At most |V|2 BSF: Dijkstra Illustrated 1 k k+1 BFS: Dijkstra Asynchronous model: Advance one level at a time. Go back to root after adding each level. Time = O( D2 ) Messages = O( |E| + D * |V| ) • D=Diameter BFS: Dijkstra Data Structures: Father[v]: the identity of the father of v. Child[v,u]: u is a child of v in the tree. Up[v,u]: u is closer to the initiator than v. Packets Pulse forward Father Ack. BFS: Dijkstra In phase k: Initiator sends a packet Pulse to its children. Every node of the tree that receives a packet Pulse sends a packet Pulse to its children. Every leaf v of the tree: • Sends a packet forward to all neighbors w s.t. up[v,w]=FALSE. • When receiving packet father[u] from u set child[v,u]=TRUE. • When receiving either Ack or father[w] from all neighbors w with up[v,w]=FALSE: send Ack to father[v]. Every internal node v that receives Ack from all its children send Ack to its father father[v]. BFS: Dijkstra A node u that receives a forward packet (from v): First forward packet: • Sets father[u]=v • Sends father[u] to node v. second (or more) forward packet: • Send Ack to v. BFS: Dijkstra End of phase k: Initiator receives Ack from all its children. Initiator start phase k+1. Termination: If no new node is reached in last phase. BFS: Dijkstra Correctness: Induction on the phases Asynchronous model. Time = O( D2 ) Messages = O( |E| + D * |V| ) D=Diameter Conclusion Broadcast: Flooding Flooding with termination Spanning tree Unstructured spanning tree (using flooding) DFS Tree BFS Tree