IPFS在分散式檔案儲存系統中的運用

買賣虛擬貨幣

IPFS(星際檔案系統)是一種基於區塊鏈內容的去中心化儲存解決方案。IPFS主要利用散佈在眾多電腦以及節點上的點對點(Peer-to-Peer)網路模型來進行檔案共享。透過這一網路模型,檔案會分解成不同的部分並儲存在網路節點上,節點再利用雜湊表來對檔案進行追蹤。當根據各部分的雜湊值再一次將零散的資訊組合起來時,就相當於原始檔案的重建過程。



集中式和去中心化檔案儲存的區別。

去中心化檔案儲存

IPFS的核心創新理念旨在利用分散式雜湊表(DHT)進行檔案系統的儲存和檢索。IPFS類似於BitTorrent協議,但在指向共享檔案的方式上有所不同。它將以鍵值對的形式將檔案儲存在區塊鏈上。所有資料將被分割成256千位元組的區塊,散佈在節點或計算機網路中,只能透過有效協調來支援節點之間的高效訪問和查詢。BitTorrent並沒有採用區塊鏈技術,而是依靠種子檔案來指向對應檔案。你可以選擇使不同的種子檔案指向同一檔案,但是在IPFS檔案系統中,你只需要一個指向檔案的雜湊地址。

在IPFS上釋出檔案的方式與雲端釋出檔案的方式有所不同。IPFS上的所有資料都可以透過其雜湊地址進行定址。當有人申請訪問資料時,他們是透過訪問雜湊地址獲取資料的,而並非直接接觸到實際檔案本身。也就是說,IPFS提供了檔案實際地址的抽象概念,因此實際儲存單元對應用程式都是無關緊要的。這種抽象概念為應用程式的開發人員消除了複雜性。



IPFS如何跨節點儲存檔案。

一般來講,檔案是在網路節點上進行託管的。這一做法受到了IPFS區塊鏈上Filecoin這一類數字資產的啟發。節點可以透過在其計算機或伺服器上提供儲存空間來託管檔案,為相關檔案提供一個雜湊地址,然後將其分佈在整個網路上。相同檔案可以在不同節點上進行託管,這一過程就相當於對文字進行復制。需要該檔案的使用者將根據離其位置最近的節點雜湊來訪問該檔案。

所有託管檔案的節點都將引用根雜湊(root hash),也就是對應檔案的雜湊地址。每當使用者提出檔案的訪問申請時,就可以利用附近節點的雜湊雜湊(根據根雜湊對檔案進行儲存)來下載檔案。IPFS系統上不會存在副本檔案,因為雜湊雜湊在上傳檔案時總會引用現成的檔案或檔案組塊。

一旦檔案存放至IPFS區塊鏈系統中,它將一直可用,直到透過解除檔案固定格式並執行一個垃圾收集程式將其刪除為止。不同的節點可以透過雜湊值指向檔案本身。只要雜湊值能指向對應檔案,不同節點就可以對其進行儲存。IPFS系統可以隨時進行更新以指向不同的雜湊值,不過只要使用者擁有原始雜湊值,仍然可以訪問該資料,至少有一個節點會永久儲存該資料。

儲存定址方案

IPFS系統與典型的基於網路的雲端儲存系統的區別在於,它是以內容為基礎的(內容定址),而不是以地址為基礎的(地址定址)。地址定址儲存系統的一個案例是超文字傳輸協議(HTTP)。如果儲存系統是以地址為基礎的,就需要使用域名伺服器的主機名來對伺服器進行標示。它可以透過對映到友好使用者名稱稱的邏輯定址方案(如IP地址)來跟蹤主機。如果主機更改了名稱或地址,它還必須在對應的名稱服務表中進行修改。

基於內容的定址儲存適用於從網路獲取資料。這需要一個內容識別符號來確定檔案的實際儲存位置。在這種情況下,使用者是根據密碼雜湊而非邏輯地址對資料進行訪問的,這就相當於檔案的數位指紋。不管誰上傳了檔案,上傳時間和地點有什麼區別,網路都會根據雜湊值返回相同的內容。

在速度和可靠性方面,IPFS系統的效能優於HTTP協議。與依賴伺服器地址獲取檔案的方式不同,內容定址儲存系統可以從使用者附近的各種伺服器(例如,IPFS網路上的對等點或節點)提供檔案。換句話說,使用者可以簡單地對檔案進行搜尋,而無需搜尋引擎提供座標,即伺服器名稱或地址。相反,使用者可以透過檔案的雜湊值對其進行引用,而且可以透過網路附近的可用節點獲取到相應檔案。

IPFS系統的安裝

IPFS的常規安裝有2個節點選擇

1.IPFS桌面——直接從一臺計算機(膝上型電腦或桌上型電腦)儲存或分享檔案。使用者可以安裝一款IPFS配套應用程式,從而可以透過網頁瀏覽器對本地節點進行訪問。這是對等網路檔案共享的安裝形式。

2.IPFS叢集——用於大規模地儲存和共享檔案,該叢集允許跨IPFS節點對識別號組合(pinsets)進行編排和協調。透過IPFS叢集,使用者可以利用分散式節點構建一個大規模的檔案儲存系統。

在安裝基礎IPFS桌面之後,節點配置從初始化儲存庫開始。以下是使用者從Windows Powershell或Mac/Linux terminal shell中輸入的指令。

ipfs init

> initializing ipfs node at /Users//.go-ipfs

> generating 2048-bit RSA keypair...done

> peer identity: Qmcpo2iLBikrdf1d6QU6vXuNb6P7hwrbNPW9kLAH8eG67z

> to get started, enter:

>

初始化操作是在第一次使用IPFS系統時需執行的步驟。下一步是執行IPFS的程式處理程序,將節點連線到網路。

ipfs daemon

> Initializing daemon...

> API server listening on /ip4/127.0.0.1/tcp/5001

> Gateway server listening on /ip4/127.0.0.1/tcp/8080

這項指令是指在本地計算機127.0.0.1上初始化並執行程式處理程序。它將啟動偵聽TCP埠5001的API伺服器以及偵聽TCP埠8080的閘道器伺服器。現在,透過發出叢集指令,使用者即可看到網路上的其他IPFS節點。指令如下所示:

ipfs swarm peers

> /ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ

> /ip4/104.236.151.122/tcp/4001/p2p/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx

> /ip4/134.121.64.93/tcp/1035/p2p/QmWHyrPWQnsz1wxHR219ooJDYTvxJPyZuDUPSDpdsAovN5

> /ip4/178.62.8.190/tcp/4002/p2p/QmdXzZ25cyzSF99csCQmmPZ1NTbWTe8qtKFaZKpZQPdTFB

正如IPFS說明中所解釋的,對等點所採用的格式是:

/p2p/

以下是一個在網路上獲取檔案的指令示例:

ipfs cat /ipfs/QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdsgaTQ/cat.jpg > cat.jpgopen cat.jpg

該指令將從名為“cat.jpg”的指定對等點獲取一個物件,並在本地開啟它。

IPFS的指令碼語言

以下是利用Runkit NPM和Infura閘道器(對公眾免費開放)向IPFS網路寫入資料的測試程式碼。

const IPFS = require( 1.1.5 );

const ipfs = new IPFS({host: , port: 5001, protocol: });

const data = "Writing a test message on the network";

ipfs.add(data, (err, hash) => {

    if(err){

        return console.log(err);

    }

    console.log(+hash);

})

在這段程式碼中,使用者透過指令功能在Node.JS上申請“ipfs-mini”程式包,配置Infura IPFS閘道器的訪問渠道“ipfs.infura.io”,將資料指定為字串“Writing a test message on the network”。然後建立一個條件指令,如果出現問題,則返回錯誤提醒,如果使用者需要獲取雜湊值,那麼控制檯會自動錄入閘道器地址以及雜湊值。

結果將返回唯一雜湊:QmQhadgstSRUv7aYnN25kwRBWtxP1gB9Kowdeim32uf8Td

接下來,使用者即可輸入相應網址連結:https://ipfs.infura.io/ipfs/QmQhadgstSRUv7aYnN25kwRBWtxP1gB9Kowdeim32uf8Td

隨後結果則會顯示出使用者剛剛錄入Infura閘道器的資料。當然,資料並不會永續存在,而是在幾天或幾周不再活躍之後被清除。使用者如需永久的儲存資料,那麼應該在本地或雲上使用專用伺服器。

如果整個程式沒有出錯,那麼即可返回該資料的雜湊值。

IPFS系統的優勢

去中心化——檔案儲存在網路節點上,可以根據雜湊表進行引用。透過Filecoin的激勵機制,可以刺激節點儲存檔案。

容錯性——如果某一節點發生故障,只要還有其他節點儲存了該檔案,那麼檔案仍然可用。不會出現單點故障。

可伸縮性——儲存檔案的節點越多,網路使用者獲取資訊的能力就會越快、越迅速。

永續儲存——IPFS系統的核心內容是資料儲存:只要原始資料對應的物件以及任何新的版本可以訪問,那麼所有檔案的歷史記錄都可以進行檢索。由於各資料區塊是透過網路本地儲存的,並且可以無限期地快取,這也就意味著IPFS的任何資料都可以永續儲存,而無需修改。

抵制審查——一旦內容被上傳到IPFS系統,任何中央機構都無法做刪除處理,因為它是在整個網路中進行傳播的。僅刪除一個節點的資料並不能完全刪除該檔案,也就是說,在其他節點上仍然儲存有備份檔案可供使用。

IPFS系統的劣勢

對使用者不太友好

對使用者來講,在IPFS網路上建立檔案索引的方式並不是很友好。例如,透過雜湊地址訪問檔案需要輸入:

資料開發人員可以透過連結共享檔案,不過就過程而言,這是非常乏味而且耗時的。IPFS利用星際命名系統(IPNS)來查詢檔案。IPNS系統會嘗試著使名字解析更便於使用者使用,就像網際網路上的域名服務系統(DNS)一樣。

另一方面,系統中還帶有一個圖形使用者介面(GUI)和基於網路的衍生IPFS應用程式,從而使得使用者的訪問更加輕鬆、便捷。然而,相較於任何一款普通的智慧手機應用程式,它的使用者友好度和操作簡易性仍然有待提升,因為它的學習曲線更加陡峭。它並不只是點選網頁連結那麼簡單。使用者必須瞭解IPFS的工作原理才能使用它。

資料隱私與合規性

實際上,利用IPFS系統將客戶資料(如“瞭解你的客戶(KYC)”等個人識別資訊)儲存在共享儲存系統上並非最佳實踐。首先,它違反了資料儲存的合規性原則,即“瞭解你的客戶”等資料是不能也不應該在公共雲或共享儲存空間上公開的,這裡當然也包括了IPFS系統。在公共雲上,對資料管理的組織和控制力度更小。對金融機構的嚴格要求是指將資料和資料備份儲存在一個受監管而非共享的儲存系統上。另一方面,由於所有的資料都位於公共網路上,所以任何節點都可以承載“瞭解你的客戶”資料。這進一步違反了嚴格把控資料儲存物件和儲存地點的法律法規。

第二個問題是,如果所有節點必須遵守整個金融體系的規則和規定,這意味著它們必須擁有備份、強大的安全性和容錯能力等。在公共網路上,節點是隨機散佈的,它們不必建立在任何人類設定的系統之上,也無需按照規則行事。即便有些資料是加密的,這些節點還是能夠向網路上的其他使用者共享該資料,所以我們無法阻止惡意參與者訪問這些資料。他們可以自行解密,然後將其用於其他非法途徑。

資料不一致性

在整個IPFS網路系統中,節點勢必沒有動力長期備份和維護資料,所以它可以選擇清除快取資料以節省空間。這意味著從理論上講,如果沒有其他節點儲存相關資料,那麼該檔案可能會隨著時間的推移而“消失”。根據目前的採用率水平,它暫時算不上一個棘手的問題,但從長遠來看,備份大量資料需要強有力的經濟激勵。

這裡的問題就在於,如果一個公司選擇使用公共的IPFS網路來儲存檔案,那麼在未來,節點可以隨時選擇不再儲存該檔案。如果所有節點都做出相同的選擇,那麼該檔案就無法長期儲存在網路上,除非在私有網路上執行IPFS系統。根據IPFS協議,如果使用者上傳到IPFS網路的檔案無法獲得高訪問量,它就會自動消失。換句話說,使用者的資料需要在網路上更受歡迎,才能永久儲存。如果使用者不希望自己的資料從IPFS網路中消失,那麼必須將資料固定在節點上,也就是說必須確保整個網路上,至少自己的節點擁有該資料。

由於IPFS系統是去中心化的,因而所有的儲存節點都將擁有上傳檔案的副本。通常來講,如果該檔案並不活躍或者不經常使用,那麼就會被慢慢剔除。這無疑是一個非常有爭議的問題,因為有的時候,檔案需要歸檔並且不會經常使用,而有的時候需要立即刪除。當使用者對已經儲存在IPFS上的資料進行更改時,其對應的雜湊也必須改變。當然,如果有一個新版本的檔案,使用者必須重新上傳,但它不會覆蓋舊版本。這將影響到該檔案的現有連結,也就是說原始連結將保持不變,但使用者需要為新檔案建立一個新連結。

在更新KYC資料(包括護照和駕照)時,這或許是一個挑戰。當這些證件資訊過期後,使用者必須上傳一個新版本來替換舊版本。IPFS系統提供了版本控制,但是一旦將其擴大到公共網路上,事情就變得棘手了,因為不同的節點可以有多種版本。舊版本不會自動更新,只能要麼存檔,要麼銷燬。IPFS系統不能以AWS或Azure上的相同方式歸檔檔案。

IPFS擁有版本控制系統。這是其Merkle DAG結構的一個特性,它允許使用者構建一個分散式的版本控制系統(VCS)。當下最流行的例子是Github,它允許開發者輕鬆實現專案上的同時協作。Github上的檔案利用Merkle DAG結構進行儲存和版本控制。它允許使用者對同一份檔案的不同版本進行獨立的複製和編輯,儲存這些版本,然後將所有編輯的內容合併到原始檔案中。然而,根據多數開發人員的觀點,這些內容不過是理論上的,它的實用性尚未經過充分的測試和驗證(截至撰寫本文時)。如果我們要實現它,還將需要更多的時間和開發成本,這從長遠來看是值得期待的。

IPFS系統在Web3Studio SoJourn專案中的使用(圖片來源:Consensys)

專案概要

IPFS系統更適合長久性的資料儲存,如數字音樂、藝術作品和認證資訊(如,證書、文憑、獎勵以及捐贈證明)。這些資料都是無需更改的,將其放在基於區塊鏈的儲存系統上會更有意義。它為創作者或藝術家提供了一個數字證明,任何人都無法對其進行更改,並且可以透過一個基於雜湊的系統以及針對性的鍵值對來證明。

IPFS系統上儲存的資料是非常公開的,從而更加需要資料的保密性。這可能會違反某些公開私有資料的資料儲存條例(例如,通用資料保護條例)。在AWS和Azure雲上也有可擴充套件的資料儲存解決方案,以滿足使用者的隱私性、安全性和合規性要求。實際上,沒有必要像IPFS儲存資料那樣釋出個人資訊。對於公開透明的內容資訊,IPFS系統可以向內容所有者提供真實性的證明。它可以透過證明創作者的所有權來維護各自的作品版權,比如藝術品,這樣我們的使用者就可以收取各自應得的版權費,還可以防止不法分子盜用他人作品而獲得榮譽。

IPFS系統似乎為內容提供了快速和安全的容錯檔案儲存器。然而,它可能不適用於需要嚴格規定資料儲存和保護方式的財務資訊和隱私資料。對於需要頻繁更新和改動的檔案,比如,持續記錄資料資訊的活動日誌檔案,也不建議採用該系統。在區塊鏈上儲存資料的目的不同,IPFS系統會提供相應的解決方案。隨著IPFS的發展,它可以利用隱私層次來隱藏靜態加密的個人資料,力求不會違反任何洩露機密的規定。

文章來源:小鏈財經

翻譯: Celia

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;