IPFS——內(nèi)容尋址、版本化的P2P文件系統(tǒng)(未完成)
聲明
這篇文章是來(lái)自于IPFS官網(wǎng):https://docs.ipfs.tech/concepts/further-reading/academic-papers/,
本文的內(nèi)容為本人翻譯原創(chuàng),如有侵權(quán),請(qǐng)聯(lián)系本人進(jìn)行刪除。本文末尾的心得感悟?yàn)楸救嗽瓌?chuàng)。
摘要
星際文件系統(tǒng)(IPFS)是一個(gè)點(diǎn)對(duì)點(diǎn)的分布式文件系統(tǒng),它試圖將所有計(jì)算設(shè)備與相同的文件系統(tǒng)連接起來(lái)。在某些方面,IPFS類似于Web,但I(xiàn)PFS可以被視為單個(gè)BitTorrent群,在一個(gè)Git倉(cāng)庫(kù)中交換對(duì)象。換句話說(shuō),IPFS提供了一個(gè)高吞吐量的內(nèi)容尋址塊存儲(chǔ)模型,具有內(nèi)容尋址超鏈接。這形成了一個(gè)通用的Merkle DAG,一個(gè)可以在其上構(gòu)建版本化文件系統(tǒng)、區(qū)塊鏈甚至永久Web的數(shù)據(jù)結(jié)構(gòu)。IPFS結(jié)合了分布式哈希表、激勵(lì)式區(qū)塊交換和自認(rèn)證命名空間。IPFS沒(méi)有單點(diǎn)故障,節(jié)點(diǎn)之間不需要信任。
引言
構(gòu)建全局分布式文件系統(tǒng)的嘗試已有很多。一些系統(tǒng)取得了顯著的成功,而另一些則完全失敗。在眾多的學(xué)術(shù)嘗試中,AFS[6]獲得了廣泛的成功并沿用至今。其他人沒(méi)有取得同樣的成功。在學(xué)術(shù)界之外,最成功的系統(tǒng)是主要針對(duì)大型媒體(音頻和視頻)的點(diǎn)對(duì)點(diǎn)文件共享應(yīng)用程序。最值得注意的是,Napster、KaZaA和BitTorrent[2]部署了支持超過(guò)1億同時(shí)用戶的大型文件分發(fā)系統(tǒng)。即使在今天,BitTorrent仍然保持著大規(guī)模的部署,每天有數(shù)千萬(wàn)個(gè)節(jié)點(diǎn)在操作[16]。與學(xué)術(shù)上的文件系統(tǒng)相比,這些應(yīng)用程序有更多的用戶和文件分布。然而,這些應(yīng)用程序并沒(méi)有被設(shè)計(jì)成可以構(gòu)建的基礎(chǔ)設(shè)施。雖然有成功的重新用途1,但還沒(méi)有出現(xiàn)通用的文件系統(tǒng)來(lái)提供全局的、低延遲的和分散的分發(fā)。
也許這是因?yàn)閷?duì)于大多數(shù)用例來(lái)說(shuō)已經(jīng)存在一個(gè)“足夠好的”系統(tǒng):HTTP。到目前為止,HTTP是部署過(guò)的最成功的分布式文件系統(tǒng)。再加上瀏覽器,HTTP產(chǎn)生了巨大的技術(shù)和社會(huì)影響。它已經(jīng)成為在互聯(lián)網(wǎng)上傳輸文件的事實(shí)上的方式。然而,它沒(méi)有利用過(guò)去15年發(fā)明的幾十種杰出的文件分發(fā)技術(shù)。從一個(gè)角度來(lái)看,考慮到向后兼容約束的數(shù)量以及在當(dāng)前模型中投資的強(qiáng)大方的數(shù)量,演化Web基礎(chǔ)設(shè)施幾乎是不可能的。但從另一個(gè)角度來(lái)看,自HTTP出現(xiàn)以來(lái),新的協(xié)議不斷涌現(xiàn)并得到廣泛應(yīng)用。我們所缺乏的是升級(jí)設(shè)計(jì):增強(qiáng)當(dāng)前的HTTP web,并在不降低用戶體驗(yàn)的情況下引入新功能。
業(yè)界之所以使用HTTP這么長(zhǎng)時(shí)間,是因?yàn)橐苿?dòng)小文件相對(duì)便宜,即使對(duì)于流量很大的小型組織也是如此。但我們正在進(jìn)入一個(gè)數(shù)據(jù)分發(fā)的新時(shí)代,面臨著新的挑戰(zhàn):(a)托管和分發(fā)pb級(jí)的數(shù)據(jù)集,(b)跨組織的大數(shù)據(jù)計(jì)算,(c)高容量高清按需或?qū)崟r(shí)媒體流,(d)海量數(shù)據(jù)集的版本控制和鏈接,(e)防止重要文件的意外消失,等等。其中許多可以歸結(jié)為大量的數(shù)據(jù),在任何地方都可以訪問(wèn)。”迫于關(guān)鍵特性和帶寬問(wèn)題的壓力,我們已經(jīng)放棄了HTTP,轉(zhuǎn)而使用不同的數(shù)據(jù)分發(fā)協(xié)議。下一步是讓它們成為Web本身的一部分。
與高效的數(shù)據(jù)分發(fā)正交,版本控制系統(tǒng)已經(jīng)設(shè)法開(kāi)發(fā)了重要的數(shù)據(jù)協(xié)作工作流。分布式源代碼版本控制系統(tǒng)Git開(kāi)發(fā)了許多有用的方法來(lái)建模和實(shí)現(xiàn)分布式數(shù)據(jù)操作。Git工具鏈提供了大型文件分發(fā)系統(tǒng)嚴(yán)重缺乏的通用版本控制功能。受Git啟發(fā)的新解決方案正在出現(xiàn),例如Camlistore[?]、個(gè)人文件存儲(chǔ)系統(tǒng)和Dat[?]數(shù)據(jù)協(xié)作工具鏈和數(shù)據(jù)集包管理器。Git已經(jīng)影響了分布式文件系統(tǒng)設(shè)計(jì)[9],因?yàn)樗膬?nèi)容地址Merkle DAG數(shù)據(jù)模型使強(qiáng)大的文件分發(fā)策略成為可能。有待探索的是這種數(shù)據(jù)結(jié)構(gòu)如何影響面向高吞吐量的文件系統(tǒng)的設(shè)計(jì),以及它如何升級(jí)Web本身。
本文介紹了IPFS,一種新穎的對(duì)等版本控制文件系統(tǒng),試圖解決這些問(wèn)題。IPFS綜合了過(guò)去許多成功系統(tǒng)的經(jīng)驗(yàn)。仔細(xì)的以接口為中心的集成產(chǎn)生的系統(tǒng)比各個(gè)部分的總和更大。IPFS的核心原則是將所有數(shù)據(jù)建模為同一個(gè)Merkle DAG的一部分。
背景
本節(jié)回顧成功的對(duì)等系統(tǒng)的重要特性,IPFS結(jié)合了對(duì)等系統(tǒng)。分布式哈希表
分布式哈希表(Distributed Hash table, DHT)被廣泛用于對(duì)等系統(tǒng)的元數(shù)據(jù)協(xié)調(diào)和維護(hù)。例如,BitTorrent MainlineDHT跟蹤torrent swarm的部分節(jié)點(diǎn)集合。Kademlia DHT
Kademlia[10]是一種流行的DHT,它提供:- 大規(guī)模網(wǎng)絡(luò)中的高效查找:平均連接log2(n)個(gè)節(jié)點(diǎn)上的查詢。(例如,有1000萬(wàn)個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)需要20跳)。
- 低協(xié)調(diào)開(kāi)銷:優(yōu)化發(fā)送給其他節(jié)點(diǎn)的控制消息數(shù)量。
- 通過(guò)選擇生存時(shí)間長(zhǎng)的節(jié)點(diǎn)來(lái)抵抗各種攻擊。
- 廣泛應(yīng)用于p2p應(yīng)用中,包括Gnutella和BitTorrent,形成了超過(guò)2000萬(wàn)個(gè)節(jié)點(diǎn)的[16]網(wǎng)絡(luò)。
Coral DSHT
雖然有些對(duì)等文件系統(tǒng)直接將數(shù)據(jù)塊存儲(chǔ)在dht中,但這浪費(fèi)了存儲(chǔ)和帶寬,因?yàn)閿?shù)據(jù)必須存儲(chǔ)在不需要它的節(jié)點(diǎn)上。Coral DSHT以三個(gè)特別重要的方式擴(kuò)展了Kademlia: 1.? Kademlia將值存儲(chǔ)在節(jié)點(diǎn)中,節(jié)點(diǎn)的id離鍵值\最近”(使用異或距離)。這沒(méi)有考慮應(yīng)用程序數(shù)據(jù)的局部性,忽略可能已經(jīng)擁有數(shù)據(jù)的\遠(yuǎn)的節(jié)點(diǎn),并強(qiáng)制\最近的節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù),無(wú)論它們是否需要。這浪費(fèi)了大量的存儲(chǔ)空間和帶寬。相反,Coral將地址存儲(chǔ)給能夠提供數(shù)據(jù)塊的節(jié)點(diǎn)。
2.? Coral將DHT API從get_value(key)放寬為get_any_values(key) (DSHT中的\邋遢”)。這仍然有效,因?yàn)镃oral用戶只需要一個(gè)(工作的)節(jié)點(diǎn),而不是完整的列表。作為回報(bào),Coral只能將值的子集分配給\最近的“節(jié)點(diǎn)”,從而避免了熱點(diǎn)(當(dāng)一個(gè)鍵變得流行時(shí),所有最近的節(jié)點(diǎn)會(huì)超載)。
3.此外,Coral還根據(jù)區(qū)域和大小組織了一個(gè)獨(dú)立的dsht層次結(jié)構(gòu),稱為集群。這使得節(jié)點(diǎn)可以首先查詢其區(qū)域內(nèi)的節(jié)點(diǎn),找到附近的數(shù)據(jù)而無(wú)需查詢遠(yuǎn)處的節(jié)點(diǎn),從而大大減少了查找的延遲。
2.? Coral將DHT API從get_value(key)放寬為get_any_values(key) (DSHT中的\邋遢”)。這仍然有效,因?yàn)镃oral用戶只需要一個(gè)(工作的)節(jié)點(diǎn),而不是完整的列表。作為回報(bào),Coral只能將值的子集分配給\最近的“節(jié)點(diǎn)”,從而避免了熱點(diǎn)(當(dāng)一個(gè)鍵變得流行時(shí),所有最近的節(jié)點(diǎn)會(huì)超載)。
3.此外,Coral還根據(jù)區(qū)域和大小組織了一個(gè)獨(dú)立的dsht層次結(jié)構(gòu),稱為集群。這使得節(jié)點(diǎn)可以首先查詢其區(qū)域內(nèi)的節(jié)點(diǎn),找到附近的數(shù)據(jù)而無(wú)需查詢遠(yuǎn)處的節(jié)點(diǎn),從而大大減少了查找的延遲。