Pastry - Irisa
Pastry - Irisa Pastry - Irisa
Pastry
- Page 2 and 3: Outline Introduction (DHT) Structur
- Page 4 and 5: Pastry (MSR/Rice) Naming space :
- Page 6 and 7: Pastry: Routing Route(d46a1c) d46a1
- Page 8 and 9: Node departure Explicit departure o
- Page 10 and 11: Fixing the routing table of A • R
- Page 12 and 13: Reducing latency • Random assignm
- Page 14 and 15: Proximity routing in Pastry Leaf se
- Page 16 and 17: Node insertion in Pastry d46a1c d47
- Page 18 and 19: Performance 1.59 slower than IP on
<strong>Pastry</strong>
Outline<br />
Introduction (DHT)<br />
Structured P2P<br />
• DHT<br />
• Interface<br />
PASTRY<br />
CAN
<strong>Pastry</strong> (MSR/RICE)<br />
node key Id space<br />
NodeId = 128 bits<br />
Nodes and key place in a linear space (ring)<br />
Mapping : a key is associated to the node with the numerically<br />
closest nodeId to the key
<strong>Pastry</strong> (MSR/Rice)<br />
Naming space :<br />
• Ring of 128 bit integers<br />
• nodeIds chosen at random<br />
• Identifiers are a set of digits in base 16<br />
Key/node mapping<br />
• key associated with the node with the numerically closest node id<br />
Routing table:<br />
• Matrix of 128/4 lines et 16 columns<br />
• routeTable(i,j):<br />
nodeId matching the current node identifier up to level I<br />
with the next digit is j<br />
Leaf set<br />
• 8 or 16 closest numerical neighbors in the naming space<br />
Proximity Metric<br />
• Bias selection of nodes
<strong>Pastry</strong>: Routing table(#65a1fcx)<br />
0<br />
x<br />
1<br />
x<br />
2<br />
x<br />
3<br />
x<br />
4<br />
x<br />
5<br />
x<br />
7<br />
x<br />
8<br />
x<br />
9<br />
x<br />
a<br />
x<br />
b<br />
x<br />
c<br />
x<br />
d<br />
x<br />
e<br />
x<br />
f<br />
x<br />
6<br />
0<br />
x<br />
6<br />
1<br />
x<br />
6<br />
2<br />
x<br />
6<br />
3<br />
x<br />
6<br />
4<br />
x<br />
6<br />
6<br />
x<br />
6<br />
7<br />
x<br />
6<br />
8<br />
x<br />
6<br />
9<br />
x<br />
6<br />
a<br />
x<br />
6<br />
b<br />
x<br />
6<br />
c<br />
x<br />
6<br />
d<br />
x<br />
6<br />
e<br />
x<br />
6<br />
f<br />
x<br />
6<br />
5<br />
0<br />
x<br />
6<br />
5<br />
1<br />
x<br />
6<br />
5<br />
2<br />
x<br />
6<br />
5<br />
3<br />
x<br />
6<br />
5<br />
4<br />
x<br />
6<br />
5<br />
5<br />
x<br />
6<br />
5<br />
6<br />
x<br />
6<br />
5<br />
7<br />
x<br />
6<br />
5<br />
8<br />
x<br />
6<br />
5<br />
9<br />
x<br />
6<br />
5<br />
b<br />
x<br />
6<br />
5<br />
c<br />
x<br />
6<br />
5<br />
d<br />
x<br />
6<br />
5<br />
e<br />
x<br />
6<br />
5<br />
f<br />
x<br />
6<br />
5<br />
a<br />
0<br />
x<br />
6<br />
5<br />
a<br />
2<br />
x<br />
6<br />
5<br />
a<br />
3<br />
x<br />
6<br />
5<br />
a<br />
4<br />
x<br />
6<br />
5<br />
a<br />
5<br />
x<br />
6<br />
5<br />
a<br />
6<br />
x<br />
6<br />
5<br />
a<br />
7<br />
x<br />
6<br />
5<br />
a<br />
8<br />
x<br />
6<br />
5<br />
a<br />
9<br />
x<br />
6<br />
5<br />
a<br />
a<br />
x<br />
6<br />
5<br />
a<br />
b<br />
x<br />
6<br />
5<br />
a<br />
c<br />
x<br />
6<br />
5<br />
a<br />
d<br />
x<br />
6<br />
5<br />
a<br />
e<br />
x<br />
6<br />
5<br />
a<br />
f<br />
x<br />
log 16 N<br />
liges<br />
Line 0<br />
Line 1<br />
Line 2<br />
Line 3
<strong>Pastry</strong>: Routing<br />
Route(d46a1c)<br />
d46a1c<br />
d471f1<br />
d467c4<br />
d462ba<br />
d4213f<br />
d13da3<br />
Properties<br />
• log 16 N hops<br />
• Size of the state<br />
maintained (routing<br />
table): O(log N)<br />
65a1fc
Given a message, the node first checks to see if the destId falls intherangeof<br />
:thei-thclosestnodeIdinthenamespacetable<br />
1 10233 01 02212102 10233 232<br />
, ,where<br />
negative/positive indices indicate nodeIds smaller/larger than the present nodeId, respectively.<br />
0 02212102 1023312<br />
0<br />
:thedomainofdestId Routing<br />
2<br />
algorithm at level (on . node<br />
02212102<br />
A)<br />
:thelengthoftheprefixsharedamong and ,inlevels.<br />
Namespace set<br />
10233021 10233033 10233120 10233122<br />
(1) if ( )<br />
(2) // is within range of our leaf namespace set set<br />
(3) forward to ,s.th. is minimal;<br />
(4) 4. The top else row of the routing table representsi<br />
level zero.<br />
Rl<br />
(5) // use the routing table<br />
line l, 0 ≤ l ≤ ⎣⎣<br />
(6) Let ;<br />
L<br />
(7) if ( )<br />
(8) forward to ;<br />
(9)<br />
(10) else<br />
(11) // rare case<br />
Fig. 1. State of a hypothetical <strong>Pastry</strong> node with nodeId 10233102,<br />
:entry of the routing table R,<br />
128/b<br />
:ith closest nodeId in the leafset<br />
⎦⎦<br />
0 ≤ i ≤ 2<br />
i<br />
2 We assume throughout this paper that DnodeIds l<br />
: value of are theuniformly l digits of key distributed. D<br />
(12) forward to ,s.th.<br />
(13) ,<br />
(14)<br />
(15)<br />
(16)<br />
.Allnumbersareinbase<br />
SHL(<br />
A,<br />
B) :length of the shared prefix between A and B<br />
b<br />
,
Node departure<br />
Explicit departure or failure<br />
Replacement of a node<br />
The leafset of the closest node in the leafset contains the<br />
closest new node, not yet in the leafset<br />
Update from the leafset information<br />
Update the application
Failure detection<br />
Detected when immediate neighbours in the name space<br />
(leafset) can no longer communicate<br />
Detected when a contact fails during the routing<br />
Routing uses an alternative route
Fixing the routing table of A<br />
• Repair<br />
R<br />
d<br />
l<br />
A contacts another entry (at random)<br />
so that ( i<br />
from<br />
:entry of the routing table of A to repair<br />
R<br />
i<br />
l+<br />
≠ d)<br />
and asks for entry R<br />
d<br />
l<br />
1<br />
( i ≠ d) if no node in line l<br />
R<br />
i<br />
l<br />
from the same line<br />
,otherwise another entry<br />
answers the request.
State maintenance<br />
Leaf set<br />
• is aggressively monitored and fixed<br />
Routing table<br />
• are lazily repaired<br />
When a hole is detected during the routing<br />
• Periodic gossip-based maintenance
Reducing latency<br />
• Random assignment<br />
of nodeId: Nodes<br />
numerically close are<br />
geographically<br />
(topologically) distant<br />
• Objective: fill the<br />
routing table with nodes<br />
so that routing hops are<br />
as short (latency wise)<br />
as possible<br />
• Topological Metric:<br />
latency<br />
d467c4<br />
6fdacd<br />
d467f5
Exploiting locality in <strong>Pastry</strong><br />
Neighbour selected based of a network proximity<br />
metric:<br />
• Closest topological node<br />
• Satisfying the constraints of the routing table<br />
routeTable(i,j):<br />
• nodeId corresponding to the current nodeId up to level i<br />
next digit = j<br />
• nodes are close at the top level of the routing table<br />
• Farther nodes at the bottom levels of the routing tables
Proximity routing in <strong>Pastry</strong><br />
Leaf set<br />
d467c4<br />
d46a1c<br />
Route(d46a1c)<br />
d471f1<br />
d467c4<br />
d462ba<br />
d4213f<br />
d13da3<br />
Topological space<br />
65a1fc<br />
Naming space<br />
d462ba<br />
d4213f<br />
65a1fc<br />
d13da3
Locality<br />
Node X routes to node A<br />
• Path A,B,… -> Z<br />
• Z numerically closest to X<br />
• Initialisation of the line i of the routing table with the contents of<br />
line i of the routing table of the ith node encountered on the path<br />
Improving the quality of the routing table<br />
• X asks to each node of its routing table its own routing state and<br />
compare distances<br />
• Gossip-based update for each line (20mn)<br />
Periodically, an entry is chosen at random in the routing table<br />
Corresponding line of this entry sent<br />
Evaluation of potential candidates<br />
Replacement of better candidates<br />
New nodes gradually integrated
Node insertion in <strong>Pastry</strong><br />
d46a1c<br />
d471f1<br />
d467c4<br />
d462ba<br />
d4213f<br />
d467c4<br />
Topological space<br />
Route(d46a1c)<br />
d13da3<br />
65a1fc<br />
New node: d46a1c<br />
Naming space<br />
d462ba<br />
d4213f<br />
65a1fc<br />
d13da3
Node discovery: approximation of the<br />
closest node<br />
discover(seed) //destination<br />
nodes=getleafset(seed)<br />
//probes on the leaf set<br />
nearNode=pickClosest(nodes) //pick closest in the leafset<br />
depth=getMaxRoutingTableLevel(nearNode) //highest line in RT<br />
closest=nil<br />
while (closest != nearNode)<br />
closest=nearNode<br />
nodes = getRoutingTable(nearNode, depth)<br />
nearNode =pickclosest(nodes)<br />
if (depth >0) depth = depth – 1<br />
end<br />
return closest<br />
Routing table property used to move exponentially closer to the closest<br />
Pick the closest node at each level and get the the next level from it (bottom up)<br />
• Constant number of probes at each level<br />
• Probed nodes get exponentially closer at each level<br />
Fill routing table entries from the closest node
Performance<br />
1.59 slower than IP on average
References<br />
• Rowstron and P. Druschel, "<strong>Pastry</strong>: Scalable, distributed<br />
object location and routing for large-scale peer-topeer<br />
systems", Middleware'2001, Germany, November<br />
2001.