原文標題:《科普 | 什麼是分片 (Sharding)?》
原文來源:EthHub 翻譯:Unitimes_David
概要
區塊鏈系統中有一個三元悖論能以一個三角形(被稱爲 DCS 三角形)的形式可視化,它所傳達的是「去中心化,一致性以及可擴展性這三者是不可能同時實現的。設計者必須進行權衡(你可以選擇其中任意兩者而非全部)。」(筆者注,DCS 三角形在國內常被稱爲區塊鏈不可能三角)。見下圖:

分片 (Sharding) 是解決這一挑戰的一種嘗試。分片就是把笨重的區塊鏈(數據庫)劃分爲更輕量、更快的區塊鏈。到底怎麼做呢?爲了解決可擴展性的問題,我們將存儲在主鏈上的狀態數據和歷史數據劃分爲一個個分片 (shards)。每個分片管理自身,有着自己的交易歷史,以及在某個分片上的交易的影響僅限於該分片。
上述表述的一個例子就是這樣的:一個 dApp (去中心化應用程序) 自身擁有一個完整的分片,因此與它相關的所有交易將只在這個分片上。與特定領域相關的幾個 dApp 將會處於相同的單個分片上。
ETH2.0 的後期階段考慮了跨分片通信的可能性。
分片還引入不同類型的節點,如「輕節點」,「超級全節點」等等,取決於其下載和驗證的數據的多少。
可擴展性三元悖論
可擴展性三元悖論聲稱區塊鏈系統只能最多滿足下面三個性質中的其中兩個:
去中心化(定義爲系統能夠在每個參與者只獲取 O(c) 資源 (即普通的筆記本電腦或小型的 VPS) 的情況下就可以運行)
可擴展性(定義爲能夠處理大量交易)
安全性(定義爲網絡在面對擁有高達 O(n) 資源的攻擊者時能夠保持安全)
可擴展性的關鍵挑戰是在區塊鏈的底層找到一個實現所有這三個特性的方法——分片就是爲了解決該問題的一個嘗試。
什麼是分片?
當前,在所有的區塊鏈協議中,每個節點存儲整個狀態(包括賬戶餘額,合約代碼及存儲等等)並且處理所有交易。這種設計提供了高度的安全性,但大大限制了可擴展性:一個區塊鏈網絡不能處理比單個節點更多的交易。在很大程度上,因爲這個原因,比特幣被限制在每秒大約 3-7 筆交易,以太坊則約爲 7-15 筆交易,等等。
然而,這就提出了一個問題:是否能夠創建一種新的機制,其中只有一小部分節點會驗證每一筆交易?只要有足夠多的節點對每筆交易進行驗證,那麼這個系統仍然是高度安全的,但只會佔所有驗證者集合中的一小部分,使得系統可以並行處理大量交易,我們是否可以通過把交易處理分派到各個小節點組中來大大增加區塊鏈的整體吞吐量?
分片背後的基本思想是什麼?
我們把以太坊的狀態數據和歷史數據劃分到被我們稱爲「分片」的分區之中。例如,以太坊上的分片方案可能會把以 0x00 開頭的所有地址放到一個分片上,以 0x01 開頭的所有地址放到另一個分片上,等等。在最簡單的分片形式中,每個分片也有着自身的交易歷史,在某個分片上交易的影響僅限於同一個分片的分片狀態。
一個簡單的例子就是多資產區塊鏈,其中有着許多分片,每個分片保存餘並處理與某種特定資產 (比如某種 ERC20 代幣) 相關的交易。在更高級的分片形式中,存在着某種形式的跨分片通信能力,其中一個分片的交易能夠觸發其他分片上的事件。
帶有分片的區塊鏈的基本設計看起來大概是怎樣的?
存在這樣一個驗證者集合(即 PoS 節點):這些驗證者被隨機地分配去創建分片區塊。在每個 slot(一個 8 秒的時間段)中,爲 [0...999] 個分片中的每個分片隨機地選擇一個驗證者,並給予被選中地驗證者在分片上創建區塊的權利,該分片區塊可能包含多達如 32kb 的數據。此外,對於每個分片,系統還會選擇一個大小爲 100 的驗證者集合 (也即所謂的「委員會」) 作爲證明者 (attestors)。一個區塊的區塊頭,連同至少 67 個證明簽名,可以作爲一個對象被打包到「主鏈」(也被稱爲信標鏈) 上。
注意,在這樣一個系統中當前可以存在着幾個「級別」的節點:
超級全節點——下載信標鏈所有的數據以及信標鏈上引用的每個分片區塊。
頂級節點——僅處理信標鏈區塊,包含分片區塊的區塊頭和簽名,但不會下載分片區塊的全部數據。
單分片節點——充當頂級節點,但同時下載和驗證它更關心的某個特定分片的每一個校驗塊 (collation)。(筆者注:在分片上的區塊被稱爲 collation,驗證者被稱爲 collator)
輕節點——僅下載和驗證信標鏈的區塊頭;不處理任何檢驗塊頭或者交易,除非它需要讀取某個特定分片的狀態中的某個特定條目,這種情況下,輕節點將會下載該分片最近的校驗塊頭的默克爾分支,並從那裏下載所需的狀態中的默克爾證明。
資料 Resources
分片常見問題解答
分片路線圖
DCS三角形
來源鏈接:https://www.unitimes.pro/p/83442f806ea64861a45c7d72c808fe44
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia