如果你對區塊鏈有興趣,你應該要了解 IPFS ,區塊鏈本身是一項去中心化的分散式資料庫系統,由於必須做到去中心化的程度,它本身僅是適合紀錄數字的簡單儲存系統,無法載入文件或是圖片。但區塊鏈技術若要成功商業化,則必須擁有更複雜的儲存系統,用來提供複雜程式、文件、圖片及影片的儲存功能,而 IPFS 能補足區塊鏈的儲存性能問題。
目前去中心化應用(DAPP)只有計算作為籌碼用的加密貨幣時才會動到區塊鏈,其餘網頁、文件以及程式碼仍然儲存在單一伺服器上,例如 AWS 、 GCP 這些平台,本質上仍是中心化的產品。
照理說 DAPP 不該仰賴中心化的儲存空間,一旦伺服器被關閉,所有的網頁內容也就跟著消失,無法滿足區塊鏈當初設計的初衷,為了補足區塊鏈當前的缺陷,「IPFS 星際檔案系統」(InterPlanetary File System) 被設計出來。
它能提供分散式的 P2P 網路儲存服務,每一個節點都掌握部份的分割檔案,一旦上傳成功,檔案將以「DAG 有向無環」的形式被紀錄在 Merkle Tree 上而且無法修改與刪除,每個檔案都有唯一的 HASH 值,允許使用者利用該唯一的 HASH 值訪問並下載檔案。
利用 IPFS 持久儲存檔案
IPFS 本身不是區塊鏈(Blockchain),也不是服務(Service),而是「協議(Protocol)」,性質上跟 BitTorrent 很像,是一項檔案儲存與分享系統,只要是有點網路年紀的人一定知道 BitTorent ,簡稱 BT 這項 P2P 服務,過去網路內容還不發達的時代,過去你可以透過 BT 找到所有想要的檔案,但你要先下載 BT 種子文件,然後讓電腦從別人的電腦下載目標檔案。
IPFS 則更為先進,只要使用者持有檔案的加密金鑰,是一連串的亂數值,該協議就能引導使用者在「IPFS 節點群」中搜尋到特定的檔案,而「IPFS 節點群」是由數個伺服器節點組成,每台伺服器各自儲存及備份了部份的檔案。
如果我在 IPFS 節點群存入一個影片,該影片會被分拆成多個分割檔案,並且標上一個 Hash 值標籤,以有向無環 DAG 樹狀圖的模式存在於 IPFS 地圖中,接著這些分割檔案模塊會被備份在兩個以上的伺服器中,即使其中一個節點被刪除也有其他節點進行備份供使用者取用及下載,藉此達到持久儲存的功能,很適合用來儲存一些「敏感且危險」的影片及文件。
當然由於採用 DAG 儲存檔案位址,每一個檔案都擁有唯一的 Hash 值,擋案上傳後便無法修改或刪除,後續的檔案更新則可以透過 IPNS 的命名功能把原有的檔案位址導向更新後的地址,但原先的檔案仍然會存在。
那要如何找到這些檔案呢?IPFS 協議運用了區塊鏈類似的分散式雜湊表(Distributed Hash Table),使用者必須使用對應的加密金鑰才能透過 IPFS 協議找到特定檔案, IPFS 協議會利用雜湊表解密該金鑰並產生對應的檔案地址(From key to value),使用者一般無法透過搜尋的方式在分散式網路中找到檔案,只能持有對應的金鑰才能找到。
簡單說,使用者只要輸入對應的 Hash 值,就能快速在 IPFS 網路中找到對應的檔案,然後檔案以多個分割模塊的方式儲存在 IPFS 網路中,由於節點分散在全球網路中可以有更高的穩定性。
所以 IPFS 比起單純的 NAS 儲存,它的形式更像是一種內容傳遞服務(Content Delivery Network),只要檔案存入 IPFS 節點群中,該檔案就會被分割並備份到全球不特定的伺服器之中。
什麼是 CDN 服務?
所謂的 CDN 服務是指在全球各地建置許多的資料中心,讓就近客戶取用資料。
舉例來說,如果企業的網站設置在美國,但是客戶位於日本,那麼客戶就得走太平洋電纜連到美國的伺服器,過程將產生一段可觀的延遲。但是透過 CDN 服務可以事前把網頁內容快取到日本的伺服器,那麼位於日本的客戶直接連到日本當地的伺服器即可。如此一來將可以大幅加速網站的存取速度,目前微軟的 Azure 也有提供 IPFS 的 PAAS 服務,實務上可以透過 Cloudfare 的 CDN 服務來加速檔案存取。
解決 BT 的效率問題
BitTorrent 是很早期的 P2P 檔案分享裝置,當有使用者出來作種(檔案來源的標籤),以自家的電腦與頻寬為起點分享特定檔案,作種的人可以將種子分享給他人,其他人可以利用該種子從起點下載檔案,並且藉此互相分享檔案,而且越多人作種速度就越快。
BT 存在效率問題,同一種檔案可以重複存在,種子彼此也無法整合,導致使用者必須找到最多人使用的種子文件才有辦法擁有較快的下載速度,但 IPFS 中檔案擁有唯一的 Hash 值。當然更棒的是後續分享檔案只需要提供唯一的 Hash 值就能提供其他人下載,由於任一檔案都被紀錄在 IPFS 的 DAG 樹狀圖中,都會被標記唯一的 Hash 值,所以都可以任意下載文件夾中的任一檔案。
- 假設小明的節點擁有歌曲 A ,阿華的節點也擁有歌曲 A 的檔案,這個歌曲 A 有唯一的 Hash 值,使用者可以依據這個 Hash 值找到歌曲 A ,不需要種子文件下載,而且可以同時從小明及阿華的節點下載檔案。
BT 只能依據種子文件下載整個檔案內容,比如說你只想要 A 專輯的一首歌 03.mp3 , 如果採用 BT 系統,你必須下載整張 A 專輯再從中取出你想要的歌曲 03.mp3 ,然而在 IPFS 中只需要該歌曲的 Hash 值便能直接下載 03.mp3,不用先下載整張專輯,節省了許多時間與下載頻寬。如果 BT 要直接下載 03.mp3 則需要再重新產生一份種子文件,這樣網路就便會存在兩個種子文件,然後再重新發布到網路上,過程不但繁瑣也缺乏效率, IPFS 則直接從原本的專輯檔案中利用 hash 抓出檔案即可,不用重新再做一個種子文件。
IPFS 與區塊鏈結合, Hash 索引可存入交易備註並導引至特定檔案
根據上述的解釋, IPFS 看起來只是 BitTorent 的改良版,可以提供檔案分散式儲存與 Hash 值索引的功能,為何跟區塊鏈會產生關聯?
其實 IPFS 的 Hash 索引功能可以起到很大的作用,只要將特定檔案的 Hash 存入區塊鏈的「交易備註」中,便可以直接引導到特定且唯一的檔案,而且該檔案會被分割到多個節點並備份,可以提供更持久且安全的保護,這是 BT 無法作到的精準度與專有性,讓 IPFS 很適合與主鏈結合,可以發展出更完整的去中心化應用。
雖然說 IPFS 具有許多優點,但目前網路的檔案分享還是以 BitTorent 為主流,因為 BitTorent 具有豐富的社群與資源之外,你幾乎可以在上面找到任何你想要的檔案,而且 IPFS 客戶端的使用界面與普及度還有很大的改善空間,現在區塊鏈的 DAPP 也還在發展與實驗期,使用者仍停留在小眾族群,現有儲存需求透過中心化儲存早已足夠。
但是未來隨著去中心化應用成熟,對於分散式儲存的需求將越來越大。區塊鏈會帶來直接金流,只要牽涉到利益問題,參與者對於應用上的文檔、圖片及影片的保存也會越來越重視, IPFS 將可以提供更安全及分散式的儲存方案。
對了, IPFS 與 BT 同樣能儲存一些被極權政府禁止的檔案,一旦上傳便無法刪除及修改。
問題來了,過去 BitTorent 都是社群中的志願者分享檔案來源,可能基於自己的喜好,但回歸商業考量,誰會願意無償提供自己的電腦作為儲存空間呢?
所以像是 Filecoin 這類的專案就是希望結合區塊鏈的經濟模型與 IPFS 的儲存協議,讓提供儲存與下載頻寬的節點可以獲得報酬,上傳或下載檔案的使用者都需要付費使用,如此便可形成一個經濟模型,促使越多節點願意提供空間與頻寬,使用者也能享受到更高速且穩定的下載速度。
相關內容:【IPFS 技術佈道人】入門淺談:什麼是 IPFS?
聲明:文章僅代表作者個人觀點意見,不代表區塊客觀點和立場,所有內容及觀點僅供參考,不構成投資建議。投資者應自行決策與交易,對投資者交易形成的直接間接損失作者及區塊客將不承擔任何責任。