詳解IPFS的本質(zhì)、技術(shù)架構(gòu)以及應(yīng)用

本文為轉(zhuǎn)載,是IPFS應(yīng)用實(shí)踐者戴嘉樂的分享內(nèi)容 。戴嘉樂是前百度高級(jí)研發(fā)工程師,ipfser.org&巴比特專欄作者。戴嘉樂去年8月參與了FileCoin的眾籌,從而了解到IPFS技術(shù),獨(dú)立開發(fā)了兩款基于IPFS的開源應(yīng)用,一個(gè)是與IPFS有關(guān)的wiki系統(tǒng),另一個(gè)是IPFS相關(guān)的地理位置檢索系統(tǒng)。

IPFS是什么?

IPFS的中文名是星際文件系統(tǒng),由Juan Benet在2014年5月份發(fā)起。Juan Benet的個(gè)人經(jīng)歷很傳奇,他畢業(yè)于斯坦福大學(xué),在創(chuàng)建IPFS項(xiàng)目之前,他創(chuàng)辦的第一家公司被雅虎收購(gòu)。2015年,他創(chuàng)建的IPFS在YCombinator孵化競(jìng)賽中拿到了巨額的投資,同時(shí)成立了協(xié)議實(shí)驗(yàn)室。這個(gè)實(shí)驗(yàn)室團(tuán)隊(duì)由14位核心開發(fā)者以及社區(qū)中上百位代碼貢獻(xiàn)者組成的。

IPFS本質(zhì)上是一種內(nèi)容可尋址、版本化、點(diǎn)對(duì)點(diǎn)超媒體的分布式存儲(chǔ)、傳輸協(xié)議,目標(biāo)是補(bǔ)充甚至取代過去20年里使用的超文本媒體傳輸協(xié)議(HTTP),希望構(gòu)建更快、更安全、更自由的互聯(lián)網(wǎng)時(shí)代。

我們每天上網(wǎng)使用APP刷朋友圈、微博都在使用HTTP協(xié)議,它基于TCP/IP的計(jì)算機(jī)應(yīng)用層面,從服務(wù)器傳輸超文本數(shù)據(jù)到本地瀏覽器,本地瀏覽器或APP渲染后呈現(xiàn)給用戶?;谶@樣的網(wǎng)絡(luò)環(huán)境構(gòu)成了CS或BS架構(gòu),最后注入BAT這樣大型網(wǎng)絡(luò)提供商。

互聯(lián)網(wǎng)平臺(tái)所提供的網(wǎng)絡(luò)服務(wù)大致經(jīng)過了三種模式的迭代歷程:

第一個(gè)模式屬于集中化,例如早期的12306因?yàn)闆]法分散去做,只有一個(gè)中心服務(wù)群,所有買票的流量直接搭載在這個(gè)服務(wù)群上,承載的壓力非常大。

第二個(gè)模式屬于分散集群,類似于O2O百團(tuán)大戰(zhàn)時(shí)各個(gè)網(wǎng)站需要建立不同區(qū)域下的服務(wù)群,它們背后的IDC機(jī)房,會(huì)讓同樣的服務(wù)在一個(gè)局域內(nèi)分散,這就減輕了中心服務(wù)器的壓力。

前兩種模式容易產(chǎn)生一些弊端:在第一種模式里,服務(wù)高度依賴中心網(wǎng)絡(luò)。大公司或者創(chuàng)業(yè)公司無(wú)法承受宕機(jī),運(yùn)維有一個(gè)KPI指數(shù)叫SLA,穩(wěn)定性沒有到99.9%的話,基本不合格。SLA需要消耗特別大的成本,大公司需要雇一批運(yùn)維專家或?qū)I(yè)人士,去保障系統(tǒng)的穩(wěn)定性。在第二種模式里,存儲(chǔ)數(shù)據(jù)有丟失的風(fēng)險(xiǎn)。大家經(jīng)常開玩笑的電纜被挖斷,員工刪庫(kù)跑路,都是隱患。

同時(shí),這兩種模式的帶寬成本相對(duì)高很多,會(huì)造成一定帶寬資源的浪費(fèi)。比如《中國(guó)有嘻哈》第一期海選的視頻播放量有10億次,假設(shè)視頻文件大小是1GB,播放整個(gè)視頻需要消耗1000PB的帶寬量。如果按照0.001美元1GB帶寬成本,愛奇藝光一期節(jié)目需要支付一百萬(wàn)美金給ISP(互聯(lián)網(wǎng)服務(wù)提供商)。

IPFS有希望成為第三種模式。IPFS想打造一個(gè)點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)拓?fù)?,相?dāng)于顛覆HTTP所代表的分布關(guān)系,它具有內(nèi)容可尋址的特點(diǎn),通過文件內(nèi)容生成唯一的哈希標(biāo)識(shí),一定程度上節(jié)約了空間開銷的成本。

HTTP協(xié)議使用的域名尋址,最終會(huì)映射到最底層,找到某個(gè)域名所對(duì)應(yīng)的IP地址下的某個(gè)主機(jī),以及某個(gè)文件目錄的某個(gè)文件。它不關(guān)心是否存在相同的文件,但內(nèi)容尋址會(huì)通過唯一的標(biāo)識(shí)去訪問,并且提前檢驗(yàn)這個(gè)標(biāo)識(shí)是否已經(jīng)被存儲(chǔ)過。如果被存儲(chǔ)過,直接從其它節(jié)點(diǎn)讀取它,不需要重復(fù)存儲(chǔ),一定意義上節(jié)約了空間。

舉個(gè)具體場(chǎng)景的例子。假設(shè)我想要看《環(huán)太平洋》這部電影,小明之前下載過這部電影,他啟動(dòng)了IPFS節(jié)點(diǎn),將這個(gè)視頻文件加入了IPFS網(wǎng)絡(luò)。他會(huì)得到一個(gè)哈希指紋b,同時(shí)發(fā)布到公共網(wǎng)關(guān),得到了一個(gè)/IPFS/b的路徑名。

他把哈希指紋和路徑名都告訴我,我要做的事情是啟動(dòng)一個(gè)本地節(jié)點(diǎn),對(duì)該網(wǎng)關(guān)發(fā)一個(gè)尋址PIN的請(qǐng)求,IPFS自動(dòng)索引分布式哈希表的哈希值,找到指紋b所對(duì)應(yīng)的節(jié)點(diǎn)列表。

大的視頻通常不會(huì)都存在一個(gè)節(jié)點(diǎn),可能分片存在其它一些子節(jié)點(diǎn)上,IPFS把這些節(jié)點(diǎn)列表全部并行抓取,最后由本地的manager拼成完整的文件。并行的速度遠(yuǎn)遠(yuǎn)大于直接下載完整文件的速度,我很快就能在本地化的瀏覽器上看到電影,還可以繼續(xù)分享給其他人。

IPFS的架構(gòu)

IPFS至少有八層子協(xié)議棧,從上至下為身份、網(wǎng)絡(luò)、路由、交換、對(duì)象、文件、命名、應(yīng)用,每個(gè)協(xié)議棧各司其職,又互相搭配。

24521266-61AF-4B2A-81BE-9A20382F9ED1.jpg

身份層和路由層可以一起解釋。對(duì)等節(jié)點(diǎn)身份信息的生成以及路由規(guī)則是通過Kademlia協(xié)議生成制定,KAD協(xié)議實(shí)質(zhì)是構(gòu)建了一個(gè)分布式松散Hash表,簡(jiǎn)稱DHT,每個(gè)加入這個(gè)DHT網(wǎng)絡(luò)的人都要生成自己的身份信息,然后才能通過這個(gè)身份信息去負(fù)責(zé)存儲(chǔ)這個(gè)網(wǎng)絡(luò)里的資源信息和其他成員的聯(lián)系信息。如同微信名片分享,在無(wú)法通過直接搜索微信號(hào)的情況下,如果你要找一個(gè)人,可以通過有這個(gè)人聯(lián)系方式的朋友分享名片來建立聯(lián)系。

網(wǎng)絡(luò)層比較核心,使用的LibP2P可以支持任意傳輸層協(xié)議。NAT技術(shù)能讓內(nèi)網(wǎng)中的設(shè)備共用同一個(gè)外網(wǎng)IP,我們都體驗(yàn)過的家庭路由器就是這個(gè)原理。

交換層,是類似迅雷這樣的BT工具。迅雷其實(shí)是模擬了P2P網(wǎng)絡(luò),并創(chuàng)建中心服務(wù)器,當(dāng)服務(wù)器登記用戶請(qǐng)求資源時(shí),讓請(qǐng)求同樣資源的用戶形成一個(gè)小集群swarm,在這里分享數(shù)據(jù)。這種方式有弊端,一位服務(wù)器是由迅雷統(tǒng)一維護(hù),如果出現(xiàn)了故障、宕機(jī)時(shí),下載操作無(wú)法進(jìn)行。

中心化服務(wù)還可以限制一些下載請(qǐng)求,人們發(fā)明了一種更聰明的方式就是Bittorrent,讓每一個(gè)種子節(jié)點(diǎn)所要存儲(chǔ)的數(shù)據(jù),通過哈希表存儲(chǔ)在里面,BT工具相對(duì)不太受監(jiān)管,服務(wù)更加穩(wěn)定。

IPFS團(tuán)隊(duì)把BitTorrent進(jìn)行了創(chuàng)新,叫作Bitswap,它增加了信用和帳單體系來激勵(lì)節(jié)點(diǎn)去分享,我推斷FileCoin有很大概率是基于Bitswap,用戶在Bitswap里增加數(shù)據(jù)會(huì)增加信用分,分享得越多信用分越高。如果用戶只去檢索數(shù)據(jù)而不存數(shù)據(jù),信用分會(huì)越來越低,其它節(jié)點(diǎn)會(huì)在嵌入連接時(shí)優(yōu)先選擇信用分高的。

這一設(shè)計(jì)可以解決女巫攻擊,信用分不可能靠機(jī)器刷去提高,一直刷檢索請(qǐng)求,信用分越刷越低。請(qǐng)求次數(shù)和存儲(chǔ)量的變量之間有一個(gè)比較精妙的算法,類似一個(gè)拋物線,前期可以容忍很多東西,達(dá)到一定次數(shù)后不再信任。

對(duì)象層和文件層適合結(jié)合來談,它們管理的是IPFS上80%的數(shù)據(jù)結(jié)構(gòu),大部分?jǐn)?shù)據(jù)對(duì)象都是以MerkleDag的結(jié)構(gòu)存在,這為內(nèi)容尋址和去重提供了便利。文件層是一個(gè)新的數(shù)據(jù)結(jié)構(gòu),和DAG并列,采用Git一樣的數(shù)據(jù)結(jié)構(gòu)來支持版本快照。

命名層具有自我驗(yàn)證的特性(當(dāng)其他用戶獲取該對(duì)象時(shí),使用指紋公鑰進(jìn)行驗(yàn)簽,即驗(yàn)證所用的公鑰是否與NodeId匹配,這驗(yàn)證了用戶發(fā)布對(duì)象的真實(shí)性,同時(shí)也獲取到了可變狀態(tài)),并且加入了IPNS這個(gè)巧妙的設(shè)計(jì)來使得加密后的DAG對(duì)象名可定義,增強(qiáng)可閱讀性。

最后是應(yīng)用層,IPFS核心價(jià)值就在于上面運(yùn)行的應(yīng)用程序,我們可以利用它類似CDN的功能,在成本很低的帶寬下,去獲得想要的數(shù)據(jù),從而提升整個(gè)應(yīng)用程序的效率。

新的技術(shù)取代老的技術(shù),無(wú)非就兩點(diǎn):第一,能提高系統(tǒng)效率;第二,能夠降低系統(tǒng)成本。IPFS把這兩點(diǎn)都做到了。

我整理了一個(gè)IPFS族譜關(guān)系圖,同時(shí)也是一個(gè)縱向數(shù)據(jù)流圖。剛才所說的八層協(xié)議,其實(shí)每一層的實(shí)現(xiàn)都綁定在對(duì)應(yīng)的模塊下,進(jìn)行了一個(gè)直觀的圖表設(shè)計(jì)。

B5245AFF-6F1F-4758-85E6-54C4FDDC16B3.jpg

IPFS的團(tuán)隊(duì)在開發(fā)時(shí),采用高度模塊集成化的方式,像搭積木一樣去開發(fā)整個(gè)項(xiàng)目。協(xié)議實(shí)驗(yàn)室團(tuán)隊(duì)2015年創(chuàng)立,到17年的時(shí)間里都在做IPLD、LibP2P、Multiformats這三個(gè)模塊的開發(fā),它們服務(wù)于IPFS底層。

Mutiformats是一系列hash加密算法和自描述方式(從值上就可以知道值是如何生成)的集合,它具有SHA1\SHA256 \SHA512\Blake3B等6種主流的加密方式,用以加密和描述nodeID以及指紋數(shù)據(jù)的生成。

LibP2P是IPFS核心中的核心,面對(duì)各式各樣的傳輸層協(xié)議以及復(fù)雜的網(wǎng)絡(luò)設(shè)備,它可以幫助開發(fā)者迅速建立一個(gè)可用P2P網(wǎng)絡(luò)層,快速且節(jié)約成本,這也是為什么IPFS技術(shù)被眾多區(qū)塊鏈項(xiàng)目青睞的緣由。

IPLD其實(shí)是一個(gè)轉(zhuǎn)換中間件,將現(xiàn)有的異構(gòu)數(shù)據(jù)結(jié)構(gòu)統(tǒng)一成一種格式,方便不同系統(tǒng)之間的數(shù)據(jù)交換和互操作。現(xiàn)在IPLD支持的數(shù)據(jù)結(jié)構(gòu),是比特幣、以太坊的區(qū)塊數(shù)據(jù),也支持IPFS和IPLD。這也是IPFS為什么受到區(qū)塊鏈系統(tǒng)歡迎的原因之二,它的IPLD中間件可以把不同的區(qū)塊結(jié)構(gòu)統(tǒng)一成一個(gè)標(biāo)準(zhǔn)進(jìn)行傳遞,為開發(fā)者提供了成功性比較高的標(biāo)準(zhǔn),不用擔(dān)心性能、穩(wěn)定和bug。

IPFS應(yīng)用了這幾個(gè)模塊的功能,集成為一種容器化的應(yīng)用程序,運(yùn)行在獨(dú)立節(jié)點(diǎn)上,以Web服務(wù)的形式,供大家使用訪問。

最后是Filecoin, 作為去年7月才宣布的項(xiàng)目,它的開發(fā)進(jìn)度至今保密。Filecoin把這些應(yīng)用的數(shù)據(jù)價(jià)值化,通過類似比特幣的激勵(lì)政策和經(jīng)濟(jì)模型,讓更多的人去創(chuàng)建節(jié)點(diǎn),去讓更多的人使用IPFS。

我更希望大家把IPFS和FileCoin分開來看,如果IPFS玩得好,可以創(chuàng)建很多FileCoin項(xiàng)目出來,它本身的價(jià)值和意義沒有IPFS這么大。

IPFS的應(yīng)用意義

第一,可以為內(nèi)容創(chuàng)作帶來一定的自由。Akasha是一個(gè)典型的應(yīng)用,它是一個(gè)基于以太坊和IPFS的社交博客創(chuàng)作平臺(tái),用戶創(chuàng)作的博客內(nèi)容通過一個(gè)IPFS網(wǎng)絡(luò)進(jìn)行發(fā)布,而非中心服務(wù)器。

同時(shí),用戶和以太坊錢包賬戶進(jìn)行綁定,用戶可以對(duì)優(yōu)質(zhì)內(nèi)容進(jìn)行ETH打賞,內(nèi)容創(chuàng)作者能以此賺取ETH,如同人腦挖礦一樣。它沒有太多監(jiān)管的限制,也沒有中間商抽成,內(nèi)容收益直接歸創(chuàng)作者所有。

第二,可以降低存儲(chǔ)和帶寬成本。我之前也舉過愛奇藝的例子,而做視頻比較成功的項(xiàng)目叫「Dtube」。它是一個(gè)搭建在Steemit上的去中心化視頻播放平臺(tái),其用戶上傳的視頻文件都經(jīng)過IPFS協(xié)議進(jìn)行存儲(chǔ),具有唯一標(biāo)識(shí)。相較于傳統(tǒng)視頻網(wǎng)站,它降低了同資源冗余程度,同時(shí)大大節(jié)約了海量用戶在播放視頻時(shí)所產(chǎn)生的帶寬成本。

第三個(gè),可以與區(qū)塊鏈完美結(jié)合。區(qū)塊鏈的本質(zhì)是分布式賬本,本身的瓶頸之一就是賬本的存儲(chǔ)能力,目前大部分公鏈的最大問題是沒法存儲(chǔ)大量的超媒體數(shù)據(jù)在自己的鏈上。比特幣至今全部的區(qū)塊數(shù)據(jù)也才30-40G左右,以太坊這樣可編程的區(qū)塊鏈項(xiàng)目也只能執(zhí)行和存儲(chǔ)小段合約代碼,DApp想發(fā)展成超級(jí)App,受到了極大的限制。

運(yùn)用IPFS技術(shù)解決存儲(chǔ)瓶頸是目前來看的過渡方案,最典型的應(yīng)用就是EOS。EOS引以為傲的是可以支持百萬(wàn)級(jí)別TPS的并發(fā)量,其中除了DPOS共識(shí)機(jī)制的功勞之外,還歸功于其底層存儲(chǔ)設(shè)計(jì)是采取IPFS來解決大型數(shù)據(jù)的傳輸效率。

EOS將自己打包好的區(qū)塊數(shù)據(jù)通過IPLD進(jìn)行異構(gòu)處理,統(tǒng)一成一種便于內(nèi)容尋址的數(shù)據(jù)結(jié)構(gòu)類型,并掛載到IPFS的link上,讓IPFS網(wǎng)絡(luò)承擔(dān)存儲(chǔ)和P2P檢索的邏輯,而不消耗EOS區(qū)塊鏈系統(tǒng)本身太多的計(jì)算資源。

第四,可以為傳統(tǒng)應(yīng)用提供分布式緩存方案。 IPFS-GEO 是我自己之前寫的,它是一個(gè)為傳統(tǒng)LBS應(yīng)用提供分布式緩存的項(xiàng)目,可以將地理位置坐標(biāo)數(shù)據(jù)通過GeoHash算法轉(zhuǎn)化成一維字符串,并將與之相關(guān)聯(lián)的具有檢索價(jià)值的數(shù)據(jù)存入IPFS網(wǎng)絡(luò),由IPFS網(wǎng)絡(luò)標(biāo)識(shí)唯一性,并分布在各個(gè)鄰近節(jié)點(diǎn)上。

當(dāng)檢索請(qǐng)求到來時(shí),系統(tǒng)先通過字符串近似度范圍比較,縮小檢索范圍,加快檢索效率,通過NodeID從附近節(jié)點(diǎn)拿到超媒體數(shù)據(jù),達(dá)到類似分布式緩存的效果,大大提高了LBS應(yīng)用整個(gè)檢索動(dòng)作的效率。

IPFS的明星應(yīng)用

OpenBazaar是IPFS上的一個(gè)明星應(yīng)用,我給它取了一個(gè)中文名叫開放集市,前一段時(shí)間剛拿到比特大陸500萬(wàn)美元的投資。

在之前的1.0版本,OpenBazaar被稱之為黑市,那時(shí)沒有應(yīng)用IPFS,利用ZeroMQ來實(shí)現(xiàn)P2P交易,一定程度也繞過了中心化的檢查,把交易的手續(xù)費(fèi)作為紅利給到用戶。同時(shí)它整合了比特幣作為支付渠道,轟動(dòng)一時(shí),用戶數(shù)量在短時(shí)間內(nèi)迅速提升。

開放集市在2.0版本發(fā)布之后,考慮到法律等因素,官方加入了一層審查機(jī)制,同時(shí)支持了比特幣之外的BCH等數(shù)字貨幣,并且整合和重構(gòu)IPFS,取代了之前的ZeroMQ。

現(xiàn)在,眾多開放集市上的商店在沒有用戶上線的情況下,也可以在主機(jī)上就被運(yùn)行。以前必須同時(shí)登陸才可以交易,現(xiàn)在利用IPFS相當(dāng)于實(shí)現(xiàn)了離線店鋪。這同時(shí)意味著,訪問你的店鋪的人越多,店鋪數(shù)據(jù)被復(fù)制越多,有利于優(yōu)質(zhì)的店鋪宣傳和推廣,這是一定意義上的價(jià)值回歸。

我把它稱為明星項(xiàng)目,不光因?yàn)樗腔贗PFS而且做得不錯(cuò),還因?yàn)樗鼘?duì)IPFS全部的重構(gòu),它把IPFS所有的源碼、協(xié)議和各種配套設(shè)施都重新開,不僅重構(gòu)了IPFS的分支,改了協(xié)議名,同時(shí)也更改了協(xié)議頭,一定意義上把OB的網(wǎng)絡(luò)和主的IPFS網(wǎng)絡(luò)隔離開。

OpenBazaar希望有更集中化的控制,想建立自己的礦場(chǎng)和機(jī)房來保證服務(wù)的穩(wěn)定,在去中心和中心化之間選擇了一個(gè)中間點(diǎn)。我覺得目前大部分的傳統(tǒng)應(yīng)用和公司,也可以這樣去考慮。完全去中心化不太可能,所以可以取其精華、去其糟粕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容