基於內容定址的分散式儲存系統IPFS,你怎麼看?

儲存頻道發表於2019-02-25

   在傳統的Web中,使用者資料儲存在自己能夠完全控制的集中式儲存伺服器上。這種控制能力,為他們提供了在使用者不知情或未經使用者同意的情況下可能會濫用的高階特特權。此外,集中儲存可能存在可用性問題,尤其是如果資料僅儲存在一個位置時,會因此產生單點故障。

   Web上的檔案儲存

  web使用基於位置的定址來儲存和檢索檔案。假設我們想從域名abc.com訪問一張關於貓的圖片cat.png。我們會先透過Web瀏覽器訪問這個位置(如abc.com/cat.png),然後,我們將得到貓的圖片。但是,如果由於某種原因,檔案已經從abc伺服器上刪除,我們就無法再訪問該圖片。現在有一種可能性是,網上的其他人也有這隻貓的照片,但是我們無法聯絡到他們,也無法獲取這隻貓的照片。網際網路上的許多檔案都可能具有相同的名稱,但內容可能不同。

   IPFS解決方案

  IPFS是一種用於檔案儲存的對等網路協議,採用的是基於內容的定址,而非基於位置。這意味著要查詢檔案,我們不需要知道它在哪裡(abc.com/cat.png),而是它包含的內容(QmSNssW5a9S3KVRCYMemjsTByrNNrtXFnxNYLfmDr9Vaan)——由內容的雜湊進行表示。

  雜湊函式為每個檔案建立唯一的“指紋”。因此,如果我們想要檢索一個檔案,只需詢問網路“誰擁有這個檔案(QmSNssW5a9S3KV…)”,然後來自IPFS網路的某個擁有該檔案的人將提供給我們。我們可以透過將請求的雜湊值與接收到的雜湊值進行比較來驗證檔案的完整性,如果雜湊值匹配,則可知該檔案沒有被更改。這個雜湊函式還可以幫助消除網路的重複,這樣具有相同內容的檔案就無需提交兩次,因為相同的內容會產生相同的雜湊。這最佳化了儲存需求,也提高了網路的效能。

   IPFS如何儲存檔案

  檔案儲存被為IPFS物件,後者是一種資料結構,包括:

   · 資料(Data )——一個二進位制大物件(BLOB),可以儲存高達256 KB。

   · 連結(Links)——連結IPFS物件的一個陣列。

  如果我們的檔案大於256 KB,那麼它將被拆分並儲存在多個IPFS物件中,然後建立一個空物件,連結檔案的所有其他物件。如下圖所示:

IPFS資料物件

  IPFS作為一種不可變的儲存方式工作,一旦某個東西被新增到網路中,它就不能被更改,因為更改檔案將更改雜湊。那麼我們如何更新檔案呢?為此,IPFS使用了版本控制系統,該系統特別是在開源社群中被廣泛使用,被稱為Git。IPFS具有“提交物件”,這有助於跟蹤檔案建立以來的所有版本。每當我們在IPFS網路上新增一個檔案時,都會為該檔案建立一個提交物件,當我們更新該檔案時,會建立一個新的提交物件,該物件指向該檔案的舊提交物件,如下圖所示:

IPFS提交物件

   我的檔案永遠存在於網路上嗎?

  只有重要的檔案儲存在網路上,不重要的檔案會被垃圾回收器刪除,其中檔案的重要性由“Pinning”決定。透過Pinning一個檔案,我們將該檔案標記為一個重要的檔案,這樣不重要的檔案只會被作為臨時快取,而該檔案將持續存在。

   IPFS的問題

  現在,我們需要講講IPFS的相關挑戰。IPFS最大的問題之一是保持檔案可用,IPFS具備永續性,但無法保證持續性。也就是說,如果Alice上傳了一個檔案,讓Bob來訪問該檔案;當Alice離線時,在垃圾收集器沒有刪除它時,Bob才可能繼續訪問它。另一方面,如果Bob已經Pinning了該檔案,那麼即使Alice的節點離線了,它也仍然可以訪問。因此,Pinning是一個主要問題。目前有許多的公共Pinning服務,獲得持續性是要付出一定代價的。

  另一個限制是檔案的實際共享。你必須透過傳統的通訊機制(例如即時訊息、電子郵件、Skype、Slack等)與網路上的其他人共享檔案連結(內容地址)。這意味著檔案共享沒有內建到系統中。現在有人已經開發出了網路爬蟲和搜尋引擎,但真正解決這個問題可能還需要一段時間。

  原文作者:Usman Fazil 來源:Medium


來自 “ Medium ”,原文連結:http://blog.itpub.net/31545805/viewspace-2636951/,如需轉載,請註明出處,否則將追究法律責任。

相關文章