5.7 以太坊原始碼詳解7
Kademila演算法
1 概念:一種分散式儲存以及路由的演算法
1 分散式儲存:不設中心化伺服器,所有的檔案分散儲存到各個節點上面
2 問題
1 儲存內容如何分配到各個節點,如何處理新增/刪除內容
2 如果一個節點要獲取特定的檔案,應該如何找到指定的節點/地址
3 節點要素
1 NodeID 二進位制 160位
2 IP地址和埠號
維護內容
1 被分配到的內容
2 內容是以“(key,value)”的形式儲存的,“<檔名,檔案內容>”
3 k-bucket路由表:通過NodeID分層,記錄有限其他節點的ID,IP地址,埠號
4 檔案儲存及查詢
1 假如要查詢的書名(hash)是0x100000
2 那麼我們希望它能被儲存在學號(nodeId)位0x100000中
3 為了防止節點罷工,就儲存到0x100000,0x100001,0x100002,…
5 節點的異或距離
1 距離:
2 樹:把整個網路節點梳理為按nodeid排列的二叉樹,樹最末端的葉子就是他的每一個節點。
3 由於nodeId有160位,那它的分層應該有160層,整個網路中能夠容納2^160個節點,每個節點最多可以維護160*k行其他節點。
6 節點定位(查詢原理)
1 同學A(00000110)要查詢《分散式演算法》
2 計算出《分散式演算法的雜湊》= 00010000
3 同學Z的雜湊就是00010000
4 計算異或距離00010110,結果為從倒數第五位開始不同,k-bucket 5
5 在自己的k-bucket 5中查詢Z同學
6 查詢到之後,直接要
7 如果沒找到,就在自己的k-bucket 5中查詢任意一個同學B,請求B同學查詢Z
8 重複6、7步驟
9 通過這種方式查詢,最多查log2n次
7 演算法引數
1 keyspace
1 keyspace決定ID有多少位
2 每個節點的通訊錄有幾層
2 k
1 每一層的k-bucket裡面裝了k個node的資訊
2 每次查詢node,返回k個Node的資訊
3 對於某個特定的data,離key最近的幾個k會被要求儲存這個data
3 a
1 每次向其他節點發起請求查詢某個node,會向a個節點發出請求
8 節點指令
1 PING:測試一個節點是否線上
2 STORE:要求一份節點儲存資料
3 FIND_NODE:根據NODE_ID查詢一個節點
4 FIND_VALUE:根據Key值查詢一個樹據
9 k-bucket的維護和更新機制
1 每個節點都會按照最後一次接觸時間倒序排列
2 沒次執行4個指令之一就會觸發更新
3 當一個節點與自己接觸的時候要檢查其是否在自己的k-bucket中
1 如果在,將其挪到自己k-bucket列表的最底
2 如果不在
1 PING一下列表中最上面(最舊)的節點,如果該節點能ping通,將其挪到最底部,拋棄新節點
2 如果ping不同,扔掉該節點,將新節點加入列表中,從而保證節點介入或者刪除不會影響整個網路。
-
學院Go語言視訊主頁
https://edu.csdn.net/lecturer/1928 -
掃碼獲取海量視訊及原始碼 QQ群:721929980
相關文章
- 5.1 以太坊原始碼詳解1原始碼
- 5.2 以太坊原始碼詳解2原始碼
- 5.3 以太坊原始碼詳解3原始碼
- 5.4 以太坊原始碼詳解4原始碼
- 5.5 以太坊原始碼詳解5原始碼
- 5.6 以太坊原始碼詳解6原始碼
- 以太坊原始碼分析(7)Ethereum 資源分享原始碼
- Geth命令用法-引數詳解 and 以太坊原始碼檔案目錄原始碼
- CentOS 7 原始碼編譯安裝 Mysql 5.7CentOS原始碼編譯MySql
- 以太坊官方 Token 程式碼詳解
- Spring原始碼剖析7:AOP實現原理詳解Spring原始碼
- redux 原始碼詳解Redux原始碼
- TimSort原始碼詳解原始碼
- HashMap原始碼詳解HashMap原始碼
- HashSet原始碼詳解原始碼
- ProgressHUD原始碼詳解原始碼
- 以太坊原始碼解讀 BlockChain的初始化原始碼Blockchain
- 以太坊原始碼分析(36)ethdb原始碼分析原始碼
- 以太坊原始碼分析(38)event原始碼分析原始碼
- 以太坊原始碼分析(41)hashimoto原始碼分析原始碼
- 以太坊原始碼分析(43)node原始碼分析原始碼
- 以太坊原始碼分析(52)trie原始碼分析原始碼
- open-ethereum-pool以太坊礦池原始碼分析(7)unlocker模組原始碼
- MySQL 5.7 新特性詳解MySql
- 以太坊原始碼分析(51)rpc原始碼分析原始碼RPC
- 【Redis原始碼】Redis 6 ACL原始碼詳解Redis原始碼
- ArrayList詳解-原始碼分析原始碼
- LinkedHashMap原始碼詳解HashMap原始碼
- 以太坊交易池原始碼分析原始碼
- 以太坊交易池原始碼解析原始碼
- 以太坊原始碼分析(18)以太坊交易執行分析原始碼
- 以太坊原始碼分析(37)eth以太坊協議分析原始碼協議
- 3.3 以太坊核心詞彙詳解
- 3.4 以太坊架構詳解架構
- 以太坊原始碼分析(20)core-bloombits原始碼分析原始碼OOM
- 以太坊原始碼分析(24)core-state原始碼分析原始碼
- 以太坊原始碼分析(29)core-vm原始碼分析原始碼
- Android原始碼分析--CircleImageView 原始碼詳解Android原始碼View