(文章來源:網(wǎng)絡(luò)整理)
IPFS是對等(p2p)存儲網(wǎng)絡(luò)。可以通過可能中繼信息或存儲信息(或同時做這兩者)的對等方訪問內(nèi)容,并且這些對等方可以位于世界任何地方。IPFS知道如何通過其內(nèi)容地址找到您要的內(nèi)容,而不是在哪里。首先讓我們看一下內(nèi)容尋址以及該內(nèi)容如何鏈接在一起。IPFS堆棧的“中間”部分將生態(tài)系統(tǒng)連接在一起。一切都建立在能夠通過鏈接的唯一標(biāo)識符查找內(nèi)容的基礎(chǔ)上。
IPFS使用內(nèi)容編址通過內(nèi)容中的內(nèi)容而不是內(nèi)容的位置來標(biāo)識內(nèi)容。您一直都在按內(nèi)容查找項目。例如,當(dāng)您在圖書館里尋找一本書時,經(jīng)常會要求書名。這是內(nèi)容尋址,因為你問什么是。如果您使用位置尋址,找到那本書,你會問它通過在那里它是:“我想要的書那是在二樓,第一組,倒數(shù)第三架,左四周書”。如果有人搬了那本書,那你真倒霉!
通過散列進行內(nèi)容尋址已成為從分布式支持代碼到運行加密貨幣的區(qū)塊鏈的分布式系統(tǒng)中連接數(shù)據(jù)的一種廣泛使用的方法。但是,這些系統(tǒng)中的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)不一定可以互操作。
這就是IPLD項目的來歷。哈希標(biāo)識內(nèi)容,而IPLD在數(shù)據(jù)結(jié)構(gòu)之間轉(zhuǎn)換。由于不同的分布式系統(tǒng)以不同的方式構(gòu)造其數(shù)據(jù),因此IPLD提供了一些庫,用于組合可插拔模塊(每種IPLD節(jié)點的解析器)來解析多個鏈接節(jié)點之間的路徑,選擇器或查詢(允許您探索數(shù)據(jù),無論其基礎(chǔ)是什么)。協(xié)議)。IPLD提供了一種在內(nèi)容可尋址的數(shù)據(jù)結(jié)構(gòu)之間進行轉(zhuǎn)換的方法:“哦,您使用Git樣式,不用擔(dān)心,我可以關(guān)注這些鏈接。哦,您使用以太坊,我知道了,我也可以關(guān)注那些鏈接!”
IPFS協(xié)議使用IPLD從原始內(nèi)容獲取IPFS地址。IPFS對于如何將數(shù)據(jù)分解為DAG有其自己的偏好和約定;IPLD使用這些約定將IPFS網(wǎng)絡(luò)上的內(nèi)容鏈接在一起。IPFS生態(tài)系統(tǒng)中的其他所有內(nèi)容都基于此核心概念:鏈接的可尋址內(nèi)容是使其余工作正常進行的基本連接元素。IPFS和許多其他分布式系統(tǒng)利用了稱為有向無環(huán)圖或DAG 的數(shù)據(jù)結(jié)構(gòu)。具體來說,它們使用Merkle-DAG,它們是DAG,其中每個節(jié)點都有一個標(biāo)識符,該標(biāo)識符是節(jié)點內(nèi)容的哈希值。聽起來有點熟?這涉及到上一節(jié)中介紹的CID概念。查看此CID鏈接數(shù)據(jù)概念的另一種方法:通過其哈希值識別數(shù)據(jù)對象(如Merkle-DAG節(jié)點)是內(nèi)容尋址。
IPFS使用為表示目錄和文件而優(yōu)化的Merkle-DAG,但是您可以采用許多不同的方式來構(gòu)造Merkle-DAG。例如,Git使用Merkle-DAG,其中包含許多版本的倉庫。為了建立內(nèi)容的Merkle-DAG表示,IPFS通常首先將其分成多個塊。將其拆分為多個塊意味著文件的不同部分可以來自不同的來源,并且可以快速進行身份驗證。
Merkle-DAG有點“全力以赴”。也就是說,所有內(nèi)容都有CID。您有一個具有CID的文件。如果一個文件夾中有幾個文件怎么辦?該文件夾具有一個CID,并且該CID包含下面文件的CID。反過來,這些文件由塊組成,并且每個塊都有一個CID。您可以看到如何將計算機上的文件系統(tǒng)表示為DAG。希望您還可以看到Merkle-DAG圖如何開始形成的。要直觀地了解這個概念,請查看我們的IPLD Explorer。
Merkle-DAG的另一個有用功能是將內(nèi)容分成多個塊,如果您有兩個相似的文件,它們可以共享Merkle-DAG的一部分。也就是說,不同Merkle-DAG的一部分可以引用相同的數(shù)據(jù)。例如,如果您更新網(wǎng)站,則僅更改的文件將獲得新的內(nèi)容地址。您的舊版本和新版本可以為其他所有內(nèi)容引用相同的塊。這可以使傳輸大型數(shù)據(jù)集的版本(例如基因組研究或天氣數(shù)據(jù))更加高效,因為您只需要傳輸新的或已更改的部分,而不必每次都創(chuàng)建全新的文件。
因此,總而言之,IPFS允許您為內(nèi)容提供CID,并使用IPLD在Merkle-DAG中將內(nèi)容鏈接在一起。現(xiàn)在,讓我們繼續(xù)最后一部分:如何查找和移動內(nèi)容。為了查找哪些對等方正在托管您要查找的內(nèi)容(發(fā)現(xiàn)),IPFS使用分布式哈希表或DHT。哈希表是值鍵的數(shù)據(jù)庫。甲分布式哈希表是其中所述表在所有的對等體在一個分布式網(wǎng)絡(luò)分割。要查找內(nèi)容,請問這些同行。
該libp2p項目是IPFS生態(tài)系統(tǒng)提供連接,并互相交談的DHT和手柄同行的一部分。一旦知道了內(nèi)容的位置(即哪個或哪些對等方正在存儲構(gòu)成您所要訪問的內(nèi)容的每個塊),就可以再次使用DHT 查找這些對等方的當(dāng)前位置(路由)。因此,為了獲得內(nèi)容,您可以使用libp2p兩次查詢DHT。
您已經(jīng)找到了內(nèi)容,并且已經(jīng)找到了該內(nèi)容的當(dāng)前位置-現(xiàn)在您需要連接到該內(nèi)容并進行獲?。ń粨Q)。為了向其他對等方請求塊并向其他對等方發(fā)送塊,IPFS當(dāng)前使用名為Bitswap的模塊。Bitswap允許您連接到具有所需內(nèi)容的一個或多個對等節(jié)點,將其發(fā)送給您的需求列表(您感興趣的所有塊的列表),然后讓他們向您發(fā)送您請求的塊。這些塊到達后,您可以通過對它們的內(nèi)容進行哈希處理以獲取CID來對其進行驗證。
還討論了其他內(nèi)容復(fù)制協(xié)議,其中最發(fā)達的是Graphsync。正在討論中的一項提案,旨在擴展Bitswap協(xié)議以在請求和響應(yīng)周圍添加功能。
(責(zé)任編輯:fqj)
-
存儲
+關(guān)注
關(guān)注
13文章
4339瀏覽量
86006 -
互聯(lián)網(wǎng)
+關(guān)注
關(guān)注
54文章
11178瀏覽量
103568
發(fā)布評論請先 登錄
相關(guān)推薦
評論