Closed jollen closed 7 years ago
Flowchain 使用一個稱為 Chord 的 P2P 通訊協定,flowchain-chord 是一份 Node.js 的實作。
近來受到相當程度討論的去中心化(Decentralized)概念,則是基於 Peer-to-Peer 通訊網路的分散式系統。Peer-to-Peer 的研究在 2000 年左右,就已經有相關的研究論文發表。Decentralized 與 Block Store 的觀念,在這裡論文裡已經被提出討論。可見這二個目前廣為討論的觀念(Decentralized 與 Block Store)都不是新鮮技術了。
Chord[1] 是一個 DHT(distributed hash table)通訊協定,在 peer-to-peer 通訊網路中,DHT 是 "nodes" 的 store,用來儲存 key-value paris。Chord 協定用來指派 key 到 nodes,Chord 協定同時也讓 node 來取代 key 的 value。Chord 於 2001 年誕生於 MIT[2][3]。
Chord Protocol 的主要實作參考是 MIT Chord/DHash,這是一份 C++ 的實作。
Chord protocols 分為 5 個部份:
這是 Chord protocol 最重要的一個環節,根據 Chord protocol 的規範:
更新 finger table 與 successor pointers
以 JavaScript 來實現 stabilization protocol 的方式:
使用 setInterval
Stabilization protocol 的算法分二個部份:
先定義 Stabilized() 與 Notify() 的訊息:
// 定義訊息類型 var FIND_PREDECESSOR = 0; var NOTIFY_PREDECESSOR = 1;
Stabilized() 負責向 successor 請求它的 predecessor,並決定 predecessor 是否要成為新的 sucessor:
setInterval(function Stabilize() { // 請求 predecessor,並將 predecessor 做為新的 successor send(successor, {type: FIND_SUCCESSOR, next: next_finger}); }, 1000);
Notify() 負責告知 sucessor 我是它的 node,讓 successor 能更新 finger table:
setInterval(function check_predecessor_and_stabilize() { // 向 successor 請求 predecessor send(successor, {type: NOTIFY_PREDECESSOR}); }, 1000);
新的 node 建立時,要執行以下任務:
Finger table 是 Chord 的搜尋演算法。Node 可以經由 finger table 來找到任意節點。Finger table 的演算法設計,搜尋節點的關鍵,它可以避免線性(linear)搜尋的做法。每一個 node 都會有 finger table,finger table 的第 i 個 entry 紀錄的是 sucessor( (n + 2^(i-1)) mod 2^m )。
Finger table 是一個 hash ring 的結構。Chord 經由 predecessor 的觀念,來簡化 join 與 leave 的機制[2]。
Chord 運用在 Internet of Things 與 Web of Things 的場景為何?
[1] Chord, https://en.wikipedia.org/wiki/Chord_(peer-to-peer) [2] I. Stoica, et al, Chord: A scalable peer-to-peer lookup service for internet applications [3] [1] LibraRing: An Architecture for Distributed Digital Libraries Based on DHTs, http://scholar.harvard.edu/files/ecdl05.pdf [4]: CS138, http://cs.brown.edu/courses/cs138/s15/content/projects/chord.pdf [5] Distributed Hash Tables, http://merlot.usc.edu/cs551-m05/lectures/tentative/20a_chord.pdf [6] http://zoo.cs.yale.edu/classes/cs722/2011/Jason_chord.pdf
[1] http://www.dcs.ed.ac.uk/teaching/cs3/ipcs/chord-desc.html [2] http://slideplayer.com/slide/4418035/ [3] http://www.slideshare.net/imprataap/chord-node-join
closed by #40
Flowchain 使用一個稱為 Chord 的 P2P 通訊協定,flowchain-chord 是一份 Node.js 的實作。
近來受到相當程度討論的去中心化(Decentralized)概念,則是基於 Peer-to-Peer 通訊網路的分散式系統。Peer-to-Peer 的研究在 2000 年左右,就已經有相關的研究論文發表。Decentralized 與 Block Store 的觀念,在這裡論文裡已經被提出討論。可見這二個目前廣為討論的觀念(Decentralized 與 Block Store)都不是新鮮技術了。
關於 Chord Protocol
Chord[1] 是一個 DHT(distributed hash table)通訊協定,在 peer-to-peer 通訊網路中,DHT 是 "nodes" 的 store,用來儲存 key-value paris。Chord 協定用來指派 key 到 nodes,Chord 協定同時也讓 node 來取代 key 的 value。Chord 於 2001 年誕生於 MIT[2][3]。
Chord Protocol 的主要實作參考是 MIT Chord/DHash,這是一份 C++ 的實作。
Chord Protocols
Chord protocols 分為 5 個部份:
Stabilization 算法
這是 Chord protocol 最重要的一個環節,根據 Chord protocol 的規範:
更新 finger table 與 successor pointers
以 JavaScript 來實現 stabilization protocol 的方式:
使用 setInterval
實現週期性執行(理論上這可以有更好的 scheduling 實現)Stabilization protocol 的算法分二個部份:
先定義 Stabilized() 與 Notify() 的訊息:
Stabilized() 負責向 successor 請求它的 predecessor,並決定 predecessor 是否要成為新的 sucessor:
Notify() 負責告知 sucessor 我是它的 node,讓 successor 能更新 finger table:
Node join
新的 node 建立時,要執行以下任務:
Finger Table
Finger table 是 Chord 的搜尋演算法。Node 可以經由 finger table 來找到任意節點。Finger table 的演算法設計,搜尋節點的關鍵,它可以避免線性(linear)搜尋的做法。每一個 node 都會有 finger table,finger table 的第 i 個 entry 紀錄的是 sucessor( (n + 2^(i-1)) mod 2^m )。
Finger table 是一個 hash ring 的結構。Chord 經由 predecessor 的觀念,來簡化 join 與 leave 的機制[2]。
Chord for Things
Chord 運用在 Internet of Things 與 Web of Things 的場景為何?
參考文獻
[1] Chord, https://en.wikipedia.org/wiki/Chord_(peer-to-peer) [2] I. Stoica, et al, Chord: A scalable peer-to-peer lookup service for internet applications [3] [1] LibraRing: An Architecture for Distributed Digital Libraries Based on DHTs, http://scholar.harvard.edu/files/ecdl05.pdf [4]: CS138, http://cs.brown.edu/courses/cs138/s15/content/projects/chord.pdf [5] Distributed Hash Tables, http://merlot.usc.edu/cs551-m05/lectures/tentative/20a_chord.pdf [6] http://zoo.cs.yale.edu/classes/cs722/2011/Jason_chord.pdf
其它資源
[1] http://www.dcs.ed.ac.uk/teaching/cs3/ipcs/chord-desc.html [2] http://slideplayer.com/slide/4418035/ [3] http://www.slideshare.net/imprataap/chord-node-join