當前位置:
首頁 > 最新 > 區塊鏈基礎設施縱覽:存儲、計算和通信

區塊鏈基礎設施縱覽:存儲、計算和通信

策劃|Tina

編輯|王強

區塊鏈前哨導語:以太坊、IPFS/Filecoin 和 BigchainDB 之間是怎樣的關係?Golem、Polkadot 或 Interledger 又是什麼情況?我經常被問到諸如此類的問題,所以決定寫下這篇文章。本文聚焦於區塊鏈的大框架:介紹區塊鏈中各個計算元素的模塊以及各個模塊的一些實現案例。

更多乾貨內容請關注微信公眾號「區塊鏈前哨」,(ID:blockchain-666)

以太坊、IPFS/Filecoin 和 BigchainDB 之間是怎樣的關係?Golem、Polkadot 或 Interledger 又是什麼情況?我經常被問到諸如此類的問題,所以決定寫下這篇文章,從基本框架層面回答這些問題。

簡單來說:並不存在名為「區塊鏈」的無所不能的神奇系統。相比之下,倒是有很多優秀的計算構件塊,可以組合起來創建實用的去中心化應用。以太坊可以充當此類角色,此外還有很多類似的選擇。接下來具體分析。

背景

構成計算技術的基本元素是存儲、處理和通信。大型主機、PC、移動設備和雲服務都以各自的方式展現這些元素。各個元素之內還有專門的構件塊來分配資源。

例如,在存儲元素內,既有文件系統也有資料庫。文件系統使用目錄文件的層級結構存放 mp3 這樣的 blob(二進位大對象)數據,而資料庫用來存放結構化的元數據,使用 SQL[1] 這樣的查詢介面。在中心化的雲平台上,我們可能使用 Amazon S3 服務存放文件,用 MongoDB Atlas 運行資料庫,並使用 Amazon EC2 處理運算需求。

本文聚焦於區塊鏈的大框架:介紹區塊鏈中各個計算元素的模塊以及各個模塊的一些實現案例,偏向概論而非詳解。

區塊鏈的組成模塊

以下是去中心化技術中各個計算元素的構件塊:

存儲:代幣存儲、資料庫、文件系統 /blob

處理:有狀態的業務邏輯、無狀態的業務邏輯、高性能計算

通信:數據、價值和狀態的連接網路

區塊鏈的基礎架構縱覽

區塊鏈技術體現在每個模塊中,如下圖所示 [2]:

存儲

作為基本計算元素,存儲部分包含了以下構件塊。

代幣存儲。代幣是價值的存儲媒介(例如資產、證券等),價值可以是比特幣、航空里程或是數字作品的版權。代幣存儲系統的主要作用是發放和傳輸代幣(有多種變體),同時防止多重支付之類的事件發生。

比特幣和 Zcash 是兩大「純凈」的、只關注代幣本身的系統。以太坊則開始將代幣用於各種服務,以實現其充當全球計算中心的理想。這些例子中代幣被用作運營整個網路架構的內部激勵。

還有些代幣不是網路用來推動自身運行的內部工具,而是用做更高級別網路的激勵,但它們的代幣實際上是存儲在底層架構中的。一個例子是像 Golem 這樣的 ERC20 代幣,運行在以太坊網路層上。另一個例子是 Envoke 的 IP 授權代幣,運行在 IPDB 網路層上。

最後我用「.*」來說明大多數區塊鏈系統都有一套代幣存儲機制。

資料庫。資料庫專門用來存儲結構化的元數據,例如數據表(關係型資料庫)、文檔存儲(例如 JSON)、鍵值存儲、時間序列或圖資料庫。資料庫可以使用 SQL 這樣的查詢快速檢索數據。

傳統的分散式(但中心化)資料庫如 MongoDB 和 Cassandra 通常會存儲數百 TB 甚至 PB 級的數據,性能可達到每秒百萬次寫入。

SQL 這樣的查詢語言是很強大的,因為它將實現與規範區分開來,這樣就不會綁定在某個具體的應用上。SQL 已經作為標準應用了數十年,所以同一個資料庫系統可以用在很多不同的行業中。

換言之,要在比特幣之外討論一般性,不一定要拿圖靈完備性說事。你只需要一個資料庫就夠了,這樣既簡潔又方便擴展。有些時候圖靈完備也是很有用的,我們將在「去中心化處理」一節具體討論。

BigchainDB 是去中心化的資料庫軟體,是專門的文檔存儲系統。它基於 MongoDB(或 RethinkDB),繼承了後者的查詢和擴展邏輯。但它也具備了區塊鏈的特徵,諸如去中心化控制、防篡改和代幣支持。IPDB 是 BigchainDB 的一個受監管的公開實例。

在區塊鏈領域,也可以說 IOTA 是一個時間序列資料庫。

文件系統 /blob 數據存儲。這些系統以目錄和文件的層級結構來存儲大文件(電影、音樂、大數據集)。

IPFS 和 Tahoe-LAFS 是去中心化的文件系統,包含去中心化或中心化的 blob 存儲。FileCoin、Storj、Sia 和 Tieron 是去中心化的 blob 存儲系統,古老而出色的 BitTorrent 也是如此,雖然後者使用的是 p2p 體系而非代幣。以太坊 Swarm、Dat、Swarm-JS 基本上都支持上述兩種方式。

數據市場。這種系統將數據所有者(比如企業)與數據使用者(比如 AI 創業公司)連接在一起。它們位於資料庫與文件系統的上層,但依舊是核心架構,因為數不清的需要數據的應用(例如 AI)都依賴這類服務。Ocean 就是協議和網路的一個例子,可以基於它創建數據市場。還有一些特定應用的數據市場:Enigma Catalyst 用於加密市場,Datum 用於私人數據,DataBroker DAO 則用於物聯網數據流 [2]。

處理

接下來討論處理這個基本計算元素。

「智能合約」系統,通常指的是以去中心化形式處理數據的系統 [3]。它其實有兩個屬性完全不同的子集:無狀態(組合式)業務邏輯和有狀態(順序式)業務邏輯。無狀態和有狀態在複雜性、可驗證性等方面差異巨大。第三種去中心化的處理模塊是高性能計算(HPC)。

無狀態(組合式)業務邏輯。這是一種任意邏輯,不在內部保留狀態。用電子工程術語來說,它可以理解為組合式數字邏輯電路。這一邏輯可以表現為真值表、邏輯示意圖、或者帶條件語句的代碼(if/then、and、or、not 等判斷的組合)。因為它們沒有狀態,很容易驗證大型無狀態智能合約,從而創建大型可驗證的安全系統。N 個輸入和一個輸出需要 O(2^N)個計算來驗證。

跨賬本協議(ILP)包含 crypto-conditions(CC)協議,以便清楚地標出組合電路。CC 很好理解,因為它通過 IETF 成為了互聯網標準,而 ILP 則在各種中心和去中心化的支付網路(例如超過 75 家銀行使用的瑞波)中廣泛應用。CC 有很多獨立實現的版本,包括 JavaScript、Python、Java 等。BigchainDB、瑞波等系統也用 CC,用以支持組合式業務邏輯 / 智能合約。

Bitshare 和 Eos 也支持無狀態業務邏輯。

因為有狀態邏輯是無狀態邏輯的超集,支持有狀態邏輯的系統也自然支持無狀態邏輯(但代價是增加複雜性,可驗證性方面也要考慮更多問題)。

BigchainDB、Bitshares、Eos 還支持事件。它提供了一種持久的層級,使功能更接近有狀態的業務邏輯(感謝 Ian Grigg 指出這一點 [2])。

有狀態(順序)業務邏輯。這是一種在內部保留狀態的任意邏輯。也就是說,它有記憶,或者說它是一種帶有至少一個反饋迴路(和一個時鐘)的組合邏輯電路。例如,一顆微處理器有一個內部寄存器,根據發送給它的機器碼指令進行更新。更一般地說,有狀態的業務邏輯是一個圖靈機,接受一系列輸入並返回一系列輸出。有這種(實際近似)表現的系統被稱為圖靈完備系統 [4]。

以太坊是最知名的使用有狀態業務邏輯 / 智能合約的區塊鏈系統,其智能合約直接在鏈上運行。Lisk、RChain、DFINITY、Aeternity、Tezos、Fabric、Sawtooth 和很多其它系統也有智能合約。運行「在某處」的代碼是個強大的理念,有很多使用場景。這也能部分解釋為什麼以太坊一飛衝天,為什麼它的生態系統如此興旺,以及為什麼會有這麼多競爭者在這一領域崛起。

因為順序邏輯是組合邏輯的超集,這類系統也支持組合邏輯。

正如 DAO 黑客所示,代碼中的小錯誤可能導致嚴重後果。晶元產業採用的形式化驗證也能在這裡發揮作用,以太坊基金會正在這方面做出努力。但它有規模限制:對於組合電路,可能的映射數量最多有 2^(輸入數量)種。對於時序電路,內部狀態的上限是 2^(內部狀態變數的數量),前提是內部的變數都是布爾值。例如,對於一個帶有 3 個輸入的組合電路,它有 2^3=8 種可能的狀態供驗證。但如果它是一個帶有 32 位寄存器的時序電路,要完整驗證就要檢查 2^32=42 億種狀態。這一限制約束了時序電路的複雜程度(如果要保證可信度)。「按結構修正」是另一種驗證有狀態智能合約的手段,比如 Rchain 使用的 rho 微積分。

如果需要去中心化的處理,很多場景下有個更簡單的方法:只要把處理過程放在客戶端一側,運行在瀏覽器或移動設備中,用 JS 或 Swift 代碼編寫就行了。這個時候就要信賴客戶端的處理過程,如果設備是你自己控制的那就沒什麼問題。我們把它叫做「胖客戶端」,是相對於「胖協議」架構來說的。這種體系對主流 web 開發者很友好。例如,很多 web 應用需要用到應用狀態。要開發這樣的系統只需要用到 JS+IPDB(使用 js-bigchaindb 驅動)。如果你的應用也需要 blob 存儲和支付功能,就再加上 JS 的 IPFS 客戶端版本(ipfs.js)和以太坊版本(web3.js),比如:

高性能計算(HPC)。這是一種處理「重負載」計算任務的過程,諸如渲染、機器學習、電路模擬、氣象預報、蛋白質摺疊等任務都是這種類型。這類計算任務往往花費幾個小時、甚至數周時間,運行在整套機器集群上(CPU、GPU 甚至 TPU)。

這些方法可以讓 HPC 去中心化:

Golem 和 iEx.ec 可以用來組成去中心化的超級計算機及相關的應用框架。

Nyriad 可以組成存儲處理框架。基本上這個處理過程與中心化的存儲是放在一起的(Nyriad 也有適合後者的方案)。

TrueBit 實現第三方計算,並進行後期計算檢查(空閑時進行隱式檢查,出現問題時進行顯式檢查)。

有些人只是用 VM 或 Docker 容器執行複雜的計算任務,將結果(VM 最終狀態或單純的計算結果)放到 blob 存儲里,只提供有限的訪問許可權。然後他們把存儲訪問授權賣給容器使用者,比如代幣讀取許可權。這種方式需要更多客戶端來驗證結果,好處在於技術都很成熟。當 TrueBit 成熟後,這種方法自然會與其融合。

通信

這一節我們會談到第三個也是最後一個基本的計算元素,通信。描繪通信框架的方法很多,我會重點介紹網路連接。它有三個層級:數據、價值和狀態。

數據。60 年代,ARPA.net 誕生了。它的成功催生了一系列類似的網路,諸如 NPL 和 CYCLADES。新的問題隨之出現:它們無法互相交流。Cerf 和 Kahn 在 70 年代發明了 TCP/IP 來連接這些網路,創建一個網路組成的聯網系統,也就是今天我們熟知的 Internet。TCP/IP 是當今網路連接的事實標準。OSI 協議棧曾經是它的競爭對手,但很早就消亡了;然而諷刺的是,OSI 的模型被證明是有用的。於是,雖然 TCP/IP 歷史悠久,但它仍然是連接網路數據的去中心化構件。

Tor 項目可以被視為 TCP/IP 的上層,用來保護用戶的隱私。然而它有很多中心化的特點,更不要說它獲得了國防部的資助,令很多人不滿。代幣化的類 Tor 項目正在興起,可以拭目以待 [2]。

價值。TCP/IP 只在數據層連接不同網路。你可以復送分包——將一個分包一次發送到很多目的地——也無所謂。但如果要在網路中發送價值時,該怎樣連接網路呢?比如比特幣到以太坊,乃至 SWIFT 清算網路到瑞波 XRP 網路。你需要代幣能一次只發送到一個目的地。防止重複發送的一種聯網方式是使用匯票,但這種做法往往消耗很多資源。但是,我們可以只保留匯票的核心要素,拋開信任中介,使用密鑰託管。愛麗絲可以通過馬洛里向鮑勃匯款,款項經過馬洛里之手但他不能動用(並且有期限約束,馬洛里不能一直占著款子不放)。這就是跨賬本協議(ILP)的核心要素。這也是雙向掛鉤(想想側鏈)和狀態管道(比如 Lightning 和 Raiden)的理念;但重點完全在於為價值交換連接網路。除了 ILP,Cosmos 等系統會更複雜一些,以換取更多便利。

狀態。除了連接價值網路,我們能否更進一步?想像一個計算機病毒,其帶有自己的比特幣錢包,可以在網路間跳轉;或者以太坊主網中的一個智能合約,可以將其狀態轉向另一個以太坊網路乃至另一個兼容網路?或者,為什麼將 AI DAO 局限在單一網路中?

於是誕生了 Polkadot,用來連接網路的狀態。Aeternity 也介於價值網路和狀態網路之間。

案例

現在我們研究了三大計算元素(存儲、處理、通信),探討了每種元素的去中心化構件,以及每種構件的項目實例。

人們開始發展組合式的系統。有很多由兩種構件組成的模式,通常使用 IPFS+ 以太坊或 IPFS+IPDB。甚至有人使用三個或更多的模塊組合。以下是一些前沿案例:

Ujo 使用 IPFS|Swarm+IPDB+ 以太坊,用於去中心化音樂網路。IPFS 或 Swarm 用在文件系統和 blob 存儲上。IPDB(和 BigchainDB)用於元數據存儲和查詢。以太坊用於代幣存儲和有狀態業務邏輯。

Innogy 使用 IPFS+IPDB+IOTA,用於供應鏈 / 物聯網應用。IPFS 用於文件系統和 blob 存儲。IPDB(和 BigchainDB)用於元數據存儲和查詢。IOTA 用於時間序列數據。

相關工作

以下是區塊鏈社區其他研究者的相關框架,我很高興能與他們進行很好的交流。

Joel Monegro的「胖協議」框架強調每個構件都是一個協議。我覺得這是一個很酷的框架,儘管它要求構件之間只能使用網路協議交流。還有一種方式:模塊可以簡單地成為「導入」語句或庫調用。

使用導入的原因可以是為了 (a) 更低的延遲:一個網路呼叫要花費時間,可能影響乃至破壞可用性;(b) 簡潔:使用庫調用(乃至嵌入代碼)往往比連接到一個網路、支付代幣等更簡單;(c) 更加成熟:協議棧才剛剛興起。我們有歷史數十年之久的優秀 Unix 庫,甚至 Python 和 JS 模塊也有 15 年以上的歷史。

Fred Ehrsam的「Dapp 開發者協議棧」強調 web 商業模式。雖然它很有幫助,但它不是要針對給定計算元素(比如文件系統與資料庫)在模塊之間進行細化區分的。

BigchainDB 白皮書(最早發佈於 2016 年 2 月)第一部分展示了其早期版本的形態,如下所示:

它關注於處理、文件系統和資料庫這幾大構件。它沒有使用「計算元素」的框架,沒有區分去中心化處理的類型。本文是我在過去一年半根據這份白皮書進一步思考的成果;我在 5 月 22 日在 Consensus 2017 上的演講進一步補充了我的觀點,與本文內容很接近。(我寫這篇文章的部分原因是很多人請我將這些思考化作文字)。

該圖還指出了一個頻譜,最左邊是完全的中心化,最右是完全的去中心化。這有助於將已有的軟體系統升級為更加去中心化的形式,將最有必要升級的模塊優先去中心化。

Stephan Tual的「Web 3.0 重構」堆棧與本文的思想基本一致,只不過更偏重於以太坊。它為社區提供了很好的服務,用一張映射圖將很多項目歸類到相似的構件中。我驚喜地意識到它與我的思想非常相似。不過它的應用服務模塊層(消息模塊、存儲模塊、共識模塊、管理模塊……)實際上將三種事物混合在一起:應用、「是什麼」和「怎樣做」。對我而言,模塊應該是「是什麼」的類別。所以消息是一個應用(應該在應用層);存儲應該更加細粒化;共識是「怎樣做」的部分(隱藏在一些模塊里);管理也是「怎樣做」的部分(所以也該隱藏起來)。它也有「網路」協議,用作單獨的底層模塊,不過我將它們視為模塊間交互的一種可行方式,與庫調用類似。不管怎樣,我認為這是非常出色的堆棧。

Alexander Ruppert的「映射去中心化世界」有大約 20 類組織,x 軸有四個高級類,依次是基礎設施層、中間件層、流動層、應用層。這也是很棒的部分;我很高興能幫助 Alex 做出這個映射。它對核心基礎設施著墨不多,更注重廣泛的趨勢;而本文主要寫的是核心基礎設施的框架原則。

未來

Ujo 這樣的系統將很多模塊合併在一起,諸如 IPFS 或 Swarm(用於 blob)+ 以太坊(用於代幣和業務邏輯)+IPDB 和 BigchainDB(用於可快速查詢的資料庫),所以綜合了所有系統的優點。

我希望隨著人們更好地理解構件之間的關係,這種趨勢也會隨之加速。這也比把所有東西都塞入名為「區塊鏈」的單一框架更有效率。

我希望這一理念隨著去中心化生態系統一起繼續進化。AWS 一開始只有一種服務:為 blob 存儲提供的 S3 服務;之後它有了處理服務:EC2;它繼續進化。AWS 現在有 50 多個模塊,當然其中少數模塊依舊是最關鍵的。下圖列出了 AWS 的所有服務。

我發現類似的故事正在去中心化世界上演。初看起來,我們可以設想每一個 AWS 模塊的去中心化版本。但也會有不同點,因為每種生態系統(雲、移動、去中心化)都有自己的特定模塊,比如去中心化的代幣存儲。這將是很有趣的旅程!

注釋

[1] 其實我們可以進一步對這些構件進行分級。例如資料庫是在文件系統之上的。後者則在原始數據(blob)存儲之上。分散式資料庫推動通信發展。例如,多數現代資料庫使用 Ext4、XFS 或 GridFS 等文件系統與底層存儲。本文中我給出的框架是應用開發者的視點:文件系統的 UX 是什麼,資料庫的 UX 是什麼,等等。

[2] 2017 年 8 月我在此加入了一些新內容。

[3] 我從未真正喜歡過「智能合約」這種說法。在 AI 語境下它們並不算智能。它們也和」合約「這個法律概念沒有關係。如果它們的確包含法律元素,它們通常會加上狀態,比如說用 Ricardian 合約。」去中心化處理「的稱謂和其中的」去中心化業務邏輯「更加合理。不過現在「智能合約」的叫法如此普及,就這麼叫也可以。相比糾結稱謂,我們有更有意義的事情要做。

[4] 這裡我提到的「圖靈完備」是實踐層面的,不是純粹理論層面的。理論上,機器根據輸入數據及其當前內部狀態返回一系列輸出數據;但實踐上,機器無法永續運行,無法解決「機器何時停止」的問題(停止問題)。

今日薦文


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 區塊鏈前哨 的精彩文章:

怎麼評價牛津大學開設區塊鏈課程?

TAG:區塊鏈前哨 |