1.chord 概念
chord是什麼
- chord是乙個演算法,也是乙個協議。作為乙個演算法,chord可以從數學的角度嚴格證明其正確性和收斂性;作為乙個協議,chord詳細定義了每個環節的訊息型別。
chord還可以被作為乙個一致性雜湊、分布式雜湊(dht)的實現。
覆蓋網路(overlaynetwork)
- 構建在其他網路之上、網路節點之間通過虛擬或邏輯連線在一起,比如雲計算、分布式系統都是覆蓋網路,因為其都構建於tcp/ip之上,且節點之間有聯絡。chord也是構建於覆蓋網路
分布式雜湊表(dht)
chord實現原理
2.chord裡面的基本要素
3. chord資源定位(key location)
迴圈查詢 :
缺點 : 效率不給力可伸縮方法:
路由表是如何生成:
a . 已知chord環的大小為 2^6 = 64(識別符號), 已知nid (節點) n1,n8, n14, n21,n32,n38,n42,n48,n51
b. 圖展示的n8節點的是finger table的過程
1. m =6 , 所以每個節點最多維護了6個的資源id (kid);
2. k=8為起始位置, kid(8+2^0) = kid9 —->nid14
3. kid(8+2^1) =kid11 —–> nid14
4. kid(8+2^2) =kid12 —–> nid14
5. kid(8+2^3) =kid16 —–> nid21
…
好處:資源查詢- 某個節點上查詢資源時,首先判斷其後繼節點是不是就持有該資源,若沒有則直接從該節點的路由表從最遠處開始查詢,看哪一項離持有資源的節點最近(發現後跳轉),若沒有則說明本節點自身就有要尋找的資源。如此迭代下去。
經證明,最多經過o(log n)次查詢就能找到乙個資源。
4. chord的節點加入
原始 chord 環的部分已知節點n21, n32, 資源kid24,kid30的後繼節點為n32
新節點n26節點要加入系統(chord),首先它指向其後繼n32,然後通知n32,n32接到通知後將n26標記為它的前序節點(predecessor)。
然後修改n32節點的finger table ,由新節點n26接管資源k24, 即 資源k24的後繼節點變為n26
於是n21就將後繼節點修改為n26,並通知n26自己已經將其設定為後繼節點,n26接到通知後將n21設定為自己的前序節點
新節點的加入有兩方面的影響:
a.所有後繼指標和路由表項都正確時:對正確性沒有影響
b.後繼指標正確但表項不正確:查詢結果正確,但速度稍慢(在目標節點和目標節點的後繼處加入非常多個節點時)。如下圖:
c.後繼指標和路由表項都不正確:此時查詢失敗,chord上層的軟體會發現資料查詢失敗,在一段時間後會進行重試。
總結一下:節點加入對資料查詢沒有影響5. 應
以太坊p2p模組 以太坊原始碼學習
p2p模組對外暴露了server關鍵結構,幫助上層管理複雜的p2p網路,使其集中於protocol的實現,只關注於資料的傳輸.server使用discover模組,在指定的udp埠管理網路中結點的發現以及維護,discover模組能夠直接和臨近結點交換各自已知結點資訊,從而不斷的更新結點網路.ser...
以太坊p2p模組的dial 以太坊原始碼學習
dial.go是負責和peer建立連線關係的地方,主要是實現 type dialer inte ce dialstate schedules dials and discovery lookups.it get s a chance to compute new tasks on every ite...
以太坊系列之六 p2p模組 以太坊原始碼學習
p2p模組對外暴露了server關鍵結構,幫助上層管理複雜的p2p網路,使其集中於protocol的實現,只關注於資料的傳輸.server使用discover模組,在指定的udp埠管理網路中結點的發現以及維護,discover模組能夠直接和臨近結點交換各自已知結點資訊,從而不斷的更新結點網路.ser...