戴嘉樂 詳解IPFS的本質 技術架構以及應用

2021-08-19 14:41:21 字數 4120 閱讀 7247

本文**區塊鏈捕手舉辦第二期捕手沙龍的分享回顧,此次沙龍邀請到了三位ipfs領域的行業專家進行自己的實踐分享

ipfs的中文名是星際檔案系統,由juan benet在2023年5月份發起。juan benet的個人經歷很傳奇,他畢業於史丹福大學,在建立ipfs專案之前,他創辦的第一家公司被雅虎收購。2023年,他建立的ipfs在ycombinator孵化競賽中拿到了鉅額的投資,同時成立了協議實驗室。這個實驗室團隊由14位核心開發者以及社群中上百位**貢獻者組成的。

ipfs本質上是一種內容可定址、版本化、點對點超**的分布式儲存、傳輸協議,目標是補充甚至取代過去20年裡使用的超文字**傳輸協議(http),希望構建更快、更安全、更自由的網際網路時代。

網際網路平台所提供的網路服務大致經過了三種模式的迭代歷程:

第乙個模式屬於集中化,例如早期的12306因為沒法分散去做,只有乙個中心服務群,所有買票的流量直接搭載在這個服務群上,承載的壓力非常大。

第二個模式屬於分散集群,類似於o2o百團大戰時各個**需要建立不同區域下的服務群,它們背後的idc機房,會讓同樣的服務在乙個局域內分散,這就減輕了中心伺服器的壓力。

前兩種模式容易產生一些弊端:在第一種模式裡,服務高度依賴中心網路。大公司或者創業公司無法承受宕機,運維有乙個kpi指數叫sla,穩定性沒有到99.9%的話,基本不合格。sla需要消耗特別大的成本,大公司需要僱一批運維專家或專業人士,去保障系統的穩定性。在第二種模式裡,儲存資料有丟失的風險。大家經常開玩笑的電纜被挖斷,員工刪庫跑路,都是隱患。

ipfs有希望成為第三種模式。ipfs想打造乙個點對點的網路拓撲,相當於顛覆http所代表的分布關係,它具有內容可定址的特點,通過檔案內容生成唯一的雜湊標識,一定程度上節約了空間開銷的成本。

http協議使用的網域名稱定址,最終會對映到最底層,找到某個網域名稱所對應的ip位址下的某個主機,以及某個檔案目錄的某個檔案。它不關心是否存在相同的檔案,但內容定址會通過唯一的標識去訪問,並且提前檢驗這個標識是否已經被儲存過。如果被儲存過,直接從其它節點讀取它,不需要重複儲存,一定意義上節約了空間。

他把雜湊指紋和路徑名都告訴我,我要做的事情是啟動乙個本地節點,對該閘道器發乙個定址pin的請求,ipfs自動索引分布式雜湊表的雜湊值,找到指紋b所對應的節點列表。

ipfs至少有八層子協議棧,從上至下為身份、網路、路由、交換、物件、檔案、命名、應用,每個協議棧各司其職,又互相搭配。

網路層比較核心,使用的libp2p可以支援任意傳輸層協議。nat技術能讓內網中的裝置共用同乙個外網ip,我們都體驗過的家庭路由器就是這個原理。

ipfs團隊把bittorrent進行了創新,叫作bitswap,它增加了信用和帳單體系來激勵節點去分享,我推斷filecoin有很大概率是基於bitswap,使用者在bitswap裡增加資料會增加信用分,分享得越多信用分越高。如果使用者只去檢索資料而不存資料,信用分會越來越低,其它節點會在嵌入連線時優先選擇信用分高的。

這一設計可以解決女巫攻擊,信用分不可能靠機器刷去提高,一直刷檢索請求,信用分越刷越低。請求次數和儲存量的變數之間有乙個比較精妙的演算法,類似乙個拋物線,前期可以容忍很多東西,達到一定次數後不再信任。

物件層和檔案層適合結合來談,它們管理的是ipfs上80%的資料結構,大部分資料物件都是以merkledag的結構存在,這為內容定址和去重提供了便利。檔案層是乙個新的資料結構,和dag並列,採用git一樣的資料結構來支援版本快照。

命名層具有自我驗證的特性(當其他使用者獲取該物件時,使用指紋公鑰進行驗籤,即驗證所用的公鑰是否與nodeid匹配,這驗證了使用者發布物件的真實性,同時也獲取到了可變狀態),並且加入了ipns這個巧妙的設計來使得加密後的dag物件名可定義,增強可閱讀性。

最後是應用層,ipfs核心價值就在於上面執行的應用程式,我們可以利用它類似cdn的功能,在成本很低的頻寬下,去獲得想要的資料,從而提公升整個應用程式的效率。

新的技術取代老的技術,無非就兩點:第一,能提高系統效率;第二,能夠降低系統成本。ipfs把這兩點都做到了。

我整理了乙個ipfs族譜關係圖,同時也是乙個縱向資料流圖。剛才所說的八層協議,其實每一層的實現都繫結在對應的模組下,進行了乙個直觀的圖表設計。

ipfs的團隊在開發時,採用高度模組整合化的方式,像搭積木一樣去開發整個專案。協議實驗室團隊2023年創立,到17年的時間裡都在做ipld、libp2p、multiformats這三個模組的開發,它們服務於ipfs底層。

mutiformats是一系列hash加密演算法和自描述方式(從值上就可以知道值是如何生成)的集合,它具有sha1\sha256 \sha512\blake3b等6種主流的加密方式,用以加密和描述nodeid以及指紋資料的生成。

libp2p是ipfs核心中的核心,面對各式各樣的傳輸層協議以及複雜的網路裝置,它可以幫助開發者迅速建立乙個可用p2p網路層,快速且節約成本,這也是為什麼ipfs技術被眾多區塊鏈專案青睞的緣由。

ipld其實是乙個轉換中介軟體,將現有的異構資料結構統一成一種格式,方便不同系統之間的資料交換和互操作。現在ipld支援的資料結構,支援位元幣、以太坊的區塊資料。這也是ipfs為什麼受到區塊鏈系統歡迎的原因之二,它的ipld中介軟體可以把不同的區塊結構統一成乙個標準進行傳遞,為開發者提供了成功性比較高的標準,不用擔心效能、穩定和bug。

最後是filecoin, 作為去年7月才宣布的專案,它的開發進度至今保密。filecoin把這些應用的資料價值化,通過類似位元幣的激勵政策和經濟模型,讓更多的人去建立節點,去讓更多的人使用ipfs。

我更希望大家把ipfs和filecoin分開來看,如果ipfs玩得好,可以建立很多filecoin專案出來,它本身的價值和意義沒有ipfs這麼大。

第一,可以為內容創作帶來一定的自由。akasha是乙個典型的應用,它是乙個基於以太坊和ipfs的社交部落格創作平台,使用者創作的部落格內容通過乙個ipfs網路進行發布,而非中心伺服器。

同時,使用者和以太坊錢包賬戶進行繫結,使用者可以對優質內容進行eth打賞,內容創作者能以此賺取eth,如同人腦挖礦一樣。它沒有太多監管的限制,也沒有中間商抽成,內容收益直接歸創作者所有。

運用ipfs技術解決儲存瓶頸是目前來看的過渡方案,最典型的應用就是eos。eos引以為傲的是可以支援百萬級別tps的併發量,其中除了dpos共識機制的功勞之外,還歸功於其底層儲存設計是採取ipfs來解決大型資料的傳輸效率。

eos將自己打包好的區塊資料通過ipld進行異構處理,統一成一種便於內容定址的資料結構型別,並掛載到ipfs的link上,讓ipfs網路承擔儲存和p2p檢索的邏輯,而不消耗eos區塊鏈系統本身太多的計算資源。

第四,可以為傳統應用提供分布式快取方案。 ipfs-geo 是我自己之前寫的,它是乙個為傳統lbs應用提供分布式快取的專案,可以將地理位置座標資料通過geohash演算法轉化成一維字串,並將與之相關聯的具有檢索價值的資料存入ipfs網路,由ipfs網路標識唯一性,並分布在各個鄰近節點上。

當檢索請求到來時,系統先通過字串近似度範圍比較,縮小檢索範圍,加快檢索效率,通過nodeid從附近節點拿到超**資料,達到類似分布式快取的效果,大大提高了lbs應用整個檢索動作的效率。

openbazaar是ipfs上的乙個明星應用,我給它取了乙個中文名叫開放集市,前一段時間剛拿到位元大陸500萬美元的投資。

在之前的1.0版本,openbazaar被稱之為黑市,那時沒有應用ipfs,利用zeromq來實現p2p交易,一定程度也繞過了中心化的檢查,把交易的手續費作為紅利給到使用者。同時它整合了位元幣作為支付渠道,轟動一時,使用者數量在短時間內迅速提公升。

開放集市在2.0版本發布之後,考慮到法律等因素,官方加入了一層審查機制,同時支援了位元幣之外的bch等數字貨幣,並且整合和重構ipfs,取代了之前的zeromq。

現在,眾多開放集市上的商店在沒有使用者上線的情況下,也可以在主機上就被執行。以前必須同時登陸才可以交易,現在利用ipfs相當於實現了離線店鋪。這同時意味著,訪問你的店鋪的人越多,店鋪資料被複製越多,有利於優質的店鋪宣傳和推廣,這是一定意義上的價值回歸。

我把它稱為明星專案,不光因為它是基於ipfs而且做得不錯,還因為它對ipfs全部的重構,它把ipfs所有的原始碼、協議和各種配套設施都重新開,不僅重構了ipfs的分支,改了協議名,同時也更改了協議頭,一定意義上把ob的網路和主的ipfs網路隔離開。

openbazaar希望有更集中化的控制,想建立自己的礦場和機房來保證服務的穩定,在去中心和中心化之間選擇了乙個中間點。我覺得目前大部分的傳統應用和公司,也可以這樣去考慮。完全去中心化不太可能,所以可以取其精華、去其糟粕。

戴嘉樂 詳解IPFS的本質 技術架構以及應用

ipfs的中文名是星際檔案系統,由juan benet在2014年5月份發起。juan benet的個人經歷很傳奇,他畢業於史丹福大學,在建立ipfs專案之前,他創辦的第一家公司被雅虎收購。2015年,他建立的ipfs在ycombinator孵化競賽中拿到了鉅額的投資,同時成立了協議實驗室。這個實驗...

IP首部詳解

4位版本 4 位首部長度 8 位服務型別 tos 16 位總長度 16 位識別符號 3 位標誌 13位片偏移 8 位生存時間 8 位協議 16位首部檢驗和 32 位源ip位址 32位目的 ip位址 32 位選項 若有 資料 首都長度 ip首部的長度,一般為 20b.版本 ip位址的版本,目前我們使用...

IP協議詳解

ip協議是tcp ip協議族的核心協議,也是socket網路程式設計的基礎之一。我們將從以下兩個方面較為深入的了解ip協議 ip資料報的路由和 ip資料報的路由和 發生在除目標機器之外的所有主機和路由器上。它們決定資料報是否應該 以及如何 ip協議是tcp ip協議族的動力,它為上層提供無狀態,無連...