IPFS是一種內容可尋址、版本化、點對點超媒體的分佈式存儲、傳輸協議,目標是補充甚至取代過去半個多世紀裏使用的超文本媒體傳輸協議(HTTP),但願構建更快、更安全、更自由的互聯網時代。node
回顧下HTTP時代的網絡請求,輸入域名,請求DNS服務器,找到對應的IP,根據IP + uri找到目標服務器,目標服務器收到請求後處理,而後按照原路徑返回,那麼這個過程可能會遇到哪些問題了:git
這些問題正是當前HTTP沒法根治的,而IPFS卻能很好的解決。web
IPFS不只僅是爲了加速web,而是爲了最終取代HTTP協議,針對上述HTTP面臨的問題,IPFS提出了各類解決方案算法
IPFS至少有八層子協議棧,從上至下爲身份、網絡、路由、交換、對象、文件、命名、應用,每一個協議棧各司其職,又互相搭配。編程
身份層和路由層能夠一塊兒解釋。對等節點身份信息的生成以及路由規則是經過Kademlia協議生成制定,KAD協議實質是構建了一個分佈式鬆散Hash表,簡稱DHT,每一個加入這個DHT網絡的人都要生成本身的身份信息,而後才能經過這個身份信息去負責存儲這個網絡裏的資源信息和其餘成員的聯繫信息。如同微信名片分享,在沒法經過直接搜索微信號的狀況下,若是你要找一我的,能夠經過有這我的聯繫方式的朋友分享名片來創建聯繫。segmentfault
網絡層比較核心,使用的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的團隊在開發時,採用高度模塊集成化的方式,像搭積木同樣去開發整個項目。協議實驗室團隊2015年創立,到17年的時間裏都在作IPLD、LibP2P、Multiformats這三個模塊的開發,它們服務於IPFS底層。
Mutiformats是一系列hash加密算法和自描述方式(從值上就能夠知道值是如何生成)的集合,它具備SHA1SHA256 SHA512Blake3B等6種主流的加密方式,用以加密和描述nodeID以及指紋數據的生成。
LibP2P是IPFS核心中的核心,面對各式各樣的傳輸層協議以及複雜的網絡設備,它能夠幫助開發者迅速創建一個可用P2P網絡層,快速且節約成本,這也是爲何IPFS技術被衆多區塊鏈項目青睞的原因。
IPLD實際上是一個轉換中間件,將現有的異構數據結構統一成一種格式,方便不一樣系統之間的數據交換和互操做。如今IPLD支持的數據結構,是比特幣、以太坊的區塊數據,也支持IPFS和IPLD。這也是IPFS爲何受到區塊鏈系統歡迎的緣由之二,它的IPLD中間件能夠把不一樣的區塊結構統一成一個標準進行傳遞,爲開發者提供了成功性比較高的標準,不用擔憂性能、穩定和bug。
IPFS應用了這幾個模塊的功能,集成爲一種容器化的應用程序,運行在獨立節點上,以Web服務的形式,供你們使用訪問。
最後是Filecoin,Filecoin是創建在IPFS基礎上的一條公鏈,旨在創立一個分佈式的儲存市場,幫助IPFS激勵用戶利用多餘的空間存儲鏈上信息,維繫IPFS生態的正常運行與發展。Filecoin激勵用戶出租本身的閒置硬盤、磁盤等存儲空間,用於接收鏈內存儲信息,防止部分節點下線或破壞致使文件不可用問題。出租了本身存儲空間的用戶便成爲礦工,只需鏈接到 Filecoin 網絡,而後等着協議來處理文件傳輸和交易就行。礦工貢獻的存儲空間越大,得到的Filecoin(FIL)就越多。固然,客戶也能夠經過花費Filecoin來僱傭礦工來存儲或分發數據。
第一,能夠爲內容創做帶來必定的自由。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的優勢,也是缺點。若是是一個內容錯誤,須要更新的文件,那麼不可撤銷、不可更改將會成爲一個很麻煩的事情。對此,IPFS給出的對應措施是:能夠將修改以後的文件上傳至IPFS,IPFS也會對文件進行更新,在IPFS內可搜索到文件更新的全部歷史紀錄。
IPFS將大文件分別存放於不一樣的塊中,也不可避免的有一個隱患,即:若是一部分存放文件的節點通通下線不可用了,而且該文件沒有備份,那麼整個文件都是不可用的。對此,有兩種解決方案,一是激勵更多的節點去存儲這個信息,二是積極分發文件,使得更多節點存儲這個信息。