星際檔案系統 IPFS ( Inter Planetary File System) 聽起來很有未來感但跟 B…
專案起始
Juan Benet 於 2014 創立 Protocol Labs 協議實驗室
並於同年啟動 IPFS 項目
IPFS 是一個開源的項目,有許多開源社群協助發展
Protocol Labs 還有另一個知名的項目 filecoin
是一個與 IPFS 相輔相成的存在
簡介
IPFS 是一套點對點的分散式的文件儲存系統
它並沒有一個中心化的伺服器在存檔案
所有檔案都保存在在線的 IPFS 節點之中
我們每個人的電腦安裝 IPFS 程式並連上網後
都可以成為 IPFS 的一個節點
IPFS 也是一組通訊協議,未來目標是取代 HTTP 協議
在有支援 IPFS 的瀏覽器 (如 Brave ) 網址列上輸入 ipfs:/CID
就可以取得資料內容
但現在大多數瀏覽器都還是需要透過 Gateway 來取得資料
特性
- 內容尋址:
我們常用的網頁瀏覽方式,都是屬於位址尋址
例如這是我的 DemiHuman編號455 在 OS 上面的圖片來源
若是內容尋址,則類似輸入這樣的連結ipfs://demihuman#455
就應該出現
- 去重複性:
要說明 IPFS 如何做到去重複性這件事,須先了解IPFS是如何儲存資料
下面這張圖顯示出 IPFS 物件的資料結構
假如一個檔案小於 256 KB,那資料會直接存在 Data 區塊內
這個檔案結構上傳到 IPFS 時,會取得一組 CID
但若檔案超過 256KB 時
會改用下面這張圖的模型來儲存資料
將一個大檔,拆成許多小檔,並透過links串接起來
links 裡面放的東西,就是各個小檔本身的CID
因為 CID 就代表著檔案內容,就可以識別檔案是否重複
進而避免重複檔案占用磁碟空間
這個儲存檔案的技術,稱為 Merkle DAGs (莫克爾有向無環圖)
Markle DAGs 是 Markle Tree 的延伸應用
下面這是莫克爾樹的示意圖
- 支援目錄結構:
下圖是個多資料夾的結構
透過 links 長出相同結構的IPFS物件 - 點對點的分散式架構:
目前我們常用的 HTTP 協議,在瀏覽網站時
會先透過瀏覽器,向遠端伺服器請求資料
伺服器端收到請求後,再把資料回覆給我們
而點對點的分散式架構如同下張圖
資料不再是由中心主機回傳,而是透過 DHT (分散式雜湊表) 技術取得檔案 - 版本化:
IPFS 參考了 Git 的設計
當提交了一個檔案到 IPFS 上時,會產生一個 commit 物件
這個物件結構如下圖
當上傳了第二、第三個版本時,會產生新的 Commit 物件
並將 Parent 指向前一個 Commit
另外可參考 IPLD+IPNS 作法
與filecoin關係
簡單的說是 IPFS 需要有機器提供儲存空間並維持在線
才能確保資料可以被取得
filecoin 則提供一個獎勵機制
讓提供儲存空間的礦工可以賺取 FIL 代幣
缺點
- 冷門檔案很容易消失
- 沒有 CDN 服務的話速度還是偏慢
- 很難刪除不小心上傳的資料
目前僅支援靜態 HTML 檔案,沒辦法做出互動式網站
應用
討論
- 去中心化議題
- IPFS結合區塊鏈
參考資料來源
youtube-IPFS: Interplanetary file storage!
youtube-如何用IPFS上传和下载文件
youtube-李查说IPFS:彻底搞懂 IPFS 白皮书 | Curious where it all began?
IPFS 問與答
連Ethereum都在用!用一個例子徹底理解DHT
Short intro to IPFS
wiki-星際檔案系統
wiki-Kademlia