IPFS能否成為新一代互聯(lián)網(wǎng)協(xié)議?
本文將分析IPFS的特性,并在與其他分布式文件系統(tǒng)和超文本傳輸協(xié)議(HTTP)比較的基礎(chǔ)上,進(jìn)行并行研究。
引言
互聯(lián)網(wǎng)是由協(xié)議和物理設(shè)備連接起來的大量計(jì)算機(jī)器的集合。大多數(shù)互聯(lián)網(wǎng)內(nèi)的生態(tài)系統(tǒng)都基于客戶端-服務(wù)器(請(qǐng)求-響應(yīng))模型,但這種模型并非不可破壞,網(wǎng)絡(luò)時(shí)不時(shí)會(huì)出現(xiàn)故障。無論是否有控制中心,點(diǎn)對(duì)點(diǎn)(P2P)系統(tǒng)都可以高效分發(fā)海量數(shù)據(jù)。2014年,Juan Benet提出了整合現(xiàn)有的先進(jìn)技術(shù)(分布式哈希表(DHT)、BitTorrent-like協(xié)議、基于Git的數(shù)據(jù)模型等)創(chuàng)建一個(gè)新的協(xié)議/文件系統(tǒng),使每個(gè)人都具有共享數(shù)據(jù)的平等權(quán)利,符合互聯(lián)網(wǎng)的早期思想。IPFS具有高效的數(shù)據(jù)存儲(chǔ)與分發(fā)、數(shù)據(jù)保持、面向離線模式和非集中式管理的特性。
IPFS理論介紹
IPFS是一個(gè)純粹的點(diǎn)對(duì)點(diǎn)分布式文件系統(tǒng),這種系統(tǒng)側(cè)重于從主要體系結(jié)構(gòu)中刪除中心點(diǎn),并在網(wǎng)絡(luò)中為相互連接的節(jié)點(diǎn)提供相同的功能。所有共享的數(shù)據(jù)和計(jì)算資源都存儲(chǔ)在網(wǎng)絡(luò)的邊緣,節(jié)點(diǎn)能夠自動(dòng)運(yùn)行,并與它們的對(duì)等節(jié)點(diǎn)共享所需數(shù)據(jù)。它們能夠自主通信、分發(fā)數(shù)據(jù)、本地化其他節(jié)點(diǎn)和所需的文件,并使用同一組協(xié)議。
IPFS源于Juan Benet的分布式、去中心化、共享互聯(lián)網(wǎng)的理念,自2014年出現(xiàn)以來,目前仍處于開發(fā)階段。現(xiàn)在已有一些可用的實(shí)現(xiàn)(如Go和JavaScript),以及一套使用各種編程語言實(shí)現(xiàn)的工具、庫和API(應(yīng)用程序編程接口)。IPFS的一些主要特點(diǎn)有:數(shù)據(jù)持久性、點(diǎn)對(duì)點(diǎn)基本原理、完全去中心化、無中心點(diǎn)故障、在無互聯(lián)網(wǎng)上行鏈路情況下具有本地連接。
- HTTP在日?;A(chǔ)使用中效率低下且昂貴;IPFS使以一種有效的方式使分發(fā)大量數(shù)據(jù)成為可能;
- 儲(chǔ)存在互聯(lián)網(wǎng)上的舊內(nèi)容通常會(huì)和舊版本的文件一起被刪除;IPFS有一種類似于Git的數(shù)據(jù)版本控制方法;
- 互聯(lián)網(wǎng)用戶依賴于管理其功能的集中設(shè)備,當(dāng)沒有連接到互聯(lián)網(wǎng)骨干網(wǎng)時(shí),他們無法與這些設(shè)備通信,也無法訪問他們的個(gè)人數(shù)據(jù);IPFS是各種彈性網(wǎng)絡(luò)的引擎,無論是否有全球上行鏈路,這些網(wǎng)絡(luò)都試圖將盡可能提高其分散性。
Juan Benet發(fā)布的官方白皮書代表了他對(duì)協(xié)議架構(gòu)和模塊的觀點(diǎn)??偟膩碚f,IPFS的靈感來源于一些被塑造成單一、模塊化協(xié)議的技術(shù),IPFS利用了這些想法和經(jīng)驗(yàn)。我們將簡(jiǎn)要介紹這些技術(shù),以更好的理解IPFS。
從IPFS堆棧的最底層開始,網(wǎng)絡(luò)層可以進(jìn)行數(shù)據(jù)儲(chǔ)存、信息交換及交換控制信息。傳輸本身可使用各種協(xié)議(如TCP、UTP、WebSocket、WebRTC等)以一種安全可靠的方式實(shí)現(xiàn),而IPFS本身不綁定到某個(gè)特定的協(xié)議上。
向上進(jìn)入到路由層,分布式哈希表(DHT)用于存儲(chǔ)和管理系統(tǒng)內(nèi)部的元數(shù)據(jù)。這些信息包含在給定的時(shí)間點(diǎn)上相互連接的節(jié)點(diǎn)的信息,并提供快速有效地查找數(shù)據(jù)的機(jī)制。Kademlia在路由層十分重要,它提供了在大型網(wǎng)絡(luò)中查找元數(shù)據(jù)的有效方法、低協(xié)調(diào)成本,Coral DSHT通過查詢最近的能夠存儲(chǔ)數(shù)據(jù)的節(jié)點(diǎn)來實(shí)現(xiàn)擴(kuò)展,并提高數(shù)據(jù)被存儲(chǔ)在更遠(yuǎn)位置的節(jié)點(diǎn)上的可能性。S/Kademlia通過強(qiáng)制節(jié)點(diǎn)創(chuàng)建用于生成身份和簽名消息的PKI(公鑰基礎(chǔ)設(shè)施)密鑰對(duì),進(jìn)一步增強(qiáng)了針對(duì)惡意攻擊的安全性。對(duì)于本地定位的節(jié)點(diǎn),使用組播DNS(域名系統(tǒng))實(shí)現(xiàn)相互搜索。
交換層用于確保節(jié)點(diǎn)之間的塊傳輸。
進(jìn)一步到達(dá)堆棧上層,默克爾有向無環(huán)圖(Merkle DAG)是協(xié)議的主要數(shù)據(jù)模型,很大程度上是受到Git數(shù)據(jù)結(jié)構(gòu)的啟發(fā)。數(shù)據(jù)樹的節(jié)點(diǎn)是通過其內(nèi)容加密尋址的對(duì)象,而它們之間的鏈接由對(duì)其他對(duì)象的哈希引用表示。每個(gè)數(shù)據(jù)都是由其不可變哈希引用唯一標(biāo)識(shí)的(因此只存儲(chǔ)一次,重復(fù)數(shù)據(jù)刪除),系統(tǒng)能夠使用校驗(yàn)和檢測(cè)損壞的數(shù)據(jù)。
堆棧的最后一層是命名層。每個(gè)節(jié)點(diǎn)的唯一標(biāo)識(shí)符是使用PKI密鑰對(duì)以加密的方式在本地生成的。星際命名系統(tǒng)(IPNS)是一種用于識(shí)別可修改對(duì)象的策略。數(shù)據(jù)塊具有不可變的哈希引用,因此一旦它們的內(nèi)容改變,哈希引用就會(huì)改變。IPNS概念使用自認(rèn)證文件系統(tǒng)方案,因此節(jié)點(diǎn)能夠在自己唯一的節(jié)點(diǎn)標(biāo)識(shí)符上發(fā)布數(shù)據(jù)。如果數(shù)據(jù)本身改變,哈希引用也會(huì)改變,但節(jié)點(diǎn)可能會(huì)將新的引用重新發(fā)布到相同的唯一節(jié)點(diǎn)標(biāo)識(shí)符。IPNS還支持DNS來提供人類可讀的地址。
處于最上層的是應(yīng)用層,在這里,開發(fā)人員能夠使用堆棧的底層功能設(shè)計(jì)和實(shí)現(xiàn)新的分布式、去中心化技術(shù)。
IPFS vs. 其他DFS
這一部分將討論各種DFS(分布式文件系統(tǒng))和HTTP(超文本傳輸協(xié)議)的各方面特性。
NFS(Network File System,網(wǎng)絡(luò)文件系統(tǒng))是SUN公司在1984年開發(fā)的基于RPC(遠(yuǎn)程過程調(diào)用)協(xié)議的開放協(xié)議,其基于UDP/IP協(xié)議的應(yīng)用,主要特性是具有一個(gè)控制中心,NFS 允許在多個(gè)用戶之間共享公共文件系統(tǒng),并提供數(shù)據(jù)集中的優(yōu)勢(shì),來最小化所需的存儲(chǔ)空間。
將早期的NFS與IPFS進(jìn)行比較,我們可以看出,NFS使用服務(wù)器和冪等的、無狀態(tài)的行為在系統(tǒng)中進(jìn)行數(shù)據(jù)同步,而IPFS架構(gòu)可以不依賴于服務(wù)器,因?yàn)槠涔R蒙傻臄?shù)據(jù)可以在其協(xié)議用戶間共享。IPFS在節(jié)點(diǎn)自動(dòng)狀態(tài)下以同步/異步方式處理寫操作,其用戶只要獲得數(shù)據(jù)標(biāo)識(shí)符,就可以通過元數(shù)據(jù)交換和搜索在網(wǎng)絡(luò)中共享數(shù)據(jù)。
AFS(Andrew File System,安德魯文件系統(tǒng))是由Carnegie Mellon大學(xué)在20世紀(jì)80年代和IBM公司聯(lián)合設(shè)計(jì)的一個(gè)分布式文件系統(tǒng),它的主要功能是用于管理分布在網(wǎng)絡(luò)不同節(jié)點(diǎn)上的文件,其使用一組受信任的服務(wù)器為客戶端提供同類的、地址透明的文件名稱空間,主要目標(biāo)是實(shí)現(xiàn)可擴(kuò)展性,尤其關(guān)注客戶端和服務(wù)器之間協(xié)議的設(shè)計(jì)。文件在本地磁盤上整體進(jìn)行儲(chǔ)存和緩存,客戶端想要訪問一個(gè)文件時(shí),將從服務(wù)器獲取文件,在本地緩存,然后服務(wù)器設(shè)置回調(diào)(用于之后通知客戶端文件被修改)。IPFS機(jī)制同樣可以用于實(shí)現(xiàn)類似的回調(diào)和緩存系統(tǒng),同時(shí)保持不集中(單點(diǎn)故障)的優(yōu)勢(shì)。
GFS(Google File System,谷歌文件系統(tǒng))是谷歌為了存儲(chǔ)海量搜索數(shù)據(jù)而設(shè)計(jì)的專用分布式文件系統(tǒng),專注于可擴(kuò)展性、基礎(chǔ)性能和低價(jià)硬件。谷歌希望提供一種附加而不是重寫的數(shù)據(jù)分發(fā)方法,從而構(gòu)建一個(gè)可自我持續(xù)的文件系統(tǒng):具有監(jiān)督恢復(fù)、使用主塊架構(gòu)存儲(chǔ)跨多個(gè)服務(wù)器備份的大量數(shù)據(jù)的可能性。GFS的設(shè)計(jì)與IPFS有一些相似之處,它使用多個(gè)塊服務(wù)器、數(shù)據(jù)塊和替換機(jī)器來應(yīng)對(duì)崩潰情況。與IPFS相比,GFS的信息仍然在中心區(qū)域管理,由主服務(wù)器協(xié)調(diào),而IPFS的數(shù)據(jù)基本上是存儲(chǔ)在網(wǎng)絡(luò)中。
HTTP(超文本傳輸協(xié)議)是全球范圍內(nèi)用于Web上下文中數(shù)據(jù)交換的最流行的協(xié)議之一。它遵循經(jīng)典的客戶端-服務(wù)器模型架構(gòu),服務(wù)器通常位于互聯(lián)網(wǎng)之外,而客戶端則是瀏覽器。整個(gè)機(jī)制依賴于客戶端和服務(wù)器之間的請(qǐng)求(數(shù)據(jù))-響應(yīng)(數(shù)據(jù)/狀態(tài))交互。其特點(diǎn)是簡(jiǎn)單、可擴(kuò)展、無狀態(tài),具有控制中心。HTTP目前仍運(yùn)行良好,但問題逐漸出現(xiàn):如果資源被刪除、損壞或被其提供者關(guān)閉,該怎么處理?
上述文件系統(tǒng)/協(xié)議中使用的所有技術(shù)都帶來了保證數(shù)據(jù)分布的創(chuàng)新機(jī)制:AFS的回調(diào)、NFS的冪等性和崩潰時(shí)的簡(jiǎn)單重試、GFS的可擴(kuò)展性和低價(jià)硬件設(shè)計(jì)、HTTP的簡(jiǎn)單性和長(zhǎng)壽命,但它們都依賴于同一個(gè)控制中心。
總結(jié)
如今的實(shí)際應(yīng)用中,大多數(shù)技術(shù)都是基于經(jīng)典的客戶端-服務(wù)器模型。此模型自互聯(lián)網(wǎng)誕生以來,目前仍能基本滿足客戶的需求。開發(fā)人員和工程師需要著重關(guān)注的是優(yōu)化應(yīng)用程序以最小化計(jì)算時(shí)間和響應(yīng)速度,并全面改善我們目前的互聯(lián)網(wǎng)系統(tǒng)。IPFS試圖通過改變數(shù)據(jù)分布、存儲(chǔ)和管理的整個(gè)視角,同時(shí)保持對(duì)可能使用的其他協(xié)議的開放接口,來解決互聯(lián)網(wǎng)的問題。盡管目前IPFS還有很大的改進(jìn)空間,但其能否成為新一代互聯(lián)網(wǎng)協(xié)議也猶未可知。