今年年初,Internet Archive開始倡導分佈式網絡。如今關於它的聲音已經變得愈來愈清晰而又響亮。而IPFS就是在這種環境下出現的一個典型的開源表明。IPFS是點對點協議InterPlanetary File System的簡稱,它是一個面向全球的、點對點的分佈式版本文件系統,試圖將全部具備相同文件系統的計算設備鏈接在一塊兒。html
近日,IFPS宣佈了一個將來web發展計劃,它用基於內容的地址替代基於域名的地址,也就是用戶尋找的不是某個地址而是儲存在某個地方的內容,不須要驗證發送者的身份,而只須要驗證內容的哈希,經過這樣可讓網頁的速度更快、更安全、更健壯、更持久。IPFS表示,IPFS將來將替代HTTP(以及其餘的許多東西)。git
Web的本意是去中心化,但它卻變得愈來愈中心化,今天愈來愈多的人依靠的是少數網站的服務。HTTP變成了一個脆弱的、高度集中的、無效的、過分依賴於骨幹網的協議。像美國國家安全局這樣的組織,如今只須要在幾個點上攔截通訊來進行監視。對政府來講,阻止網站訪問這些高度集中化的資源變得容易。這也使通訊容易遭受DDoS攻擊而面臨巨大的風險。github
將web進行去中性化,能夠下降極少數強大組織的延展性,並提升全部站點的自由度和獨立性,同時也下降了因爲服務器中斷形成數據丟失的風險。web
若是不是成規模的處理數據,將這些數據從中央數據中心分發仍然是很是昂貴的。IPFS可代替老是從數據中心獲取內容的HTTP,若是將一個ISP網絡上的每一臺計算機變成流媒體CDN,這時會怎麼樣?例如,獲取江南Style視頻,就能夠徹底在ISP網絡上下載,而不須要在Internet骨幹網上通過大量的傳輸,從而大大減小數據傳輸的費用。數據庫
當內容過分集中化以後,這讓數據中心高度依賴於Internet骨幹網。這樣除了有利於政府對內容進行封鎖和審查,事實上存在不少可靠性問題。即便容許冗餘,主要的骨幹有時仍是會被損壞,或者出現路由表失控,其後果多是很是嚴重。Internet骨幹網並不健全,其很容易被攻擊,同時一些重要的光纖線路被切斷時服務很容易遭受影響。瀏覽器
IPFS從根本上改變了用戶搜索的方式。經過IPFS,用戶搜索的是內容。經過HTTP瀏覽器搜索文件的時候,首先找到服務器的位置(IP地址),而後使用路徑名稱在服務器上查找文件。按照這個設計,只有文件全部者能夠判斷這是不是用戶要找的文件。此時,必須保證託管者不會經過移除文件或者關閉服務器而對文件作任何更改。安全
當文件被添加到IPFS節點上,它獲得一個新的名字。這個名字其實是一個加密哈希,它是從文件內容中被計算出來。經過加密保證該哈希始終只表示該文件的內容。哪怕只在文件中修改一個比特的數據,哈希都會徹底不一樣。服務器
當下一步向IPFS分佈式網絡詢問哈希的時候,它經過使用一個分佈式哈希表,能夠快速(在一個擁有10,000,000個節點的網絡中只須要20跳)地找到擁有數據的節點,從而檢索該數據,並使用哈希驗證這是不是正確的數據。網絡
IPFS是通用的,而且存儲限制不多。它服務的文件可大可小,對於一些大的文件,它會自動將其切割爲一些小塊,使IPFS節點不只僅能夠像HTTP同樣從一臺服務器上下載文件,並且能夠從數百臺服務器上進行同步下載。IPFS網絡是一個細粒度的、不可靠的、分佈式的、易聯合的內容分發網絡(Content Delivery Network , CDN)。對於全部數據類型都是頗有用的,包括圖像、視頻流、分佈式數據庫、操做系統、blockchains等,而對於IPFS來講,最重要的是靜態web網站。分佈式
IPFS文件也能夠是特殊的IPFS目錄對象,它容許用戶使用人類可讀的文件名,透明地連接到其餘IPFS哈希。用戶能夠經過默認方式加載目錄中的index.html,這也是標準的HTTP服務器採用的方式。使用目錄對象,IPFS可容許用戶採用徹底相同的方式生成靜態網站。將web網站添加到IPFS節點中只須要一個簡單的命令:ipfs add -r yoursitedirectory
。在此以後,用戶能夠從任何IPFS節點訪問,而不須要連接到HTML上的任何哈希。
IPFS不須要每一個節點存儲全部發布到IPFS上的內容。相反,每一個節點只存儲本身想要的數據。若是每一個節點託管一點數據,全部數據經過累積就提供了比任何集中式HTTP更多的空間、帶寬和可用性。分佈式網絡將很快成爲世界上最快、最可用、以及最大的數據存儲。沒有人有能力關閉全部的節點,因此數據永遠不會丟失。
從其餘IPFS節點複製、存儲web網站很容易。它只須要一條命令以及網站的哈希值:ipfs pin add -r QmcKi2ae3uGb1kBg1yBpsuwoVqfmcByNdMiZ2pukxyLWD8
。IPFS負責剩下的全部工做。
IPFS哈希表明不可變的數據,這意味着它們是不能被更改的,不然會致使哈希值的變動。這是一件好事,由於它鼓勵數據的持久性,但咱們仍然須要一種方法來找到最新的IPFS哈希以表示你的網站。IPFS經過一種特殊的功能來實現,即IPNS。
IPNS容許用戶使用一個私有密鑰來對IPFS哈希附加一個引用,使用一個公共密鑰哈希(簡稱pubkeyhash)表示你的網站的最新版本。若是用戶使用過比特幣,可能會對此比較熟悉,一個比特幣地址也是一個pubkeyhash。
若是該連接不起做用,不用擔憂。可以經過更改pubkeyhash所指向的內容,而pubkeyhash卻永遠保持不變。這樣,網站的更新問題就獲得瞭解決。
接下來,只須要保證這些網站的位置是人類可讀的,全部問題就解決了。
IPFS/ IPNS哈希是一些很大的、難看的字符串,並且不容易記住。因此IPFS容許用戶使用現有的域名系統(Domain Name System, DNS)來爲IPFS/IPNS內容提供人類可讀的連接。它容許用戶經過在域名服務器上將哈希插入TXT記錄來實現這一點(若是你方便使用一個命令行,運行以下命令:dig TXT ipfs.git.sexy
)。具體能夠參考這裏。
將來,IPFS已計劃支持Namecoin,它理論上能夠用來建立一個徹底去中心化的、分佈式的web,整個環境中不須要一箇中心控制。沒有ICANN,沒有中央服務器,沒有「權威」證書,也沒有瓶頸。這聽起來很瘋狂。可現實的確瘋狂。由於使用今天的技術這是徹底能夠實現的!
經過一個HTTP網關,IPFS能夠實現從HTTP到IPFS的過分,瀏覽器能夠徹底實現IPFS以前,如今已經容許當前的web瀏覽器訪問IPFS。用戶很快就能夠切換到IPFS,完成web網站的存儲、分發和服務。
到目前爲止,IPFS還處於實驗階段。當網站更新的時候,Neocities將天天發佈一個哈希IPFS。這個哈希將指向該網站的最新版本,並經過IPFS HTTP網關能夠訪問。由於每次更新IPFS哈希都會變動,這也可以爲全部網站提供一個存檔歷史記錄。
從長期來看,若是一切順利的話,Neocities但願使用IPFS存儲全部的網站,併爲每一個網站發佈IPNS鍵。這將讓用戶能夠不依賴於Neocities而進行內容發佈。若是構建得當,即便Neocities不存在了,用戶仍然能夠更新本身的網站。經過有效地去除網站對Neocities中央服務器的依賴,這種集中控制環境將被永久性打破。
經過與協議實驗室(Protocol Labs)合做,Neocities已經成爲產業界實施IPFS第一大網站。從9月8日開始,全部Neocities站點能夠爲世界上任何IPFS節點提供查看、存檔和託管功能。當一個IPFS節點選擇從Neocities上託管一個網站的時候,即便Neocities關閉了或中止對它託管,網站的原始版本仍繼續可用。使用Neocities網站的IPFS節點越多,Neocities網站越容易訪問。
目前,IPFS仍處於alpha開發階段。它尚未取代現有的網站存儲系統。如同任何複雜的新技術,它還存在不少須要的改進地方。但IPFS不是霧件,如今已經能夠開始工做,感興趣的用戶能夠下載軟件安裝到電腦上。