IPFS 技術(shù)簡(jiǎn)介

什么是IPFS

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

IPFS能解決什么問題

回顧下HTTP時(shí)代的網(wǎng)絡(luò)請(qǐng)求曾掂,輸入域名,請(qǐng)求DNS服務(wù)器壁顶,找到對(duì)應(yīng)的IP珠洗,根據(jù)IP + uri找到目標(biāo)服務(wù)器,目標(biāo)服務(wù)器收到請(qǐng)求后處理若专,然后按照原路徑返回许蓖,那么這個(gè)過程可能會(huì)遇到哪些問題了:

效率低,成本高调衰。使用HTTP協(xié)議每次需要從中心化的服務(wù)器下載完整的文件(網(wǎng)頁(yè), 視頻, 圖片等), 速度慢, 效率低. 如果改用P2P的方式下載, 可以節(jié)省近60%的帶寬. P2P將文件分割為小的塊, 從多個(gè)服務(wù)器同時(shí)下載, 速度非巢沧Γ快.

Web文件被刪除、服務(wù)器關(guān)閉嚎莉∶壮辏回想一下是不是經(jīng)常你收藏的某個(gè)頁(yè)面, 在使用的時(shí)候?yàn)g覽器返回404(無(wú)法找到頁(yè)面), http的頁(yè)面平均生存周期大約只有100天. Web文件經(jīng)常被刪除(由于存儲(chǔ)成本太高), 無(wú)法永久保存. IPFS提供了文件的歷史版本回溯功能(就像git版本控制工具一樣), 可以很容易的查看文件的歷史版本, 數(shù)據(jù)可以得到永久保存

中心化限制。我們的現(xiàn)有互聯(lián)網(wǎng)是一個(gè)高度中心化的網(wǎng)絡(luò). 互聯(lián)網(wǎng)是人類的偉大發(fā)明, 也是科技創(chuàng)新的加速器. 各種管制將對(duì)這互聯(lián)網(wǎng)的功能造成威脅, 例如: 互聯(lián)網(wǎng)封鎖, 管制, 監(jiān)控等等. 這些都源于互聯(lián)網(wǎng)的中心化.而分布式的IPFS可以克服這些web的缺點(diǎn).

高度依賴主干網(wǎng)趋箩。主干網(wǎng)受制于諸多因素的影響, 戰(zhàn)爭(zhēng), 自然災(zāi)害, 互聯(lián)網(wǎng)管制, 中心化服務(wù)器宕機(jī)等等, 都可能是我們的互聯(lián)網(wǎng)應(yīng)用中斷服務(wù). IPFS可以是互聯(lián)網(wǎng)應(yīng)用極大的降低互聯(lián)網(wǎng)應(yīng)用對(duì)主干網(wǎng)的依賴.

這些問題正是當(dāng)前HTTP無(wú)法根治的赃额,而IPFS卻能很好的解決。

IPFS的優(yōu)勢(shì)

IPFS不僅僅是為了加速web叫确,而是為了最終取代HTTP協(xié)議跳芳,針對(duì)上述HTTP面臨的問題,IPFS提出了各種解決方案

IPFS是一個(gè)文件系統(tǒng)启妹,定義了基于內(nèi)容的尋址文件系統(tǒng)

IPFS天生就是一個(gè)CDN筛严,文件添加到IPFS網(wǎng)絡(luò),使用分布式哈希饶米、p2p傳輸桨啃、版本管理系統(tǒng)车胡,將會(huì)在全世界進(jìn)行CDN加速

IPFS是一個(gè)web協(xié)議,可以像http那樣查看互聯(lián)網(wǎng)頁(yè)面照瘾,未來(lái)瀏覽器可以直接支持 ipfs:/ 或者 fs:/ 協(xié)議

IPFS是模塊化的協(xié)議匈棘,連接層:通過其他任何網(wǎng)絡(luò)協(xié)議連接;路由層:尋找定位文件所在位置析命;數(shù)據(jù)塊交換:采用BitTorrent技術(shù)

IPFS是一個(gè)p2p系統(tǒng)主卫,分布式網(wǎng)絡(luò)結(jié)構(gòu),沒有單點(diǎn)失效問題

IPFS擁有命名服務(wù)IPNS:基于SFS(自認(rèn)證系統(tǒng))命名體系鹃愤,可以和現(xiàn)有域名系統(tǒng)綁定

IPFS架構(gòu)設(shè)計(jì)

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

身份層和路由層可以一起解釋意述。對(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)系方式的朋友分享名片來(lái)建立聯(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ái)激勵(lì)節(jié)點(diǎn)去分享狈蚤,我推斷FileCoin有很大概率是基于Bitswap,用戶在Bitswap里增加數(shù)據(jù)會(huì)增加信用分划纽,分享得越多信用分越高脆侮。如果用戶只去檢索數(shù)據(jù)而不存數(shù)據(jù),信用分會(huì)越來(lái)越低勇劣,其它節(jié)點(diǎn)會(huì)在嵌入連接時(shí)優(yōu)先選擇信用分高的靖避。

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

對(duì)象層和文件層適合結(jié)合來(lái)談榛臼,它們管理的是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)來(lái)支持版本快照金刁。

命名層具有自我驗(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ì)來(lái)使得加密后的DAG對(duì)象名可定義抵屿,增強(qiáng)可閱讀性庆锦。

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

基于IPFS的項(xiàng)目

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加密算法和自描述方式(從值上就可以知道值是如何生成)的集合空幻,它具有SHA1SHA256 SHA512Blake3B等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糊秆,F(xiàn)ilecoin是建立在IPFS基礎(chǔ)上的一條公鏈始衅,旨在創(chuàng)立一個(gè)分布式的儲(chǔ)存市場(chǎng)冷蚂,幫助IPFS激勵(lì)用戶利用多余的空間存儲(chǔ)鏈上信息,維系IPFS生態(tài)的正常運(yùn)行與發(fā)展汛闸。Filecoin激勵(lì)用戶出租自己的閑置硬盤蝙茶、磁盤等存儲(chǔ)空間,用于接收鏈內(nèi)存儲(chǔ)信息诸老,防止部分節(jié)點(diǎn)下線或破壞導(dǎo)致文件不可用問題隆夯。出租了自己存儲(chǔ)空間的用戶便成為礦工,只需連接到 Filecoin 網(wǎng)絡(luò)别伏,然后等著協(xié)議來(lái)處理文件傳輸和交易就行蹄衷。礦工貢獻(xiàn)的存儲(chǔ)空間越大,獲得的Filecoin(FIL)就越多厘肮。當(dāng)然宦芦,客戶也可以通過花費(fèi)Filecoin來(lái)雇傭礦工來(lái)存儲(chǔ)或分發(fā)數(shù)據(jù)。

IPFS的應(yīng)用意義

第一轴脐,可以為內(nèi)容創(chuàng)作帶來(lái)一定的自由调卑。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ǔ)瓶頸是目前來(lái)看的過渡方案,最典型的應(yīng)用就是EOS秘血。EOS引以為傲的是可以支持百萬(wàn)級(jí)別TPS的并發(fā)量味抖,其中除了DPOS共識(shí)機(jī)制的功勞之外,還歸功于其底層存儲(chǔ)設(shè)計(jì)是采取IPFS來(lái)解決大型數(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)求到來(lái)時(shí),系統(tǒng)先通過字符串近似度范圍比較抚官,縮小檢索范圍扬跋,加快檢索效率,通過NodeID從附近節(jié)點(diǎn)拿到超媒體數(shù)據(jù)耗式,達(dá)到類似分布式緩存的效果胁住,大大提高了LBS應(yīng)用整個(gè)檢索動(dòng)作的效率趁猴。

IPFS的缺陷

信息不可撤銷刊咳、不可篡改是IPFS的優(yōu)點(diǎn)彪见,也是缺點(diǎn)。如果是一個(gè)內(nèi)容錯(cuò)誤娱挨,需要更新的文件余指,那么不可撤銷、不可更改將會(huì)成為一個(gè)很麻煩的事情跷坝。對(duì)此酵镜,IPFS給出的對(duì)應(yīng)措施是:可以將修改之后的文件上傳至IPFS,IPFS也會(huì)對(duì)文件進(jìn)行更新柴钻,在IPFS內(nèi)可搜索到文件更新的所有歷史紀(jì)錄淮韭。

IPFS將大文件分別存放于不同的塊中,也不可避免的有一個(gè)隱患贴届,即:如果一部分存放文件的節(jié)點(diǎn)統(tǒng)統(tǒng)下線不可用了靠粪,并且該文件沒有備份,那么整個(gè)文件都是不可用的毫蚓。對(duì)此占键,有兩種解決方案,一是激勵(lì)更多的節(jié)點(diǎn)去存儲(chǔ)這個(gè)信息元潘,二是積極分發(fā)文件畔乙,使得更多節(jié)點(diǎn)存儲(chǔ)這個(gè)信息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翩概,一起剝皮案震驚了整個(gè)濱河市牲距,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钥庇,老刑警劉巖牍鞠,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異上沐,居然都是意外死亡皮服,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門参咙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)龄广,“玉大人,你說我怎么就攤上這事蕴侧≡裢” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵净宵,是天一觀的道長(zhǎng)敲才。 經(jīng)常有香客問我裹纳,道長(zhǎng),這世上最難降的妖魔是什么紧武? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任剃氧,我火速辦了婚禮,結(jié)果婚禮上阻星,老公的妹妹穿的比我還像新娘朋鞍。我一直安慰自己,他們只是感情好妥箕,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布滥酥。 她就那樣靜靜地躺著,像睡著了一般畦幢。 火紅的嫁衣襯著肌膚如雪坎吻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天宇葱,我揣著相機(jī)與錄音瘦真,去河邊找鬼。 笑死贝搁,一個(gè)胖子當(dāng)著我的面吹牛吗氏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雷逆,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼弦讽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了膀哲?” 一聲冷哼從身側(cè)響起往产,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎某宪,沒想到半個(gè)月后仿村,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兴喂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蔼囊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衣迷。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡畏鼓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出壶谒,到底是詐尸還是另有隱情云矫,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布汗菜,位于F島的核電站让禀,受9級(jí)特大地震影響挑社,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巡揍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一痛阻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吼肥,春花似錦录平、人聲如沸麻车。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)动猬。三九已至啤斗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赁咙,已是汗流浹背钮莲。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彼水,地道東北人崔拥。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像凤覆,于是被迫代替她去往敵國(guó)和親链瓦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344