1 / 24

Chord: A Scalable Peer-to-Peer Lookup Service for Internet Applications

Chord: A Scalable Peer-to-Peer Lookup Service for Internet Applications. Ion Stoica Robert Morris David Liben-Nowell David R. Hari Balakrishnan Karger M. Frans Kaashoek Frank Dabek. 1097304151 莊宜豐. Outline.

efrem
Télécharger la présentation

Chord: A Scalable Peer-to-Peer Lookup Service for Internet Applications

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chord: A Scalable Peer-to-Peer Lookup Service for Internet Applications Ion Stoica Robert Morris David Liben-Nowell David R. Hari Balakrishnan Karger M. Frans Kaashoek Frank Dabek 1097304151 莊宜豐

  2. Outline IntroductionChord ProtocolHashingFinger TableLookupSimple Scalable Conclusion

  3. Introduction Peer-to-Peer Client / server architecture Slide 3

  4. Chord Protocol : System Model • Load balance: • Chord acts as a distributed hash function, spreading keys evenly over the nodes. • Decentralization: • Chord is fully distributed: no node is more important than any other. • Scalability: • The cost of a Chord lookup grows as the log of the number of nodes, so even very large systems are feasible. • Availability: • Chord automatically adjusts its internal tables to reflect newly joined nodes as well as node failures, ensuring that, the node responsible for a key can always be found. • Flexible naming: • Chord places no constraints on the structure of the keys it looks up.

  5. Chord:Distributed Hash Table • Chord provides support for just one operation: given a key, it maps the key onto a node. • Hashing function assigns each node and key an m-bit identifier usingSHA-1 base hash function. • Node’s IP address is hashed. • Each node has a m-bits node ID ( 0~2m-1) • Keys, too, are m-bit identifiers

  6. N1 N56 N8 k54 k10 N51 N14 Circular ID Space N48 N21 N42 k24 k38 N38 k30 N32 An ID Ring of length 2m-1 m= 6

  7. Chord:Distributed Hash Table • Each node, n, maintains a routing table with (at most) m entries, called the finger table.

  8. Finger Table

  9. Finger Table i=1 i=2 i=3 i=4 i=5 i=6 Bit=6 start.node() Successor()

  10. start.node () When Node=8,i=3 start.node(n+2i-1=N12) i=3 i=4 When Node=8,i=4 start.node(n+2i-1=N16) Successor() start.node()

  11. Successor () When Node=8,i=3 start.node(n+2i-1=N12) i=3 next.node(N14) Node=8,i=3 start.node(N12)<= next.node (N14) Successor(N12)=next.node (N14) =N14

  12. Key/node space partitions start.node() i=4 start.node() i=3 i=2 N16 i=1 N12 N21 N8 N14 N14 N14 N21 Successor() Successor()

  13. Simple Lookup lookup(k54) N1 N56 k54 N8 N51 N14 Circular ID Space N48 N21 N42 N38 N32

  14. Scalable Lookup N1 N56 k54 N8 +1 N51 +2 +32 +8 +4 k10 +16 N14 N48 N21 N42 k24 k38 N38 k30 N32

  15. Chord : Scalable LookupFind (K54) lookup(k54) N1 N56 k54 N8 +1 N51 +2 +32 +8 +4 +16 N14 N48 N21 N42 N38 N32

  16. Lookup(K54) :N8 // ask node n to find the successor of id n.find_successor(id) if (id belongs to (n, successor]) // k54 belongs to (N8.N14) return successor; else n0 = closest preceding node(id); return n0.find_successor(id); // search the local table for the highest predecessor of id n.closest_preceding_node(id) for i = m downto 1 // i =6 if (finger[i] belongs to (n, id)) // finger[6] =42 belongs to (N8.K54) return finger[i]; return n;

  17. Chord : Scalable LookupFind (K54) lookup(k54) N1 N56 k54 N8 N51 N14 N48 N21 N42 N38 N32

  18. Lookup(K54) :N42 // ask node n to find the successor of id n.find_successor(id) if (id belongs to (n, successor]) // k54 belongs to (N42.N48) return successor; else n0 = closest preceding node(id); return n0.find_successor(id); // search the local table for the highest predecessor of id n.closest_preceding_node(id) for i = m downto 1 // i =4 if (finger[i] belongs to (n, id)) // finger[4] =51 belongs to (N42.K54) return finger[i]; return n;

  19. Chord : Scalable LookupFind (K54) lookup(k54) N1 N56 k54 N8 N51 N14 N48 N21 N42 N38 N32

  20. Lookup(K54) :N51 // ask node n to find the successor of id n.find_successor(id) if (id belongs to (n, successor]) // k54 belongs to (N51.N56) return successor; // return N56 else n0 = closest preceding node(id); return n0.find_successor(id); // search the local table for the highest predecessor of id n.closest_preceding_node(id) for i = m downto 1 if (finger[i] belongs to (n, id)) return finger[i]; return n;

  21. IP Hash NoID • Data Hash DataID • Search Data Hash Key • DataID Hash Key • Search Data(Key) NoID DataID(Key) DataIP

  22. A’s NoID=212 • 如果A有檔案”寶貝.mp3”經過hashing =88555 • B’s NoID=234 • 如果B有檔案”屋頂.mp3”經過hashing = 45651 • C’s NoID=555 • 如果A有檔案”麵包.mp3”經過hashing =14212 • D’s NoID=651 • 如果A有檔案”籃子.mp3”經過hashing = 66234 • 當搜尋者輸入欲搜尋的檔案,經過hash除以1000產生餘數, • 而餘數就是KEY值 • 假設A要搜尋籃子這首歌,經過hash得到KEY值234,所以尋找K234 • 而KEY234是歸B管,所以當A路由到B的時候,B會跟A說,檔案在D那 • 所以A就跑過去D那詢問,給不給下

  23. Conclusion • Chord protocol solves it in a efficient decentralized manner • Routing information: O(log N) nodes • Lookup: O(log N) nodes • Update: O(log2 N) messages

  24. THX

More Related