從「分布式」角度看IPFS對區塊鏈的重要性


從“分佈式”角度看IPFS對區塊鏈的重要性


作者丨李畫


區塊鏈是一個分佈式系統,但包括以太坊、EOS在內的諸多公鏈本身實現的都只是數據的分佈式計算,而沒有提供數據的分佈式存儲,這導致分佈式的區塊鏈系統無法真正徹底地做到分佈式。

IPFS(Inter Planetary File System,星際文件系統)協議解決的正是這樣一個問題,它是分佈式文件系統,可以實現數據的分佈式存儲。同時它也是一個去中心化網絡的基礎設施,包括公鏈在內的不同類型的應用都可以構建在它的基礎之上。

如果說公鏈是高速公路,IPFS則是高速公路路面之下的層層地基中重要的一層,它為不同的公鏈和應用提供數據的分佈式存儲這一支持。

IPFS並非全新發明,它是幾十年來分佈式系統探索的產物,綜合了包括DHT(Distributed Hash Table),BitTorrent,Git和SFS(Self-Certified Filesystems)在內的優秀思想。IBFS對它們做出適合區塊鏈系統的改進,並通過分層設計將它們組合成一個新的系統。

從“分佈式”角度看IPFS對區塊鏈的重要性


本文將去繁從簡,以數據的存取過程為線索,通過對IPFS最關鍵的三個系統技術的分析,看它是如何滿足區塊鏈數據的分佈式存儲需求的。

01

Merkle DAG


當把文件存儲到IPFS系統中時,文件並不是以一個完整的個體被存儲,文件數據以平均分割法的方式被切分成若干個256KB大小的塊。這些塊在經過哈希運算後,也並不是存儲在單箇中心化的服務器上,而是分開存儲在網絡中的各個分佈式的節點之中,沒有節點擁有特權。

這一分佈式存儲的難點不在於文件的切割或加密,而在於如何把這些被分割的和被分開存儲的數據重新組合成一個文件,這正是IPFS協議的第一個關鍵技術——Merkle DAG(Merkle Directed Acyclic Graph,默克爾有向無環圖)。

Merkle DAG從Git系統(林納斯·託瓦茲創作的分佈式版本控制系統)改造而來,是在Merkle Tree(如下圖所示)的基礎上構建,儲存的是哈希值。IPFS上大部分數據對象都是以Merkle DAG的結構存在。

從“分佈式”角度看IPFS對區塊鏈的重要性


當從網絡中獲取文件時,先從可信的節點獲得文件的Merkle Tree樹根哈希值。一旦獲得了樹根,就可以從其他不可信的節點獲取Merkle Tree的各個節點的哈希值。通過可信的樹根來檢查接收到的Merkle Tree節點,如果Merkle Tree某節點是損壞的或者虛假的,就從其他存儲節點獲得另一個Merkle Tree節點,直到最終獲得一個與可信樹根匹配的Merkle Tree。

這樣一來,從上至下,直到獲得最底層的被切割成小塊的數據的哈希,最終形成一個完整的正確的文件。

由於Merkle DAG是基於哈希值的,而哈希值取決於數據塊的內容,因此IPFS協議擁有內容尋址的功能(HTTP是基於域名尋址),此外它還有防篡改和去重複的功能。防篡改是因為可以通過檢查哈希值來確認數據是否被篡改;去重複是由於相同內容的數據塊哈希是相同的,可以去掉重複的數據,節省存儲空間。

02

DHT


依靠Merkle DAG,可以構建一個數據結構用於實現分佈式的數據存儲,但還缺最後一步,Merkle DAG存儲的哈希值如何定位到具體存儲數據的節點,也就是說,應該把數據分配到哪一個網絡節點去存儲,以及去從哪一個網絡節點獲得存儲數據。DHT(Distributed Hash Table,分佈式哈希表)便是用來解決這一問題的方法。

哈希表是一種存儲“鍵值對( Key/Value Pairs)”的容器,它能方便快速地通過key值來獲得 value值。在DHT中,key是被存儲數據的哈希值,通過K/V可以實現數據塊與目標節點的映射關係。

哈希表被分割成不連續的塊,每個節點被分配一個屬於自己的哈希塊,也稱做區間表,併成為這個哈希塊的管理者,當用戶存儲數據時,系統對數據進行哈希運算,根據哈希運算的結果決定此數據由哪個節點負責儲存,並生成哈希表。

當用戶提取數據的時候,用同樣的算法計算數據的哈希,然後從哈希表獲得對應的數據存儲位置(如下圖所示)。

從“分佈式”角度看IPFS對區塊鏈的重要性


DHT是分佈式系統的關鍵技術,實現它的方法有很多種,IPFS採用的是基於S / Kademlia和Coral的算法。

03

BitSwap


僅僅實現數據的分佈式存儲還遠遠不夠,數據還需要在節點之前有效的交換,從而使得整個系統能夠高效運轉。IPFS協議 受BitTorrent 的啟發,通過對等節點間交換數據塊來分發數據。

BitTorrent 是一種點對點傳輸的網絡協議,它可以在存有不信任對等節點的網絡中分發數據,對於一個文件,下載的用戶數越多,下載的速度就越快,部分的網絡擁堵或服務器宕機也不會對整個系統造成大的影響。不過BitTorrent有一個致命的缺點,就是節點往往更多的是索取而不是貢獻。

如何激勵節點分享數據?IPFS在BitTorrent的基礎上進行了創新,增加了包括信用、策略、帳單在內的體系,這一體系之上的新的數據交換協議被稱做BitSwap。

在BitSwap協議下,發送數據給其他節點可以增加節點信用值,而從其他節點接受數據則會降低節點信用值。

也就是說,如果一個節點持續分享數據,其他節點給它發送數據的概率就會越來越大;而如果一個節點只接收數據而不分享數據,其他節點給它發送數據的概率就會越來越低,直到低到被其他節點忽略(如下圖所示)。

從“分佈式”角度看IPFS對區塊鏈的重要性


此外,BitSwap獲取數據塊的時候不限於從同一組對等節點中,在該協議裡存在一個對等節點形成的大集群,它包括所有的數據塊,這使得BitSwap的效率相比於BitTorrent更高。

04

結語


Juan Benet在2014年5月成立了Protocol Labs協議實驗室,並在2015年1月發佈了IPFS。IPFS在本質上是一個內容尋址的分佈式存儲和傳輸協議。

IPFS被寄予厚望,它是目前階段最好的分佈式存儲解決方案之一,人們甚至認為它可能取代超文本傳輸協議(HTTP,HyperText Transfer Protocol)。但另一方面,它在目前階段還不夠成熟,仍面臨著包括安全性、可用性在內的諸多問題。

最後,簡單介紹一下Filecoin和Filenet。

Filecoin和Filenet都是運行在IPFS上的激勵層,通過Token激勵讓節點有動力為網絡提供存儲空間,從而在IPFS協議的基礎上構建一個分佈式的存儲網絡。但Filecoin和Filenet彼此獨立,是兩個不同的項目,採用的也是不同的Token分發模式。從某種角度而言,任何組織都可以在IPFS上搭建自己的激勵層。


分享到:


相關文章: