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