今年年初,Internet Archive開始倡導分布式網絡。現在關于它的聲音已經變得越來越清晰而又響亮。而IPFS就是在這種環境下出現的一個典型的開源代表。IPFS是點對點協議InterPlanetary File System的簡稱,它是一個面向全球的、點對點的分布式版本文件系統,試圖將所有具有相同文件系統的計算設備連接在一起。
近日,IFPS宣布了一個未來web發展計劃,它用基于內容的地址替代基于域名的地址,也就是用戶尋找的不是某個地址而是儲存在某個地方的內容,不需要驗證發送者的身份,而只需要驗證內容的哈希,通過這樣可以讓網頁的速度更快、更安全、更健壯、更持久。IPFS表示,IPFS未來將替代HTTP(以及其他的許多東西)。
一、HTTP存在很多問題
HTTP鼓勵高度集中化
Web的本意是去中心化,但它卻變得越來越中心化,今天越來越多的人依靠的是少數網站的服務。HTTP變成了一個脆弱的、高度集中的、無效的、過度依賴于骨干網的協議。像美國國家安全局這樣的組織,現在只需要在幾個點上攔截通信來進行監視。對政府來說,阻止網站訪問這些高度集中化的資源變得容易。這也使通信容易遭受DDoS攻擊而面臨巨大的風險。
將web進行去中性化,可以降低極少數強大組織的延展性,并提高所有站點的自由度和獨立性,同時也降低了由于服務器中斷造成數據丟失的風險。
HTTP是低效的
如果不是成規模的處理數據,將這些數據從中央數據中心分發仍然是非常昂貴的。IPFS可代替總是從數據中心獲取內容的HTTP,如果將一個ISP網絡上的每一臺計算機變成流媒體CDN,這時會怎么樣?例如,獲取江南Style視頻,就可以完全在ISP網絡上下載,而不需要在Internet骨干網上經過大量的傳輸,從而大大減少數據傳輸的費用。
HTTP過度依賴于Internet主干網
當內容過度集中化之后,這讓數據中心高度依賴于Internet骨干網。這樣除了有利于政府對內容進行封鎖和審查,事實上存在很多可靠性問題。即使允許冗余,主要的骨干有時還是會被損壞,或者出現路由表失控,其后果可能是非常嚴重。Internet骨干網并不健全,其很容易被攻擊,同時一些重要的光纖線路被切斷時服務很容易遭受影響。
二、IPFS如何解決了這些問題
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不需要每個節點存儲所有發布到IPFS上的內容。相反,每個節點只存儲自己想要的數據。如果每個節點托管一點數據,所有數據通過累積就提供了比任何集中式HTTP更多的空間、帶寬和可用性。分布式網絡將很快成為世界上最快、最可用、以及最大的數據存儲。沒有人有能力關閉所有的節點,所以數據永遠不會丟失。
從其他IPFS節點復制、存儲web網站很容易。它只需要一條命令以及網站的哈希值:ipfs pin add -r QmcKi2ae3uGb1kBg1yBpsuwoVqfmcByNdMiZ2pukxyLWD8。IPFS負責剩下的所有工作。
IPNS
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,沒有中央服務器,沒有“權威”證書,也沒有瓶頸。這聽起來很瘋狂。可現實的確瘋狂。因為使用今天的技術這是完全可以實現的!
IPFS HTTP網關:新舊網絡之間的橋梁
通過一個HTTP網關,IPFS可以實現從HTTP到IPFS的過度,瀏覽器可以完全實現IPFS之前,現在已經允許當前的web瀏覽器訪問IPFS。用戶很快就可以切換到IPFS,完成web網站的存儲、分發和服務。
到目前為止,IPFS還處于實驗階段。當網站更新的時候,Neocities將每天發布一個哈希IPFS。這個哈希將指向該網站的最新版本,并通過IPFS HTTP網關可以訪問。因為每次更新IPFS哈希都會變更,這也能夠為所有網站提供一個存檔歷史記錄。
從長期來看,如果一切順利的話,Neocities希望使用IPFS存儲所有的網站,并為每個網站發布IPNS鍵。這將讓用戶可以不依賴于Neocities而進行內容發布。如果構建得當,即使Neocities不存在了,用戶仍然可以更新自己的網站。通過有效地去除網站對Neocities中央服務器的依賴,這種集中控制環境將被永久性打破。
IPFS真正能夠替代HTTP可能還需要一段時間,而且也有很多工作要做。
通過與協議實驗室(Protocol Labs)合作,Neocities已經成為產業界實施IPFS第一大網站。從9月8日開始,所有Neocities站點可以為世界上任何IPFS節點提供查看、存檔和托管功能。當一個IPFS節點選擇從Neocities上托管一個網站的時候,即使Neocities關閉了或停止對它托管,網站的原始版本仍繼續可用。使用Neocities網站的IPFS節點越多,Neocities網站越容易訪問。
目前,IPFS仍處于alpha開發階段。它還沒有取代現有的網站存儲系統。如同任何復雜的新技術,它還存在很多需要的改進地方。但IPFS不是霧件,現在已經可以開始工作,感興趣的用戶可以下載軟件安裝到電腦上。