未來的互聯(lián)網(wǎng)存儲(chǔ):5 大分布式存儲(chǔ)平臺(tái)深入比較

街智能潮
IPFS是持久性數(shù)據(jù)結(jié)構(gòu),因此,IPFS中沒有刪除或移除操作的概念。這是因?yàn)閮?nèi)容被傳播到受激勵(lì)而服務(wù)于它的節(jié)點(diǎn)。

談到區(qū)塊鏈和分布式計(jì)算,最重要的是共識(shí)算法和智能合約。但是,談及日常應(yīng)用程序,這些屬性還不足以支持當(dāng)今世界的需求。如果我們只依靠上述這兩項(xiàng),就難以想象像在Netflix上那樣觀賞喜愛的電影或電視劇、像在臉書上那樣存儲(chǔ)或分享值得紀(jì)念的視頻或照片,或在區(qū)塊鏈上玩喜愛的在線游戲(如DOTA)。

我們?nèi)鄙僖粋€(gè)強(qiáng)大、安全和去中心化的內(nèi)容存儲(chǔ)以及分發(fā)系統(tǒng),服務(wù)于當(dāng)今的應(yīng)用程序。

下面,我們將探索和評(píng)估一些最流行的分布式存儲(chǔ)平臺(tái)。

本文為系列文中的《上》篇,主要介紹Swarm和IPFS。系列文的《中》及《下》篇將分別介紹Sia和Storj以及MaidSafe。

一、Swarm

1.狀態(tài):

活躍

2.說明:現(xiàn)在是

Swarm是分布式存儲(chǔ)平臺(tái)和內(nèi)容分發(fā)服務(wù),是以太坊web3棧的本地基礎(chǔ)層服務(wù)。Swarm的主要目標(biāo)是提供充分分散和冗余存儲(chǔ)的以太坊公共記錄,尤其是存儲(chǔ)和分發(fā)DApp的代碼和數(shù)據(jù)以及區(qū)塊鏈數(shù)據(jù)。從經(jīng)濟(jì)角度來看,它允許參與者有效匯集他們的存儲(chǔ)容量和帶寬資源,以給網(wǎng)絡(luò)的所有參與者提供這些服務(wù),同時(shí)接受以太坊的激勵(lì)。

3.目標(biāo)

Swarm更廣泛的目標(biāo),是為去中心化的web應(yīng)用程序(DApp)開發(fā)人員提供基礎(chǔ)設(shè)施服務(wù),特別是:消息傳遞、數(shù)據(jù)流、點(diǎn)對(duì)點(diǎn)記賬、可變資源更新、存儲(chǔ)保險(xiǎn)、監(jiān)管掃描和修復(fù)、支付渠道和數(shù)據(jù)庫服務(wù)。

從終端用戶的角度來看,Swarm和萬維網(wǎng)的差別不大,除了上傳不托管在特定的服務(wù)器上。Swarm提供了一個(gè)點(diǎn)到點(diǎn)的存儲(chǔ)和服務(wù)解決方案,它具有DDos抗性、零停機(jī)、容錯(cuò)和審查及自我維持的特性,它內(nèi)置了激勵(lì)系統(tǒng),通過點(diǎn)對(duì)點(diǎn)記賬,允許用戶為交易資源進(jìn)行支付。Swarm旨在和以太坊的devp2p多協(xié)議網(wǎng)絡(luò)層以及以太坊區(qū)塊鏈進(jìn)行深度集成,以進(jìn)行域名解析(利用ENS)、服務(wù)支付和內(nèi)容可用性保證。

請注意:為了解析ENS域名,Swarm節(jié)點(diǎn)必須要連接到以太坊區(qū)塊鏈上(主網(wǎng)或測試網(wǎng))。

請參考開發(fā)路徑圖,以獲得Swarm的進(jìn)展信息。

4.概述

Swarm旨在給新的去中心化互聯(lián)網(wǎng)提供基礎(chǔ)層的基礎(chǔ)設(shè)施。Swarm是點(diǎn)對(duì)點(diǎn)的節(jié)點(diǎn)網(wǎng)絡(luò),通過彼此之間貢獻(xiàn)資源(存儲(chǔ)、消息轉(zhuǎn)發(fā)、支付處理)提供分布式數(shù)字服務(wù)。以太坊基金會(huì)運(yùn)作Swarm測試網(wǎng),可以用來以類似于以太坊測試網(wǎng)絡(luò)(ropsten)的方式測試功能。每個(gè)人都可以通過在自己的服務(wù)器、臺(tái)式機(jī)、筆記本電腦或移動(dòng)設(shè)備上運(yùn)行Swarm客戶節(jié)點(diǎn)加入到網(wǎng)絡(luò)中。請參閱《Swarm入門(https://swarm-guide.readthedocs.io/en/latest/gettingstarted.html#getting-started)》一文以了解操作方法。Swarm客戶端是以太坊棧的一部分,參考實(shí)現(xiàn)是用golang編寫的,可以在go-ethereum存儲(chǔ)庫中找到它。目前在所有節(jié)點(diǎn)上運(yùn)行的是POC 0.3版。

Swarm提供本地HTTP代理API,DApp或命令行工具可以用來和Swarm進(jìn)行交互。像消息傳遞這樣的模塊只能基于PRC-JSON API才可使用。在測試網(wǎng)(testnet)上的基礎(chǔ)服務(wù)提供公共網(wǎng)關(guān),用于輕松演示功能和允許免費(fèi)的訪問,以便人們無需運(yùn)行任何自己的節(jié)點(diǎn)即可嘗試Swarm。

Swarm是devp2p網(wǎng)絡(luò)的節(jié)點(diǎn)集合,其中的每個(gè)節(jié)點(diǎn)在同一個(gè)網(wǎng)絡(luò)ID上運(yùn)行bzz協(xié)議套件。

Swarm節(jié)點(diǎn)也可以連接到一個(gè)(或多個(gè))以太坊區(qū)塊鏈上,以進(jìn)行域名解析,并連接到一個(gè)以太坊區(qū)塊鏈進(jìn)行帶寬和存儲(chǔ)補(bǔ)償。運(yùn)行相同網(wǎng)絡(luò)ID的節(jié)點(diǎn)應(yīng)該連接到相同的區(qū)塊鏈上以進(jìn)行支付。Swarm網(wǎng)絡(luò)由其網(wǎng)絡(luò)ID標(biāo)識(shí),該網(wǎng)絡(luò)ID是一個(gè)任意整數(shù)。

Swarm允許上傳(upload)和消失(disappear),這意味著任何節(jié)點(diǎn)可以只上傳內(nèi)容給Swarm,然后就可以下線。只要節(jié)點(diǎn)沒有丟失或變得不可用,該內(nèi)容將仍舊可以訪問,這是因?yàn)橛幸粋€(gè)“同步”的過程,節(jié)點(diǎn)持續(xù)地在彼此之間傳遞可用數(shù)據(jù)。

5.公共網(wǎng)關(guān)

Swarm提供本地HTTP代理API,DApp可以用來和Swarm進(jìn)行交互。以太坊基金會(huì)在托管公共網(wǎng)關(guān),該網(wǎng)關(guān)允許免費(fèi)訪問,因此,人們甚至無需運(yùn)行自己的節(jié)點(diǎn)即可嘗試Swarm。

Swarm公共網(wǎng)關(guān)可以在http://swarm-gateways.net上找到,上面一直都運(yùn)行著最新的Swarm穩(wěn)定版。

請注意:目前,該網(wǎng)關(guān)只接受限制大小的上傳。將來,上傳到該網(wǎng)關(guān)的功能很可能完全消失。

上傳和下載數(shù)據(jù)

上傳內(nèi)容由這些步驟組成:“上傳”內(nèi)容到本地Swarm節(jié)點(diǎn),接著本地Swarm節(jié)點(diǎn)用其在網(wǎng)絡(luò)中的對(duì)等點(diǎn)“同步”所生成的數(shù)據(jù)塊。同時(shí),下載內(nèi)容由這些步驟組成:本地Swarm節(jié)點(diǎn)查詢在網(wǎng)絡(luò)中的對(duì)等點(diǎn)以獲取相關(guān)的數(shù)據(jù)塊,然后在本地重組這些內(nèi)容。

6.內(nèi)容解析器:ENS

請注意:為了解析ENS名稱,Swarm節(jié)點(diǎn)必須連接到以太坊區(qū)塊鏈(主網(wǎng)或測試網(wǎng))。

ENS是個(gè)系統(tǒng),Swarm用它來實(shí)現(xiàn)以人類可讀的名稱(如theswarm.eth)引用內(nèi)容。它的操作類似于DNS系統(tǒng),把人類可讀的名稱轉(zhuǎn)換成機(jī)器標(biāo)識(shí)符,在此,即你正在引用的內(nèi)容的Swarm哈希。通過注冊一個(gè)名稱,并把它解析成網(wǎng)站的根清單的內(nèi)容哈希值,用戶可以通過URL(如bzz://theswarm.eth/)訪問該網(wǎng)站。

請注意:目前,主流的瀏覽器(如Chrome、Firefox或Safari)不支持bzz協(xié)議。目前,如果要通過這些瀏覽器訪問bzz協(xié)議,必須使用HTTP網(wǎng)關(guān)(如https://swarm-gateways.net/bzz:/theswarm.eth/)或者使用支持bzz協(xié)議的瀏覽器(如Mist)。

要了解更多在Swarm上傳、下載和處理內(nèi)容的信息,請參閱這里。

7.可變資源更新(Mutable Resource Updates)

可變資源更新是Swarm POC3上的一項(xiàng)高度實(shí)驗(yàn)性的功能。它正在積極開發(fā)中,因此,有些東西可能會(huì)有變化。

我們在這份指南中已經(jīng)了解到,當(dāng)我們在Swarm中改變數(shù)據(jù)時(shí),我們上傳的數(shù)據(jù)所返回的哈希值會(huì)以無法預(yù)料的方式變化。通過可變資源更新,Swarm提供一種內(nèi)置方式,可以對(duì)更改數(shù)據(jù)保持一個(gè)持久的標(biāo)識(shí)符。

為了保持與更改數(shù)據(jù)有相同的指針,常用的方法是利用以太坊命名服務(wù)ENS。但是,ENS是一個(gè)鏈上功能,它限制了其他地方的功能:

每個(gè)ENS解析器的更新都需要gas才能進(jìn)行。更改數(shù)據(jù)不可能比挖出新區(qū)塊的速度更快。正確的ENS解析方案要求始終同步到區(qū)塊鏈。

可變資源更新允許我們用非變量標(biāo)識(shí)符來更改數(shù)據(jù),無需使用ENS。利用在創(chuàng)建資源時(shí)獲得的密鑰,可以像普通Swarm對(duì)象一樣引用可變資源。

如果同時(shí)使用ENS解析器合約和可變資源更新,只需要一個(gè)初始事務(wù)來注冊MRU_MAINFEST_KEY。該密鑰將解析到資源的最近版本上(更新該資源不會(huì)改變該密鑰)。有3種和可變資源更新進(jìn)行交互的方法:HTTP API、Golang API和Swarm CLI。

請參閱這里以了解更多情況。

注意事項(xiàng):

只有創(chuàng)建該資源的私鑰(地址)可以更新它。在創(chuàng)建可變資源時(shí),必須要提供的參數(shù)之一是預(yù)期的更新頻率。這表明該資源多快(以秒計(jì)算)被更新一次。盡管你可以以其他的速率更新該資源,但這么做會(huì)減慢索引該資源的處理過程。

8.Swarm上的加密

在POC 0.3中引入了對(duì)稱加密技術(shù),現(xiàn)在可以很容易隨Swarm up上傳命令一起使用對(duì)稱加密了。該加密機(jī)制是用來保護(hù)信息,并使得在處理任何Swarm節(jié)點(diǎn)時(shí)都不可讀分塊數(shù)據(jù)。

Swarm使用計(jì)數(shù)器模式加密技術(shù)來加密和解密內(nèi)容。當(dāng)上傳內(nèi)容到Swarm時(shí),該上傳的數(shù)據(jù)被分為4KB大小的塊。這些塊都將用獨(dú)立的隨機(jī)生成的加密密鑰來編碼。這個(gè)加密過程在本地Swarm節(jié)點(diǎn)上發(fā)生,沒被加密的數(shù)據(jù)不與其他節(jié)點(diǎn)共享。單個(gè)塊(和整個(gè)內(nèi)容)的引用將是編碼數(shù)據(jù)哈希值和加密密鑰的組合。這意味著引用將比標(biāo)準(zhǔn)無加密的Swarm引用長一些(不是32個(gè)字節(jié),而是64個(gè)字節(jié))。

當(dāng)你的節(jié)點(diǎn)將你的內(nèi)容的加密塊與其他節(jié)點(diǎn)同步時(shí),它不與其他節(jié)點(diǎn)共享完整的引用(或任何方式的解密密鑰)。這意味著其他節(jié)點(diǎn)無法訪問你的原始數(shù)據(jù),此外,它們也無法偵測到同步的塊是否經(jīng)過加密。

檢索數(shù)據(jù)時(shí),只在本地Swarm節(jié)點(diǎn)上將它解密。在整個(gè)檢索過程中,這些塊以加密的形式遍歷網(wǎng)絡(luò),參與的對(duì)等節(jié)點(diǎn)無法解密它們。它們只在用于下載的Swarm節(jié)點(diǎn)上進(jìn)行解密和重組。

要了解如何在Swarm上處理加密的更多信息,請參閱這里(https://github.com/ethersphere/swarm/wiki/Symmetric-Encryption-for-Swarm-Content)。

注意事項(xiàng):

Swarm支持加密。由于無法撤銷上傳,因此強(qiáng)烈建議不上傳未加密的敏感和私密數(shù)據(jù)。用戶應(yīng)該避免上傳非法的、有爭議的或不道德的內(nèi)容。Swarm目前即支持加密也支持未加密的swarm up命令,通過使用–encrypt參數(shù)來標(biāo)識(shí)。將來可能有變化。加密功能是非確定性的(因?yàn)槊總€(gè)上傳請求生成的密鑰是隨機(jī)的),API的用戶不應(yīng)該依賴結(jié)果的冪等性;這樣,在啟用加密的情況下,同樣的內(nèi)容兩次上傳到Swarm所產(chǎn)生的引用是不同的。

9.PSS

PSS(Postal Service over Swarm,Swarm上的Postal服務(wù))是Swarm上的消息傳遞協(xié)議,具有強(qiáng)大的隱私功能。PSS API通過在該API Reference中所描述的JSON RPC接口公開,我們在這里只解釋基本概念和功能。

請注意:PSS仍然是個(gè)實(shí)驗(yàn)性的功能,正在積極開發(fā)中,可從Swarm的POC3開始使用。預(yù)計(jì)有些事情會(huì)有所變化。

10.基礎(chǔ)知識(shí)

通過PSS,可以發(fā)送消息給Swarm網(wǎng)絡(luò)上的任何節(jié)點(diǎn)。消息的路由方式和塊的檢索申請方式一樣。PSS消息不使用塊哈希引用,而是在覆蓋地址空間中指定目標(biāo),與消息的有效負(fù)載無關(guān)。如果該目標(biāo)是一個(gè)完整的覆蓋地址就可以將其描述為一個(gè)特定的節(jié)點(diǎn),或者如果它只部分指定其一,則可以描述為鄰居。消息通過DevP2P對(duì)等連接使用forwarding kademlia算法進(jìn)行轉(zhuǎn)發(fā),forwarding kademlia算法則通過使用kademlia路由的中繼節(jié)點(diǎn)之間的半永久點(diǎn)對(duì)點(diǎn)TCP連接傳遞消息。在目標(biāo)鄰居內(nèi),該消息利用Gossip進(jìn)行廣播。

由于PSS消息是加密的,因此,最終收件人可以解密該消息??梢杂梅菍?duì)稱或?qū)ΨQ加密方式進(jìn)行加密。

消息有效負(fù)載通過接收節(jié)點(diǎn)分發(fā)給消息處理器,并通過API分發(fā)給訂閱用戶。

請注意:目前,PSS不保證消息的訂購(盡最大努力傳遞),也不保證消息的傳遞(也即,不緩存和中繼給離線節(jié)點(diǎn)的消息)。

11.隱私功能

得益于端到端的加密,PSS也適合私人通信。

PSS使用了forwarding kademlia算法,對(duì)發(fā)送者進(jìn)行匿名化處理。

利用部分尋址,pss提供收件人匿名的可調(diào)范圍:目標(biāo)鄰居越多,所顯示的預(yù)期收件人覆蓋地址的前綴越小,就越難識(shí)別真正的收件人。另一方面,由于暗路由(dark routing)效率低,因此在匿名性和消息傳遞延遲及帶寬(還有因此產(chǎn)生的成本)之間需要折衷,而這留給應(yīng)用程序來選擇。

如果使用Handshakes模塊,則提供前向保密。

要了解更多pss的使用情況,請參閱這里。

架構(gòu)

請參閱這里以了解更多Swarm的架構(gòu)。

示例DApp

請參閱Swarm去中心化應(yīng)用實(shí)例的詳細(xì)內(nèi)容,請參照這里。

注意事項(xiàng):

敏感內(nèi)容一定要加密!對(duì)于加密內(nèi)容,上傳的數(shù)據(jù)是“受保護(hù)的”,也即,只有那些知道對(duì)根塊(文件的Swarm哈希值和加密密鑰)引用的人可以訪問該內(nèi)容。因?yàn)榘l(fā)布該引用(在ENS上或用MRU)需要一個(gè)額外步驟,只要用戶使用加密,就可以輕松地得到保護(hù),防止粗心地發(fā)布。Swarm會(huì)刪除沒有明確受到保護(hù)的內(nèi)容,這是因?yàn)镾warm中限制了存儲(chǔ)容量,Swarm最終會(huì)將這些節(jié)點(diǎn)轉(zhuǎn)到垃圾箱內(nèi)。直到實(shí)施存儲(chǔ)保險(xiǎn)(請參閱路徑圖以了解更多)之前,測試網(wǎng)不保證持久保存上傳的內(nèi)容。所有參與的節(jié)點(diǎn)都被視為沒有任何義務(wù)的自愿服務(wù),以其意愿刪除內(nèi)容。這樣,在激勵(lì)系統(tǒng)運(yùn)行之前,用戶在任何情況下都不應(yīng)該將Swarm視作安全存儲(chǔ)介質(zhì)。Swarm是持久數(shù)據(jù)結(jié)構(gòu)(Persistent Data Structure),因此,在Swarm中沒有刪除或移除操作的概念。這是因?yàn)閮?nèi)容被傳播到被激勵(lì)服務(wù)它的Swarm節(jié)點(diǎn)。

Swarm Reddit|Swarm Twitter|Swarm Github

二、IPFS

1.狀態(tài):

活躍(這是一個(gè)激勵(lì)系統(tǒng),“Filecoin”是不活躍的)

2.說明:

IPFS(Interplanetary File System,星際文件系統(tǒng)),是點(diǎn)對(duì)點(diǎn)(peer-to-peer,簡稱p2p)文件共享系統(tǒng),旨在從根本上改變信息在全球范圍內(nèi)的傳播方式。它跟Swarm有點(diǎn)類似,或者,我們也可以說Swarm跟IPFS有點(diǎn)類似。

IPFS包含了通信協(xié)議和分布式系統(tǒng)的幾個(gè)創(chuàng)新,它們的組合產(chǎn)生了與眾不同的文件系統(tǒng)。因此,為了理解IPFS所要嘗試達(dá)到的廣度和深度,重要的是,理解使其變得可能的技術(shù)突破和所有它在嘗試解決的問題。

IPFS自詡要取代HTTP。那么,我們來看看如今互聯(lián)網(wǎng)的工作原理。

簡而言之,現(xiàn)在的互聯(lián)網(wǎng)是協(xié)議的集合,這些協(xié)議描述了數(shù)據(jù)是如何在整個(gè)網(wǎng)絡(luò)中移動(dòng)的。隨著時(shí)間的推移,開發(fā)人員使用著不同的協(xié)議,并在該基礎(chǔ)設(shè)施上構(gòu)建他們的應(yīng)用程序。在這些協(xié)議中,其中一個(gè)是Web的骨架,即HTTP或超文本傳輸協(xié)議(HyperText Transfer Protocol)。它是由Tim Berners-Lee于1991年發(fā)明的。

Internet Protocol stack aka.OSI Model

HTTP是請求-響應(yīng)協(xié)議??蛻舳耍ɡ鐆eb瀏覽器)發(fā)送一個(gè)請求給外部服務(wù)器。該外部服務(wù)器隨后返回一個(gè)響應(yīng)消息,例如,把谷歌的主頁返回給客戶端。這是位置尋址協(xié)議,這意味著,當(dāng)在瀏覽器中鍵入google.com時(shí),它被翻譯成某個(gè)谷歌服務(wù)器的IP地址,接著,該服務(wù)器啟動(dòng)請求-響應(yīng)周期。

How people talk on Internet

3.HTTP的問題

假設(shè)你正坐在課堂上,教授要求你訪問某個(gè)特定的網(wǎng)站。課堂上的每個(gè)學(xué)生都向該網(wǎng)站發(fā)出請求,并獲得響應(yīng)。這意味著,完全相同的數(shù)據(jù)被單獨(dú)發(fā)送給課堂上的每個(gè)學(xué)生。如果有100個(gè)學(xué)生,那么就有100個(gè)請求和100個(gè)響應(yīng)。很顯示,這不是最有效的方法。理想的話,這些學(xué)生將能夠利用他們的物理位置接近度以更有效地檢索他們所需的信息。

如果網(wǎng)絡(luò)通信線路有問題,那么HTTP也會(huì)出大問題,客戶端就無法連接服務(wù)器。如果ISP發(fā)生中斷、某個(gè)國家屏蔽了某些內(nèi)容,或者,如果內(nèi)容只是被刪除了或移走了,都會(huì)發(fā)生這樣的事情。在HTTP web上到處都有這些類型的斷連。

HTTP基于位置的尋址模型鼓勵(lì)集中化。這便于信任少數(shù)擁有我們?nèi)繑?shù)據(jù)的應(yīng)用程序,但是,因?yàn)檫@個(gè)原因,在web上的大量數(shù)據(jù)被浪費(fèi)了。這也使得這些供應(yīng)商對(duì)我們的信息負(fù)有巨大的責(zé)任以及擁有巨大的權(quán)力(比如臉書)。

HTTP非常適合加載網(wǎng)站,但是,它不是設(shè)計(jì)用來傳輸大量的數(shù)據(jù)(像音頻和視頻文件)。這些缺陷可能使得像Napster(音樂共享軟件)和BitTorrent(電影及幾乎任何東西的共享軟件)這些文件共享系統(tǒng)的替代品出現(xiàn)并成功成為主流。

時(shí)間快進(jìn)到2018年,按需高清視頻流和大數(shù)據(jù)正變得無處不在;我們繼續(xù)生產(chǎn)/消費(fèi)越來越多的數(shù)據(jù),同時(shí)開發(fā)越來越強(qiáng)大的計(jì)算機(jī)來處理它們。云計(jì)算中的重大進(jìn)步有助于維持這種轉(zhuǎn)變,但是,用于分發(fā)所有這些數(shù)據(jù)的基礎(chǔ)設(shè)施基本沒有變化。

4.解決方案

IPFS最初是由Juan Benet努力構(gòu)建的系統(tǒng),該系統(tǒng)可以快速移動(dòng)版本化科學(xué)數(shù)據(jù)。它是經(jīng)過互聯(lián)網(wǎng)技術(shù)(DHTs、Git版本系統(tǒng)和Bittorrent)綜合測試的綜合體。它創(chuàng)造了允許交換IPFS對(duì)象的P2P Swarm。所有的IPFS對(duì)象形成了加密身份認(rèn)證的數(shù)據(jù)結(jié)構(gòu)(Merkle DAG),同時(shí),該數(shù)據(jù)結(jié)構(gòu)能夠用于構(gòu)建很多其他數(shù)據(jù)結(jié)構(gòu)?;蛘?,換句話說,就是:

“IPFS是個(gè)分布式文件系統(tǒng),它旨在用同一個(gè)文件系統(tǒng)來連接所有的計(jì)算設(shè)備。在某些方面,這和Web最初的目標(biāo)類似,但是,IPFS事實(shí)上更類似于一個(gè)交換Git對(duì)象的Bittorrent Swarm。IPFS能夠成為互聯(lián)網(wǎng)新的重要子系統(tǒng)。如果構(gòu)建正確,它能夠補(bǔ)充或取代HTTP。它能夠補(bǔ)充或取代更多東西。這聽起來很瘋狂。沒錯(cuò),它的確很瘋狂。”【1】

IPFS本質(zhì)上是版本化的文件系統(tǒng),能夠接收文件并管理它們,也可以把它們存儲(chǔ)在某個(gè)地方,然后隨著時(shí)間的推移,跟蹤它們的版本。IPFS也記錄了這些文件在網(wǎng)絡(luò)中的移動(dòng)方式,因此,它也是個(gè)分布式文件系統(tǒng)。

IPFS有管理數(shù)據(jù)和內(nèi)容在網(wǎng)絡(luò)上移動(dòng)方式的規(guī)則,本質(zhì)上和Bittorrent類似。該文件系統(tǒng)層提供了非常有趣的屬性,如:

網(wǎng)站是完全分布式的。網(wǎng)站沒有源服務(wù)器。網(wǎng)站可以完全在客戶端的瀏覽器上運(yùn)行。網(wǎng)站不必和任何服務(wù)器有聯(lián)系。

我們來看看這些不同的技術(shù)突破是如何協(xié)同工作的。

5.分布式哈希表(Distributed Hash Tables)

哈希表是一種數(shù)據(jù)結(jié)構(gòu),它以鍵/值對(duì)來存儲(chǔ)信息。在分布式哈希表(distributed hash tables,簡稱DHT)中,數(shù)據(jù)分布在計(jì)算機(jī)網(wǎng)絡(luò)中,以便有效地協(xié)調(diào)以實(shí)現(xiàn)節(jié)點(diǎn)之間的有效訪問和查找。

DHT的主要優(yōu)點(diǎn)在于去中心化、容錯(cuò)和可擴(kuò)展性。節(jié)點(diǎn)無需中心協(xié)調(diào),系統(tǒng)能夠可靠地運(yùn)作,即使節(jié)點(diǎn)發(fā)生故障或下線,并且,DHT能夠擴(kuò)展以容納數(shù)百萬個(gè)節(jié)點(diǎn)。基于這些特性,使得Swarm比客戶端-服務(wù)器結(jié)構(gòu)更具有彈性。

6.區(qū)塊交換(Block Exchanges)

流行的文件共享系統(tǒng)Bittorrent能夠成功地協(xié)調(diào)數(shù)百萬節(jié)點(diǎn)之間的數(shù)據(jù)傳輸,這是通過依靠創(chuàng)新的數(shù)據(jù)交換協(xié)議完成的,但是,這只限于種子生態(tài)系統(tǒng)。IPFS實(shí)現(xiàn)了該協(xié)議的通用版本,稱為BitSwap,作為任意類型的數(shù)據(jù)市場來運(yùn)營。該市場是Filecoin的基礎(chǔ),F(xiàn)ilecoin是構(gòu)建于IPFS之上的p2p存儲(chǔ)市場。

7.Merkle DAG

Merkle DAG是Merkle樹和有向無環(huán)圖(Directed Acyclic Graph,簡稱DAG)的混合體。Merkle樹確保在p2p網(wǎng)絡(luò)上交換的數(shù)據(jù)塊是正確的、沒有受到損害的和未被修改的。這個(gè)驗(yàn)證是利用加密哈希函數(shù)數(shù)據(jù)塊來完成的。這只是一個(gè)函數(shù),接收輸入,計(jì)算出與輸入相應(yīng)的一個(gè)獨(dú)一無二的字母數(shù)字字符串(哈希)。對(duì)于給定的哈希值,容易檢查輸入是否能得出同樣的值,但是,難以從哈希值推算出輸入。

單獨(dú)的數(shù)據(jù)塊被稱為“葉節(jié)點(diǎn)”,它們被哈希后,形成“非葉節(jié)點(diǎn)”。這些非葉節(jié)點(diǎn)然后能夠組合在一起進(jìn)行哈希,直到所有的數(shù)據(jù)塊可以用單獨(dú)一個(gè)根哈希值表示。這是更簡單的概念化方法:

Tree vs Merkle Tree

DAG是一種無周期拓?fù)湫蛄行畔⒔5姆椒?。DAG的一個(gè)簡單例子就是家族樹。Merkle DAG基本上是個(gè)數(shù)據(jù)結(jié)構(gòu),其中哈希被用來在DAG中引用數(shù)據(jù)塊和對(duì)象。這創(chuàng)造了一些有用的功能:IPFS上的所有內(nèi)容能夠被唯一地標(biāo)識(shí),因?yàn)槊總€(gè)數(shù)據(jù)塊有獨(dú)一無二的哈希值。此外,數(shù)據(jù)是防篡改的,因?yàn)閿?shù)據(jù)的更改會(huì)改變哈希值,如下圖所示:

Un-tamperable nature of Merkle tree

IPFS的核心原則是對(duì)生成的Merkle DAG上的所有數(shù)據(jù)建模。這種安全功能的重要性簡直難以用言語來形容。打個(gè)比方吧,該原則可以保護(hù)價(jià)值數(shù)萬億美元的資產(chǎn),可見該想法有多么強(qiáng)大了吧。

8.版本控制系統(tǒng)

Merkle DAG結(jié)構(gòu)的另一個(gè)強(qiáng)大的功能是,它允許構(gòu)建分布式版本控制系統(tǒng)(version control system,簡稱VCS)。其典型的一個(gè)例子是GitHub,它允許開發(fā)人員輕松地同時(shí)協(xié)作項(xiàng)目。GitHub上的文件利用Merkle DAG存儲(chǔ)和版本化。它允許用戶獨(dú)立復(fù)制和編輯一個(gè)文件的多個(gè)版本,并進(jìn)行存儲(chǔ),稍后可以把編輯過的版本和原始文件合并。

IPFS對(duì)數(shù)據(jù)對(duì)象使用類似的模型:只要對(duì)應(yīng)于原始數(shù)據(jù)的對(duì)象和任何新版本都可以訪問時(shí),就可以檢索整個(gè)文件歷史。鑒于數(shù)據(jù)塊通過網(wǎng)絡(luò)進(jìn)行本地存儲(chǔ),并可以無限期緩存,這意味著,IPFS對(duì)象能永久存儲(chǔ)。

此外,IPFS不依賴于對(duì)互聯(lián)網(wǎng)協(xié)議的訪問。數(shù)據(jù)可以分布在覆蓋網(wǎng)絡(luò)中,覆蓋網(wǎng)絡(luò)只是構(gòu)建在另一個(gè)網(wǎng)絡(luò)上的網(wǎng)絡(luò)。這些功能值得注意,因?yàn)樗鼈兪强箤彶榫W(wǎng)絡(luò)的核心要素。它可以成為促進(jìn)自由言論以對(duì)抗全球互聯(lián)網(wǎng)審查普及制度的工具,但是,我們也應(yīng)該認(rèn)識(shí)到不良行為者濫用言論的可能性。

9.自證明的文件系統(tǒng)

我們將要介紹的IPFS的最后一個(gè)重要組成部分是自證明文件系統(tǒng)(Self-certifying File System,簡稱SFS)。它是分布式文件系統(tǒng),無需請求特殊權(quán)限進(jìn)行數(shù)據(jù)交換。它是“自證明”的,因?yàn)樘峁┙o客戶端的數(shù)據(jù)是通過文件名來進(jìn)行身份驗(yàn)證的。結(jié)果就是能夠利用本地存儲(chǔ)的透明度安全地訪問遠(yuǎn)程內(nèi)容。

IPFS以此概念為基礎(chǔ),創(chuàng)建了星際命名空間(InterPlanetary Name Space,簡稱IPNS)。它是個(gè)SFS,使用公鑰加密以自證明通過網(wǎng)絡(luò)用戶發(fā)布的對(duì)象。我們之前提到,IPFS上的所有對(duì)象可以唯一標(biāo)識(shí),但是,這也擴(kuò)展到節(jié)點(diǎn)。網(wǎng)絡(luò)上的每個(gè)節(jié)點(diǎn)有一套公鑰、私鑰和節(jié)點(diǎn)ID,節(jié)點(diǎn)ID是其公鑰的哈希值。因此,節(jié)點(diǎn)可以使用它們的私鑰來“簽署”它們發(fā)布的任何數(shù)據(jù)對(duì)象,并利用發(fā)件人的公鑰來驗(yàn)證該數(shù)據(jù)的真實(shí)性。

以下是對(duì)關(guān)鍵IPFS組成部分的快速回顧:

通過分布式哈希表,節(jié)點(diǎn)可以存儲(chǔ)和共享數(shù)據(jù),而無需中央?yún)f(xié)調(diào)IPNS允許交換的數(shù)據(jù)立即進(jìn)行預(yù)驗(yàn)證,并使用公鑰密碼進(jìn)行驗(yàn)證。Merkle DAG可實(shí)現(xiàn)唯一標(biāo)識(shí)、防篡改和永久存儲(chǔ)的數(shù)據(jù)

可以通過ConsenSys寫的文章來查看網(wǎng)絡(luò)中文件是如何被分發(fā)的更多細(xì)節(jié)(深入了解一下)。另外,還可以查看一下IPFS的白皮書。

注意事項(xiàng):

始終對(duì)敏感內(nèi)容進(jìn)行加密!對(duì)加密的內(nèi)容,上傳的數(shù)據(jù)是“受保護(hù)的”,也即,只有知道對(duì)根哈希值(文件的根哈希值和加密密鑰)引用的人才能訪問內(nèi)容。IPFS是持久性數(shù)據(jù)結(jié)構(gòu),因此,IPFS中沒有刪除或移除操作的概念。這是因?yàn)閮?nèi)容被傳播到受激勵(lì)而服務(wù)于它的節(jié)點(diǎn)。無法保證上傳的數(shù)據(jù)在網(wǎng)絡(luò)上持久地存在。所有參與節(jié)點(diǎn)應(yīng)該被視為沒有正式義務(wù)的志愿服務(wù),并且可以按照它們的意愿刪除內(nèi)容。因此,直到任何激勵(lì)系統(tǒng)(Filecoin)正常運(yùn)行之前,用戶不應(yīng)該在任何情況下,把IPFS視為安全存儲(chǔ)。

THEEND

最新評(píng)論(評(píng)論僅代表用戶觀點(diǎn))

更多
暫無評(píng)論