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

20180330214846

IPFS是什麼?

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

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

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

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

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

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

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

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

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

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

舉個具體場景的例子。假設我想要看《環太平洋》這部電影,小明之前下載過這部電影,他啓動了IPFS節點,將這個視頻文件加入了IPFS網絡。他會得到一個哈希指紋b,同時發佈到公共網關,得到了一個/IPFS/b的路徑名。

他把哈希指紋和路徑名都告訴我,我要做的事情是啓動一個本地節點,對該網關發一個尋址PIN的請求,IPFS自動索引分佈式哈希表的哈希值,找到指紋b所對應的節點列表。

大的視頻通常不會都存在一個節點,可能分片存在其它一些子節點上,IPFS把這些節點列表全部並行抓取,最後由本地的manager拼成完整的文件。並行的速度遠遠大於直接下載完整文件的速度,我很快就能在本地化的瀏覽器上看到電影,還可以繼續分享給其他人。

IPFS的架構

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

20180330214901

身份層和路由層可以一起解釋。對等節點身份信息的生成以及路由規則是通過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族譜關係圖,同時也是一個縱向數據流圖。剛纔所說的八層協議,其實每一層的實現都綁定在對應的模塊下,進行了一個直觀的圖表設計。

2

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

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

LibP2P是IPFS核心中的核心,面對各式各樣的傳輸層協議以及複雜的網絡設備,它可以幫助開發者迅速建立一個可用P2P網絡層,快速且節約成本,這也是爲什麼IPFS技術被衆多區塊鏈項目青睞的緣由

IPLD其實是一個轉換中間件,將現有的異構數據結構統一成一種格式,方便不同系統之間的數據交換和互操作。現在IPLD支持的數據結構,是比特幣、以太坊的區塊數據,也支持IPFS和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希望有更集中化的控制,想建立自己的礦場和機房來保證服務的穩定,在去中心和中心化之間選擇了一箇中間點。我覺得目前大部分的傳統應用和公司,也可以這樣去考慮。完全去中心化不太可能,所以可以取其精華、去其糟粕。

版權聲明:
by
nc"
sa

作者保留權利。文章爲作者獨立觀點,不代表巴比特立場。

來源鏈接:www.8btc.com