「某些偽公鏈百萬級TPS的真假辨析」

in #btc6 years ago (edited)

作者: 焦木先生

IMG_20180625_181011.jpg

不知道從什麼時候,鏈圈的人開始以去中心化一切為目標(竊以為其實就是個純市場口號)。甚至為此不惜從設計上就放棄去中心化(其實就是放棄了系統安全性,感興趣的可以看我前面發的相關文章),採用超級節點(自己宣稱叫區塊生產者)來實現所謂的高性能,還詭稱說用了超級節點後,PoW的性能都不是什麼問題了,還動不動拿出百萬TPS來忽悠韭菜。

那麼動輒百萬TPS是不是真的呢?讓我們先從目前智能合約的執行模式說起,目前公鏈的智能合約的執行,不管是發快節點,還是驗證節點,都要求在發塊間隔內串行同步執行,一個都不能少。區別是前者用於生成交易結果,後者用於效驗這一結果。不考慮這兩類節點的執行先後關係,甚至忽略非智能合約部分的工作負載,單從性能角度,我們可以近似等價這個公鏈為一台以性能最差節點為短木板的計算機。

那麼這台計算機的性能大概怎樣呢?考慮到某知名偽公鏈(實質為聯盟鏈)用了webasm作為託管運行時環境,我們可以拿另外一個更常用的託管運行時環境的標準測試SPECjbb2015的結果作為基礎進行推導。關於SPECjbb2015的細節大家可以去對方官網去看下,簡單就是去掉網絡和IO因素去純粹測試跑Java業務邏輯的性能。這些數據一般是由服務器生產廠家在充分調優後測試並發佈,目前較新的結果是去年思科為UCS C240 M5系統而發佈的,在這台裝有2個28核的Xeon 810,384G內存的高端服務器上,SPECjbb的性能結果為每秒155,296個最大操作。請注意,這是充分使用了SMP和多核計算資源的值,如果假設這個系統具有完美延展性,那麼單核的性能應該是2773操作,如果把操作理解成為區塊鏈交易,就大概知道它的最高性能是多少。

我們知道目前某偽公鏈的VM是單線程的,SPECjbb數據有一定程度的說明意義。但是區塊鏈TPS跟它的不同點有:
1、SPECjbb已經排除了IO和網絡因素,而且長時間結果的統計已經把系統加載、預熱等因素排除在外,這對一個公有鏈是不可能的;
2、Webasm性能可能優於Oracle JVM,智能合約的難度可能也低於SPECjbb的業務,當然也可能更複雜,畢竟是去中心化一切了。

那麼那個所謂的百萬TPS是怎麼得來的呢?我覺得可能是基於每個區塊都裝滿交易的前提下,再除以一個很低的發塊間隔(譬如說0.5s),然後就能算出一個比PoW高很多的單鏈TPS,再加上不明所以任意數量的側鏈,然後一個百萬TPS就這麼炮製出爐了。這就相當於把卡車的最大載貨量作為標稱,而完全不管真實載貨量,及生產及消費完全脫節。

那麼運行智能合約的區塊鏈是否可以實現高TPS呢?如果可以,如何做到?我個人回答是:可以做到,需要通過以下兩個方面共同發力的方式:
1、引入線程級並行(TLP),以充分發揮每個節點的硬件線程能力;
2、引入節點級並行(NLP),但是必須得考慮節點不可靠的因素,所以最終可能變成了分片級並行(PLP)

Coin Marketplace

STEEM 0.18
TRX 0.15
JST 0.028
BTC 63177.41
ETH 2439.37
USDT 1.00
SBD 2.58