logo

IPFS 深入淺出:從《黑鏡》說起

瀏覽數

99+

元旦期間,《黑鏡:潘達斯奈基》的互動式劇情唬住了不少人。

可在自小玩遊戲的營長看來,這個互動式劇情卻不是什麼新鮮玩意,十年前的《質量效應》遊戲早就把它玩膩了,而遊戲劇情的最終結局卻是虎頭蛇尾,可有可無。

所以,遍歷312分鐘全部支線劇情的苦活,營長沒心思去做,除了那個藏在深處的遊戲彩蛋:

但有不少人為了參與這場劇情互動,千辛萬苦弄來Netflix 賬號,忍受著上千的延遲和掉幀來接收Netflix 服務器上傳來的流媒體視頻。

這個技術現象倒是激起了營長的興趣,一查Netflix 的CDN 資料,果然,離我們最近的服務器都位於香港:

不是營長挑剔,現在回想一下,我們可能確實被這些中心化的互聯網服務慣壞了——毫秒級的網頁加載,點擊就能看到;零延遲的視頻、遊戲,不能有一絲卡頓;同時,畫質不是1080p 或4K 以上,你都不好意思說自己用的是高清……

為了用戶看視頻的體驗爽,Netflix 不得不反复造輪子,把用戶們要看的視頻存儲到離他們最近的CDN 服務器上,僅在美國就部署了數百個這樣的視頻庫。

儘管想盡辦法省錢,視頻流媒體這樣的生意還是太燒錢了。

前不久,全球最大的CDN 服務商找到了一個新辦法,整合去中心化的IPFS,一種基於區塊鏈分佈式存儲技術:

IPFS 是什麼?

IPFS 的創造者是Juan Benet,他同時也是Protocol Lab 的創始人。Protocol Lab 是一個技術研究和開發實驗室,直接負責IPFS 的研發,同時也開發了Filecoin 和IPLD 等。Juan Benet 在斯坦福大學學習計算機科學,對任何與知識、科學和技術有關的東西都非常著迷。

Juan Benet 最初並不是想創建IPFS,他希望找到一種高效的方法來移動科學數據集,這意味著數據的大小可以達到10-100 GB 以上。IPFS 的設計看起來像Git 和BitTorrent 的合體。Bittorrent 提供了在網絡上快速移動大文件的能力,Git 為數據提供內置的版本控制。     

在創建了這個協議之後,Juan Benet 很快意識到,IPFS 的作用遠遠超過了移動大型數據集。他實際上創建了一個協議,可以取代其他流行的協議,來通過網絡訪問信息。

當命名IPFS 這個名字的時候,他們的想法是向互聯網的命名致敬。Jcr Licklider 是Arpanet (互聯網的前身)的創造者,他的目標就是創造一個星際網絡。因此,互聯網實際上是星際網絡的簡稱。Interplanetary 也會消耗一些同樣的命名原則,另外,IPFS 旨在成為互聯網協議(IP)的文件系統(FS)。當把它們放在一起的時候,就有了IPFS,一個互聯網文件系統。

網絡文件訪問基礎

了解IPFS,要先從了解如何從網絡訪問文件開始。

當要從互聯網上下載一個圖像的時候,要告訴電腦準確地找到你所請求的圖像。這個位置通常採用URL 的形式,其中包含存儲照片的公司域名,後面跟著一個擴展名,指定文件是什麼。這篇博客文章的請求示例如下: https:// achainofblocks.com/ipfs-simple-guide.jpg。這種訪問資源的方法稱為"基於位置的尋址",即告訴計算機可以訪問信息的位置,然後計算機檢索信息。這種方法的一個問題是,如果位置不可訪問(可能服務器處於脫機狀態) ,那麼用戶的計算機就無法檢索到他們需要的信息。

為了解決這個問題,IPFS 引入了"基於內容的尋址"的概念。使用基於內容的尋址在請求特定資源時不需要指定資源的位置,只需指定所需的內容。

每個文件都有一個唯一的哈希值,可以認為是文件的指紋或身份。當想要訪問一個特定的文件時,用戶只需要向網絡詢問誰有一個帶有指定散列的文件副本。一旦發出請求,IPFS 網絡上的某個人將提供您所請求的資源。下載該資源,一個副本將被保存到您的IPFS 緩存中。現在,當另一個人來請求相同的文件,您就能夠提供這個文件副本給他們。這將創建一個速度更快的系統,因為共享的文件越多,在大量節點組中可用的文件就越多。

IPFS的工作原理

現在,已經了解了IPFS 與當今傳統方法對比的基礎知識,可以更深入地了解IPFS 是如何存儲數據並使用戶能夠訪問數據的了。

在IPFS 中,文件存儲在IPFS 對像中,每個對象可以存儲256 kb 的數據。一個對像也可以包含一個鏈接到另一個IPFS 的對象,鏈接使得存儲大於256 kb 的數據成為可能。例如,如果您只上傳一個小的文本文件,那麼一個256kb 的對象應該足以滿足您的需求。

但是,如果存儲一張圖片,則會將其分解為多個對象,每個對象的最大值為256 kb。然後,IPFS 系統將創建一個空對象,該對象將鏈接到組成該圖片的所有對象。

這個體系結構非常簡單,但它非常強大,真正使IPFS 作為文件系統使用。瀏覽下面簡單的文件目錄結構,進而解釋如何將其轉換為IPFS 結構:

可以通過為每個文件和每個文件夾/ 目錄創建1個對象,然後將文件鏈接到指定的目錄來轉換為IPFS。但是,如果考慮到IPFS 使用基於內容的尋址這一事實,情況就更好了。這意味著添加的文件是不可變的,它們永遠不能被改變,就像區塊鏈一樣。這意味著用戶可以確定正在訪問的資源是正確的數據,並且從未被更改過。

IPFS 中的數據更新

IPFS支持文件的版本化,這與Git 的開源代碼倉庫類似。例如,您正在處理一個名為"Important Document-v1.doc" 的文本文件,並希望使用IFPS 與人們共享該文檔。當您將這個文件添加到IPFS 時,幕後發生的是,IPFS 將創建一個新的Commit 對象。這個對像是非常基本的,它所做的只是告訴IPFS 哪個提交在這個提交之前,它鏈接到與文件"Important Document-v1.doc" 相關聯的IPFS 對象。

現在想像一下,一段時間過去了,你的"Important Document.doc" 需要修改。通過簡單地將新文件添加到"Important Document-v2.doc",IPFS 將為更新的文件創建一個新的Commit Object (與原始過程相同)。這個提交對象現在鏈接到先前的提交對象,第一個提交作為父對象。這個過程可以無休止地重複,創建一個相同數據的鏈接版本鏈,所有這些數據都引用整個鏈。IPFS 確保網絡上所有其他節點都可以訪問你的文件以及整個文件版本控制歷史記錄。

到目前為止,我們已經討論了IPFS 的許多有用特性和關鍵概念。然而,所有的協議都有局限性和缺陷。可以想像,IPFS 當前面臨的最大問題是保持文件可用。網絡上的每個節點都會保存他們下載的文件的緩存,並在其他用戶需要的時候幫助他們提供這些文件。但是,在一種簡單的情況下,如果一個文檔由4 個節點承載,並且它們都處於離線狀態,則該文檔不能被訪問。

有幾種方法可以解決上述問題。一種方法是鼓勵節點保持在線狀態,並保持文件對社區開放。對用戶可以提交給網絡的存儲空間進行獎勵,這將確保文件在需要時具有很高的可用性。另一種方法是在整個網絡中主動分發文件,確保在任何給定的時間總是有足夠的副本在線。你可以把這看作是大規模的冗餘。

FileCoin

這個問題正是Filecoin 想要解決的問題。Filecoin 是由創建IPFS 的同一團隊創建的,是一個區塊鏈,它建立在IPFS 之上,目標是創建一個去中心化的存儲市場。這意味著那些硬盤上有額外存儲空間的用戶可以把它租出去作為IPFS 存儲空間,並在這個過程中從中獲利。你可以把Filecoin 想像成一個類似於Airbnb 的服務——不是出租房子裡可用的空間,而是出租電腦裡可用的存儲空間。Filecoin 為節點創建了一個保持數據在線並儘可能長時間保留的激勵機制。除了保持節點在線的激勵之外,它還通過許多節點複製數據,從而使數據高可用且易於訪問(即使少數節點處於離線狀態)。和IPFS 有著相同的目標,那就是離線優先,這意味著他們一直在努力創造更好的體驗,而不需要通過調用服務器來訪問資源。

這是一個Filecoin 的高度快速總結,可以在以後的文章中和來自Protocol labs 的其他項目一起深入地探討Filecoin。

總結

可以看出,IPFS 是一個雄心勃勃的項目。早期的項目集中在去中心化,主要是貨幣和金融方面。IPFS 的真正目的是構建一種更好的數據共享方式,以面對以前HTTP 曾經遇到過挑戰。然而,IPFS 顯然是最成熟的,並被視為一個在未來幾年內可能得到大規模採用的系統。絕不是在暗示HTTP 正在消失,Juan Benet 自己也承認HTTP 是一個很棒的協議,仍然非常有用。畢竟,HTTP 是一個超過25 年的協議,隨著IPFS 的採用持續增長,使用場景將隨著技術的發展而壯大。在IPFS 最終接管之前,我們很可能會出現同時使用兩種協議的情況,這非常類似於我們今天仍然使用FTP 的某些能力。