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

圓方圓區塊鏈發表於2018-11-14

戴嘉樂是前百度高階研發工程師,ipfser.org&巴位元專欄作者。戴嘉樂去年8月參與了FileCoin的眾籌,從而瞭解到IPFS技術,獨立開發了兩款基於IPFS的開源應用,一個是與IPFS有關的wiki系統,另一個是IPFS相關的地理位置檢索系統。

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

IPFS是什麼?

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

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

我們每天上網使用APP刷朋友圈、微博都在使用HTTP協議,它基於TCP/IP的計算機應用層面,從伺服器傳輸超文字資料到本地瀏覽器,本地瀏覽器或APP渲染後呈現給使用者。基於這樣的網路環境構成了CS或BS架構,最後注入BAT這樣大型網路提供商。

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

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

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

    前兩種模式容易產生一些弊端:在第一種模式裡,服務高度依賴中心網路。大公司或者創業公司無法承受當機,運維有一個KPI指數叫SLA,穩定性沒有到99.9%的話,基本不合格。SLA需要消耗特別大的成本,大公司需要僱一批運維專家或專業人士,去保障系統的穩定性。在第二種模式裡,儲存資料有丟失的風險。大家經常開玩笑的電纜被挖斷,員工刪庫跑路,都是隱患。同時,這兩種模式的頻寬成本相對高很多,會造成一定頻寬資源的浪費。比如《中國有嘻哈》第一期海選的視訊播放量有10億次,假設視訊檔案大小是1GB,播放整個視訊需要消耗1000PB的頻寬量。如果按照0.001美元1GB頻寬成本,愛奇藝光一期節目需要支付一百萬美金給ISP(網際網路服務提供商)。

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

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

舉個具體場景的例子。假設我想要看《環太平洋》這部電影,小明之前下載過這部電影,他啟動了IPFS節點,將這個視訊檔案加入了IPFS網路。他會得到一個雜湊指紋b,同時釋出到公共閘道器,得到了一個/IPFS/b的路徑名。他把雜湊指紋和路徑名都告訴我,我要做的事情是啟動一個本地節點,對該閘道器發一個定址PIN的請求,IPFS自動索引分散式雜湊表的雜湊值,找到指紋b所對應的節點列表。大的視訊通常不會都存在一個節點,可能分片存在其它一些子節點上,IPFS把這些節點列表全部並行抓取,最後由本地的manager拼成完整的檔案。並行的速度遠遠大於直接下載完整檔案的速度,我很快就能在本地化的瀏覽器上看到電影,還可以繼續分享給其他人。

IPFS的架構

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

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

  • 身份層和路由層可以一起解釋。對等節點身份資訊的生成以及路由規則是通過Kademlia協議生成制定,KAD協議實質是構建了一個分散式鬆散Hash表,簡稱DHT,每個加入這個DHT網路的人都要生成自己的身份資訊,然後才能通過這個身份資訊去負責儲存這個網路裡的資源資訊和其他成員的聯絡資訊。如同微信名片分享,在無法通過直接搜尋微訊號的情況下,如果你要找一個人,可以通過有這個人聯絡方式的朋友分享名片來建立聯絡。

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

  • 交換層,是類似迅雷這樣的BT工具。迅雷其實是模擬了P2P網路,並建立中心伺服器,當伺服器登記使用者請求資源時,讓請求同樣資源的使用者形成一個小叢集swarm,在這裡分享資料。這種方式有弊端,因為伺服器是由迅雷統一維護,如果出現了故障、當機時,下載操作無法進行。中心化服務還可以限制一些下載請求,人們發明了一種更聰明的方式就是Bittorrent,讓每一個種子節點所要儲存的資料,通過雜湊表儲存在裡面,BT工具相對不太受監管,服務更加穩定。

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

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

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

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

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

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

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

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

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

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

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

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

IPFS應用了這幾個模組的功能,整合為一種容器化的應用程式,執行在獨立節點上,以Web服務的形式,供大家使用訪問。

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

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

IPFS的應用意義

第一,可以為內容創作帶來一定的自由。Akasha是一個典型的應用,它是一個基於以太坊和IPFS的社交部落格創作平臺,使用者創作的部落格內容通過一個IPFS網路進行釋出,而非中心伺服器。同時,使用者和以太坊錢包賬戶進行繫結,使用者可以對優質內容進行ETH打賞,內容創作者能以此賺取ETH,如同人腦挖礦一樣。它沒有太多監管的限制,也沒有中間商抽成,內容收益直接歸創作者所有。

第二,可以降低儲存和頻寬成本。我之前也舉過愛奇藝的例子,而做視訊比較成功的專案叫「Dtube」。它是一個搭建在Steemit上的去中心化視訊播放平臺,其使用者上傳的視訊檔案都經過IPFS協議進行儲存,具有唯一標識。相較於傳統視訊網站,它降低了同資源冗餘程度,同時大大節約了海量使用者在播放視訊時所產生的頻寬成本。

第三個,可以與區塊鏈完美結合。區塊鏈的本質是分散式賬本,本身的瓶頸之一就是賬本的儲存能力,目前大部分公鏈的最大問題是沒法儲存大量的超媒體資料在自己的鏈上。比特幣至今全部的區塊資料也才30-40G左右,以太坊這樣可程式設計的區塊鏈專案也只能執行和儲存小段合約程式碼,DApp想發展成超級App,受到了極大的限制。

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

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

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

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

IPFS的明星應用

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

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

開放集市在2.0版本釋出之後,考慮到法律等因素,官方加入了一層審查機制,同時支援了比特幣之外的BCH等數字貨幣,並且整合和重構IPFS,取代了之前的ZeroMQ。

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

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

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


相關文章和視訊推薦

【董天一】什麼是IPFS?(一)

圓方圓學院彙集大批區塊鏈名師,打造精品的區塊鏈技術課程。 在各大平臺都長期有優質免費公開課,歡迎報名收看。 公開課地址:ke.qq.com/course/3451…

相關文章