IPFS:替代HTTP的分布式網(wǎng)絡(luò)協(xié)議
今年年初,Internet Archive開始倡導(dǎo)分布式網(wǎng)絡(luò)?,F(xiàn)在關(guān)于它的聲音已經(jīng)變得越來越清晰而又響亮。而IPFS就是在這種環(huán)境下出現(xiàn)的一個(gè)典型的開源代表。IPFS是點(diǎn)對點(diǎn)協(xié)議InterPlanetary File System的簡稱,它是一個(gè)面向全球的、點(diǎn)對點(diǎn)的分布式版本文件系統(tǒng),試圖將所有具有相同文件系統(tǒng)的計(jì)算設(shè)備連接在一起。
近日,IFPS宣布了一個(gè)未來web發(fā)展計(jì)劃,它用基于內(nèi)容的地址替代基于域名的地址,也就是用戶尋找的不是某個(gè)地址而是儲存在某個(gè)地方的內(nèi)容,不需要驗(yàn)證發(fā)送者的身份,而只需要驗(yàn)證內(nèi)容的哈希,通過這樣可以讓網(wǎng)頁的速度更快、更安全、更健壯、更持久。IPFS表示,IPFS未來將替代HTTP(以及其他的許多東西)。
一、HTTP存在很多問題
HTTP鼓勵(lì)高度集中化
Web的本意是去中心化,但它卻變得越來越中心化,今天越來越多的人依靠的是少數(shù)網(wǎng)站的服務(wù)。HTTP變成了一個(gè)脆弱的、高度集中的、無效的、過度依賴于骨干網(wǎng)的協(xié)議。像美國國家安全局這樣的組織,現(xiàn)在只需要在幾個(gè)點(diǎn)上攔截通信來進(jìn)行監(jiān)視。對政府來說,阻止網(wǎng)站訪問這些高度集中化的資源變得容易。這也使通信容易遭受DDoS攻擊而面臨巨大的風(fēng)險(xiǎn)。
將web進(jìn)行去中性化,可以降低極少數(shù)強(qiáng)大組織的延展性,并提高所有站點(diǎn)的自由度和獨(dú)立性,同時(shí)也降低了由于服務(wù)器中斷造成數(shù)據(jù)丟失的風(fēng)險(xiǎn)。
HTTP是低效的
如果不是成規(guī)模的處理數(shù)據(jù),將這些數(shù)據(jù)從中央數(shù)據(jù)中心分發(fā)仍然是非常昂貴的。IPFS可代替總是從數(shù)據(jù)中心獲取內(nèi)容的HTTP,如果將一個(gè)ISP網(wǎng)絡(luò)上的每一臺計(jì)算機(jī)變成流媒體CDN,這時(shí)會怎么樣?例如,獲取江南Style視頻,就可以完全在ISP網(wǎng)絡(luò)上下載,而不需要在Internet骨干網(wǎng)上經(jīng)過大量的傳輸,從而大大減少數(shù)據(jù)傳輸?shù)馁M(fèi)用。
HTTP過度依賴于Internet主干網(wǎng)
當(dāng)內(nèi)容過度集中化之后,這讓數(shù)據(jù)中心高度依賴于Internet骨干網(wǎng)。這樣除了有利于政府對內(nèi)容進(jìn)行封鎖和審查,事實(shí)上存在很多可靠性問題。即使允許冗余,主要的骨干有時(shí)還是會被損壞,或者出現(xiàn)路由表失控,其后果可能是非常嚴(yán)重。Internet骨干網(wǎng)并不健全,其很容易被攻擊,同時(shí)一些重要的光纖線路被切斷時(shí)服務(wù)很容易遭受影響。
二、IPFS如何解決了這些問題
IPFS從根本上改變了用戶搜索的方式。通過IPFS,用戶搜索的是內(nèi)容。通過HTTP瀏覽器搜索文件的時(shí)候,首先找到服務(wù)器的位置(IP地址),然后使用路徑名稱在服務(wù)器上查找文件。按照這個(gè)設(shè)計(jì),只有文件所有者可以判斷這是否是用戶要找的文件。此時(shí),必須保證托管者不會通過移除文件或者關(guān)閉服務(wù)器而對文件做任何更改。
當(dāng)文件被添加到IPFS節(jié)點(diǎn)上,它得到一個(gè)新的名字。這個(gè)名字實(shí)際上是一個(gè)加密哈希,它是從文件內(nèi)容中被計(jì)算出來。通過加密保證該哈希始終只表示該文件的內(nèi)容。哪怕只在文件中修改一個(gè)比特的數(shù)據(jù),哈希都會完全不同。
當(dāng)下一步向IPFS分布式網(wǎng)絡(luò)詢問哈希的時(shí)候,它通過使用一個(gè)分布式哈希表,可以快速(在一個(gè)擁有10,000,000個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)中只需要20跳)地找到擁有數(shù)據(jù)的節(jié)點(diǎn),從而檢索該數(shù)據(jù),并使用哈希驗(yàn)證這是否是正確的數(shù)據(jù)。
IPFS是通用的,并且存儲限制很少。它服務(wù)的文件可大可小,對于一些大的文件,它會自動將其切割為一些小塊,使IPFS節(jié)點(diǎn)不僅僅可以像HTTP一樣從一臺服務(wù)器上下載文件,而且可以從數(shù)百臺服務(wù)器上進(jìn)行同步下載。IPFS網(wǎng)絡(luò)是一個(gè)細(xì)粒度的、不可靠的、分布式的、易聯(lián)合的內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Delivery Network , CDN)。對于所有數(shù)據(jù)類型都是很有用的,包括圖像、視頻流、分布式數(shù)據(jù)庫、操作系統(tǒng)、blockchains等,而對于IPFS來說,最重要的是靜態(tài)web網(wǎng)站。
IPFS文件也可以是特殊的IPFS目錄對象,它允許用戶使用人類可讀的文件名,透明地鏈接到其他IPFS哈希。用戶可以通過默認(rèn)方式加載目錄中的index.html,這也是標(biāo)準(zhǔn)的HTTP服務(wù)器采用的方式。使用目錄對象,IPFS可允許用戶采用完全相同的方式生成靜態(tài)網(wǎng)站。將web網(wǎng)站添加到IPFS節(jié)點(diǎn)中只需要一個(gè)簡單的命令:ipfs add -r yoursitedirectory。在此之后,用戶可以從任何IPFS節(jié)點(diǎn)訪問,而不需要鏈接到HTML上的任何哈希。
與IPFS建立聯(lián)盟的數(shù)據(jù)
IPFS不需要每個(gè)節(jié)點(diǎn)存儲所有發(fā)布到IPFS上的內(nèi)容。相反,每個(gè)節(jié)點(diǎn)只存儲自己想要的數(shù)據(jù)。如果每個(gè)節(jié)點(diǎn)托管一點(diǎn)數(shù)據(jù),所有數(shù)據(jù)通過累積就提供了比任何集中式HTTP更多的空間、帶寬和可用性。分布式網(wǎng)絡(luò)將很快成為世界上最快、最可用、以及最大的數(shù)據(jù)存儲。沒有人有能力關(guān)閉所有的節(jié)點(diǎn),所以數(shù)據(jù)永遠(yuǎn)不會丟失。
從其他IPFS節(jié)點(diǎn)復(fù)制、存儲web網(wǎng)站很容易。它只需要一條命令以及網(wǎng)站的哈希值:ipfs pin add -r QmcKi2ae3uGb1kBg1yBpsuwoVqfmcByNdMiZ2pukxyLWD8。IPFS負(fù)責(zé)剩下的所有工作。
IPNS
IPFS哈希代表不可變的數(shù)據(jù),這意味著它們是不能被更改的,否則會導(dǎo)致哈希值的變更。這是一件好事,因?yàn)樗膭?lì)數(shù)據(jù)的持久性,但我們?nèi)匀恍枰环N方法來找到最新的IPFS哈希以表示你的網(wǎng)站。IPFS通過一種特殊的功能來實(shí)現(xiàn),即IPNS。
IPNS允許用戶使用一個(gè)私有密鑰來對IPFS哈希附加一個(gè)引用,使用一個(gè)公共密鑰哈希(簡稱pubkeyhash)表示你的網(wǎng)站的最新版本。如果用戶使用過比特幣,可能會對此比較熟悉,一個(gè)比特幣地址也是一個(gè)pubkeyhash。
如果該鏈接不起作用,不用擔(dān)心。能夠通過更改pubkeyhash所指向的內(nèi)容,而pubkeyhash卻永遠(yuǎn)保持不變。這樣,網(wǎng)站的更新問題就得到了解決。
接下來,只需要保證這些網(wǎng)站的位置是人類可讀的,所有問題就解決了。
人類可讀的可變地址
IPFS/ IPNS哈希是一些很大的、難看的字符串,而且不容易記住。所以IPFS允許用戶使用現(xiàn)有的域名系統(tǒng)(Domain Name System, DNS)來為IPFS/IPNS內(nèi)容提供人類可讀的鏈接。它允許用戶通過在域名服務(wù)器上將哈希插入TXT記錄來實(shí)現(xiàn)這一點(diǎn)(如果你方便使用一個(gè)命令行,運(yùn)行如下命令:dig TXT ipfs.git.sexy)。具體可以參考這里。
未來,IPFS已計(jì)劃支持Namecoin,它理論上可以用來創(chuàng)建一個(gè)完全去中心化的、分布式的web,整個(gè)環(huán)境中不需要一個(gè)中心控制。沒有ICANN,沒有中央服務(wù)器,沒有“權(quán)威”證書,也沒有瓶頸。這聽起來很瘋狂??涩F(xiàn)實(shí)的確瘋狂。因?yàn)槭褂媒裉斓募夹g(shù)這是完全可以實(shí)現(xiàn)的!
IPFS HTTP網(wǎng)關(guān):新舊網(wǎng)絡(luò)之間的橋梁
通過一個(gè)HTTP網(wǎng)關(guān),IPFS可以實(shí)現(xiàn)從HTTP到IPFS的過度,瀏覽器可以完全實(shí)現(xiàn)IPFS之前,現(xiàn)在已經(jīng)允許當(dāng)前的web瀏覽器訪問IPFS。用戶很快就可以切換到IPFS,完成web網(wǎng)站的存儲、分發(fā)和服務(wù)。
到目前為止,IPFS還處于實(shí)驗(yàn)階段。當(dāng)網(wǎng)站更新的時(shí)候,Neocities將每天發(fā)布一個(gè)哈希IPFS。這個(gè)哈希將指向該網(wǎng)站的最新版本,并通過IPFS HTTP網(wǎng)關(guān)可以訪問。因?yàn)槊看胃翴PFS哈希都會變更,這也能夠?yàn)樗芯W(wǎng)站提供一個(gè)存檔歷史記錄。
從長期來看,如果一切順利的話,Neocities希望使用IPFS存儲所有的網(wǎng)站,并為每個(gè)網(wǎng)站發(fā)布IPNS鍵。這將讓用戶可以不依賴于Neocities而進(jìn)行內(nèi)容發(fā)布。如果構(gòu)建得當(dāng),即使Neocities不存在了,用戶仍然可以更新自己的網(wǎng)站。通過有效地去除網(wǎng)站對Neocities中央服務(wù)器的依賴,這種集中控制環(huán)境將被永久性打破。
IPFS真正能夠替代HTTP可能還需要一段時(shí)間,而且也有很多工作要做。
通過與協(xié)議實(shí)驗(yàn)室(Protocol Labs)合作,Neocities已經(jīng)成為產(chǎn)業(yè)界實(shí)施IPFS第一大網(wǎng)站。從9月8日開始,所有Neocities站點(diǎn)可以為世界上任何IPFS節(jié)點(diǎn)提供查看、存檔和托管功能。當(dāng)一個(gè)IPFS節(jié)點(diǎn)選擇從Neocities上托管一個(gè)網(wǎng)站的時(shí)候,即使Neocities關(guān)閉了或停止對它托管,網(wǎng)站的原始版本仍繼續(xù)可用。使用Neocities網(wǎng)站的IPFS節(jié)點(diǎn)越多,Neocities網(wǎng)站越容易訪問。
目前,IPFS仍處于alpha開發(fā)階段。它還沒有取代現(xiàn)有的網(wǎng)站存儲系統(tǒng)。如同任何復(fù)雜的新技術(shù),它還存在很多需要的改進(jìn)地方。但I(xiàn)PFS不是霧件,現(xiàn)在已經(jīng)可以開始工作,感興趣的用戶可以下載軟件安裝到電腦上。