在傳統(tǒng)的Web中,用戶數(shù)據(jù)存儲在自己能夠完全控制的集中式存儲服務(wù)器上。這種控制能力,為他們提供了在用戶不知情或未經(jīng)用戶同意的情況下可能會濫用的高級特特權(quán)。此外,集中存儲可能存在可用性問題,尤其是如果數(shù)據(jù)僅存儲在一個位置時(shí),會因此產(chǎn)生單點(diǎn)故障。
Web上的文件存儲
web使用基于位置的尋址來存儲和檢索文件。假設(shè)我們想從域名abc.com訪問一張關(guān)于貓的圖片cat.png。我們會先通過Web瀏覽器訪問這個位置(如abc.com/cat.png),然后,我們將得到貓的圖片。但是,如果由于某種原因,文件已經(jīng)從abc服務(wù)器上刪除,我們就無法再訪問該圖片?,F(xiàn)在有一種可能性是,網(wǎng)上的其他人也有這只貓的照片,但是我們無法聯(lián)系到他們,也無法獲取這只貓的照片?;ヂ?lián)網(wǎng)上的許多文件都可能具有相同的名稱,但內(nèi)容可能不同。
IPFS解決方案
IPFS是一種用于文件存儲的對等網(wǎng)絡(luò)協(xié)議,采用的是基于內(nèi)容的尋址,而非基于位置。這意味著要查找文件,我們不需要知道它在哪里(abc.com/cat.png),而是它包含的內(nèi)容(QmSNssW5a9S3KVRCYMemjsTByrNNrtXFnxNYLfmDr9Vaan)——由內(nèi)容的哈希進(jìn)行表示。
哈希函數(shù)為每個文件創(chuàng)建唯一的“指紋”。因此,如果我們想要檢索一個文件,只需詢問網(wǎng)絡(luò)“誰擁有這個文件(QmSNssW5a9S3KV…)”,然后來自IPFS網(wǎng)絡(luò)的某個擁有該文件的人將提供給我們。我們可以通過將請求的哈希值與接收到的哈希值進(jìn)行比較來驗(yàn)證文件的完整性,如果哈希值匹配,則可知該文件沒有被更改。這個哈希函數(shù)還可以幫助消除網(wǎng)絡(luò)的重復(fù),這樣具有相同內(nèi)容的文件就無需提交兩次,因?yàn)橄嗤膬?nèi)容會產(chǎn)生相同的哈希。這優(yōu)化了存儲需求,也提高了網(wǎng)絡(luò)的性能。
IPFS如何存儲文件
文件存儲被為IPFS對象,后者是一種數(shù)據(jù)結(jié)構(gòu),包括:
·數(shù)據(jù)(Data )——一個二進(jìn)制大對象(BLOB),可以存儲高達(dá)256 KB。
·鏈接(Links)——鏈接IPFS對象的一個數(shù)組。
如果我們的文件大于256 KB,那么它將被拆分并存儲在多個IPFS對象中,然后創(chuàng)建一個空對象,鏈接文件的所有其他對象。如下圖所示:
IPFS數(shù)據(jù)對象
IPFS作為一種不可變的存儲方式工作,一旦某個東西被添加到網(wǎng)絡(luò)中,它就不能被更改,因?yàn)楦奈募⒏墓?。那么我們?nèi)绾胃挛募?為此,IPFS使用了版本控制系統(tǒng),該系統(tǒng)特別是在開源社區(qū)中被廣泛使用,被稱為Git。IPFS具有“提交對象”,這有助于跟蹤文件創(chuàng)建以來的所有版本。每當(dāng)我們在IPFS網(wǎng)絡(luò)上添加一個文件時(shí),都會為該文件創(chuàng)建一個提交對象,當(dāng)我們更新該文件時(shí),會創(chuàng)建一個新的提交對象,該對象指向該文件的舊提交對象,如下圖所示:
IPFS提交對象
我的文件永遠(yuǎn)存在于網(wǎng)絡(luò)上嗎?
只有重要的文件保存在網(wǎng)絡(luò)上,不重要的文件會被垃圾回收器刪除,其中文件的重要性由“Pinning”決定。通過Pinning一個文件,我們將該文件標(biāo)記為一個重要的文件,這樣不重要的文件只會被作為臨時(shí)緩存,而該文件將持續(xù)存在。
IPFS的問題
現(xiàn)在,我們需要講講IPFS的相關(guān)挑戰(zhàn)。IPFS最大的問題之一是保持文件可用,IPFS具備持久性,但無法保證持續(xù)性。也就是說,如果Alice上傳了一個文件,讓Bob來訪問該文件;當(dāng)Alice離線時(shí),在垃圾收集器沒有刪除它時(shí),Bob才可能繼續(xù)訪問它。另一方面,如果Bob已經(jīng)Pinning了該文件,那么即使Alice的節(jié)點(diǎn)離線了,它也仍然可以訪問。因此,Pinning是一個主要問題。目前有許多的公共Pinning服務(wù),獲得持續(xù)性是要付出一定代價(jià)的。
另一個限制是文件的實(shí)際共享。你必須通過傳統(tǒng)的通信機(jī)制(例如即時(shí)消息、電子郵件、Skype、Slack等)與網(wǎng)絡(luò)上的其他人共享文件鏈接(內(nèi)容地址)。這意味著文件共享沒有內(nèi)置到系統(tǒng)中?,F(xiàn)在有人已經(jīng)開發(fā)出了網(wǎng)絡(luò)爬蟲和搜索引擎,但真正解決這個問題可能還需要一段時(shí)間。
原文作者:Usman Fazil 來源:Medium