Loading in 2 Seconds...
Loading in 2 Seconds...
Viceroy: Scalable Emulation of Butterfly Networks For Distributed Hash Tables By: Dahlia Malkhi, Moni Naor & David Ratajzcak Nov. 11, 2003 Presented by Zhenlei Jia Nov. 11, 2004 Acknowledgments Some of the following slides are adapted from the slides created by the authors of the paper
By: Dahlia Malkhi, Moni Naor & David Ratajzcak
Nov. 11, 2003
Presented by Zhenlei Jia
Nov. 11, 2004
Some of the following slides are adapted from the slides created by the authors of the paper
Level 4A Butterfly Network
Initialization: set cur to x
Proceed to root: while cur.level > 1:
cur = cur.parent
if cur.id ≤ y < SUCC(cur).id, return cur.
Otherwise, choose m from links of cur that minimize d(m, y), move to m and repeat.
The path length from x to y is O(log(n)) w.h.p.
For every node u with a level u.level < log(n)-log(log(n)), the number of nodes between u and u.Medium-left (Medium-right), if it exists, is at most 6log2(n) w.h.p.
In the greedy search phase of a lookup of value Y from node x, let the j’th greedy step vj, for 1 ≤ j ≤ m, be such that vj is more than O(log2(n)) nodes away from y. Then w.h.p. node vj is reached over a Medium or Long link, and hence satisfies vj.level = j and vj[j] = Y[j].
Let v be a node that is O(log2(n)) nodes away from the target y. Then w.h.p., within O(log(n)) greedy steps that target y is reached from v.
The total length of a route from x to y is O(log(n)) w.h.p.
Expected load on every node is O(log(n)/n).
The load on every node is log2(n)/n w.h.p.
Every node u has in-degree O(log(n)) w.h.p.
Invoke LOOKUP(p), stop after a node at level x.level+1 and matches p
6. Set medium links: Denote p = x1x2…xx.level. If SUCC(x) has prefix p and level x.level+1, set x.Medium-right link to it. Otherwise, move the SUCC(x) and repeat.
7.Set inbound links: Denote p = x1x2…xx.level.
Set inbound Medium links: Following SUCC links, so long as successor y has a prefix p and a level different from x.level, if y.level = x.level-1, set y.Medium-left to x.
Set inbound long links: Following SUCC links, find y that has a prefix matches p and has level x.level. Take any inbound links that is closer to x than y.
Set inbound parent links: Following PRED link, find y such that y.level = x.level+1. Repeat until meet a node in same level as x.
p = x1x2…xk (01)
If y[k] != p: stop
If y[k]=p and y.level=k+1:
set Medium link
Otherwise, move to succ(y)
Set inbound long links:
Following short links, find y such that y[k]=x[k] and y.level = x.level, check y’s inbound links.
Set long link
P = x1…xk-1(1-xk)…xw stop at level k+1?
In this case, find 00*Join: Example
Set Parent link:
Following SUCC link, find a node has level k-1.
A JOIN operation by a new node x incurs expected O(log(n)) number of messages, and O(log2(n)) messages w.h.p.
The expected number of nodes that change their state as a result of x’s join is constant, and w.h.p is O(log(n)).
Because node x has O(log(n)) in-degrees w.h.p.
Similar results holds for LEAVE.
Every node has expected constant in-degree, and has O(log(n)) in-degree w.h.p.
Further more, if the merged bucket is greater than log(n)x(2c+2)/3, the new bucket is split into two buckets.
(c+1)/3 > 1 since c>2
Amortized Overhead = c/((c-2)/3) = O(1) for c>2
Photo by Peter J. Bryant