文章目錄
背景
分佈式數據庫與區塊鏈的最大不同之處:
傳統數據庫要求可信節點,區塊鏈技術支持拜占庭節點。
兩種模型
order-execute
先通過共識算法排序,然後各節點本地再執行。代表有比特幣、以太坊等。
該模型存在兩點不足:
-
無法並行執行
-
每個節點都要執行
導致無法擴展、性能低。
而分佈式數據庫很多年前就解決了這些問題。
simulate-order-validata-commit
並行模擬、後驗證。代表有Hyperledger Fabric.
支持了併發執行,但是Hyperledger Fabric實現的不夠好:大量的transaction被abort,導致tps低。
優化
作者採用了兩種併發控制的優化手段對Hyperledger Fabric進行優化:
- transaction recordering
- early transaction abort(需要細粒度併發的支持)
爲什麼採用了這兩種併發控制優化措施?
- 以區塊的形式commit transactions,有些優化是針對單獨的transactions
- 區塊鏈是分佈式、replicate,傳統數據庫可能是單機、partition,
- 區塊鏈的transaction在多個節點模擬,節點狀態可能不一致,而數據庫狀態一定一致
- 區塊鏈的性能瓶頸在加密簽名、網絡通信、信任驗證。傳統數據庫的瓶頸在低級的組件,比如鎖機制的使用。有的優化是針對低級的級別
併發控制技術分爲兩類:一是提高吞吐量的,二是將aborted transactions變爲successful transactions的
作者經過分析只能採用第二種。
實現
transaction recordering
#1 強連通分量
#2 simple 環
#3 統計各點的環數
#4 去點,同時更新環數
#5 拓撲排序,逆序
early transaction abort
在模擬階段或者排序階段提前終止。
模擬階段:
並行進行模擬和驗證,模擬的時候讀數據的時候要檢查version,如果version大於last-version,說明在驗證階段數據被修改了,終止模擬,提前結束交易。
排序階段:
如果同一個 block中的不同交易讀取同一個數據的不同版本,那麼說明兩者模擬之間其他事務修改了數據,後者交易變爲無效,不再對其進行排序,提前結束交易。