什麼是 ipfs 星際文件系統(InterPlanetary File System)?
困境
目前 web2 都是以中心化服務為基礎設計,舉例為 youtube, google 等網路巨頭所提供之網路服務, 為什麼會要中心化,就是為了體驗的問題,隨時可以拜訪、低延遲等好處,但這也帶來另一個隱憂: 如果中心巨頭服務器斷線或關閉,或遭到監管等問題則完全無法拜訪。
解決方案
ipfs(interplanetary filesystem): 星際檔案系統,有點類似以前的 p2p 跟 BT節點機制,但具備了更多功能。 這邊要特別注意 ipfs 本身與區塊鏈是沒有任何關係的,只是前者又結合了區塊鏈,而後者許多項目為了保持去中心化 思維而大量採用 ipfs 作為檔案儲存媒介。
傳統來說,我們要拜訪一張檔名為 512.png 的檔案,我們會在網址上輸入https://yish.dev/512.png ,這樣我們就能拜訪到這張圖片,而這樣子的行為則被稱為 地址定址(location based addressing) ,一旦服務器失效或網址失聯,則永遠無法拜訪到這張圖片。 但在此之前是不是有其他人拜訪過這張圖片而他電腦不論是緩存或是某地有儲存著備份,但我們卻無法拜訪。
而 ipfs 透過採用 內容定址(content based addressing) 用來解決這樣子的問題。 原本地址定址是需要由你告訴電腦到哪個位置尋找資源,而現在採用內容定址則是告訴它你要什麼資源。
檔案內容都會有一個雜湊值: 例如 hjjsdfh7T124jAAjruuXNnnna14
,類似唯一特徵或指紋。 而當你需要下載某個檔案時,只需要詢問網路: 誰有含有這個雜湊值的檔案?
這個雜湊值是每個檔案唯一,也可以進行二次驗證,達到防偽功能。
增加網路可利用性,由於每個檔案都是唯一雜湊,也就是可以刪除重複檔案。
技術細節
實作
每個 ipfs object 含有基礎兩個內容
超過 256kb,切割檔案並且進行連結
也類似檔案系統與資料夾關係
支持檔案版本管理(類似於 git 概念) 當每次提交一個檔案上去時,都會是有一個 commit 動作,告訴 ipfs 你提交哪個檔案版本。
弱勢
當網路提供節點全部失效時則拜訪不到檔案(如同BT種子沒人上傳一樣)
節點解決方案
提供獎勵機制鼓勵人提供節點
將檔案分佈儲存
-> 結合區塊鏈: filecoin
透過提供鏈上獎勵代幣與機制鼓勵節點持續在線獲得,並保證多節點存有副本。
參考: IPFS: Interplanetary file storage!