區塊鍊的速度困境:“貴”在信任,“慢”得其所
Posted on 2019-07-24 15:52 FISCO-BCOS 閱讀(...) 評論(...) 編輯 收藏
(本文原創作者:張開翔-FISCO BCOS首席架構師 )
區塊鍊領域最受關注的一個方面是“性能”,或者說“TPS”,比起來有種“不服就跑個分”的感覺。跑分項包括TPS(每秒處理交易數)、并發能力(同時承擔交易量)、交易響應時間等。然而,相比每秒能發送200萬封電子郵件、支援數百萬使用者同時登入一個社交平台的網際網路服務來說,區塊鍊的速度簡直是太!慢!了! 甚至有人調侃說“區塊鍊,不就是最慢的分布式資料庫嗎”(這句話可以展開多方面解析,本篇先讨論慢的問題)
區塊鍊技術前景無限美好,可如果沒有高性能表現作為支撐,無法運作快速的、執行複雜的智能合約邏輯,快速的完成交易事務,那些令人振奮的前景就隻能是摘不到的鏡中花,撈不着的水中月。
#舉個例子
數錢,比如數一個億(是不是好刺激~)
1、如果一個人數,慢,但好在專注,全力以赴,在可見的時間内可以數完。這叫單線程密集計算。
2、如果N個人一起數,每人平分,分頭同時數,最後彙總總數,所用時間基本上是第一種情況的1/N,參與的人越多,所需時間就越少,TPS就越高。這叫并行計算和MapReduce。
3、如果N個人一起數,但由于這N個人互相不信任,得彼此盯着,首先抽簽選一個人,這個人撿出一疊錢(比如一萬塊一疊)數一遍,打上封條,簽名蓋章,然後給另外幾個人一起同時重新數一遍,數好的人都簽名蓋章,這疊錢才算點好了。然後再抽簽換個人檢出下一疊來數,如此循環。因為一個人數錢時别人隻是盯着,而且一個人數完且打上封條和簽名的一疊錢,其他人要重複數一遍再簽名确認,那麼可想而知,這種方式肯定是最慢的。這就叫區塊鍊。
但換個角度,方式1,一個人數有可能會數錯,這個人有可能生病或休假,導緻沒有人幹活,更壞的結果是,這個人可能調換假币或者私藏一部分錢,報一個錯的總數。
方式2,N個人中會有一定比例數錯,也可能其中一個人休假或者怠工,導緻最終結果出不來,更可能因為人多手雜,出現部分人偷錢、換假錢、報假數……
方式3,很慢,但是很安全,因為所有人都會盯着全過程進行驗算,是以肯定不會數錯。如果其中有人掉線,可以換人撿出新的一疊錢繼續數,工作不會中斷。所有數過的錢上面都有封條和簽名,不會被做手腳,萬一出錯了也可以找到責任人進行追責。這種情況下,資金安全是完全得到保障的,除非所有的參與者都串通一氣了。該模式下,參與的人越多,資金安全性就越高。
是以,區塊鍊方案緻力追求的是,在缺乏互相信任的分布式網絡環境下,實作交易的安全性、公允性,達成資料的高度一緻性,防篡改、防作惡、可追溯,付出的代價之一就是性能。
最著名的比特币網絡,平均每秒隻能處理5~7筆交易,10分鐘出1個塊,達到交易的最終确定性需要6個塊也就是1個小時,且出塊過程相當損耗算力(POW挖礦)。
号稱“全球計算機”的以太坊,每秒能處理的交易數也僅是2位數的量級,十幾秒出1個塊。以太坊目前也是采用損耗算力的共識機制POW挖礦,會逐漸遷移到POS共識機制。
這兩個網絡在粉絲們爆炸性地進行交易時,可能會陷入擁堵狀态,大量的交易發出後,一兩天甚至更長的時間才會被打包确認。
但在資金安全就是命的場景下,有些事情是“必須”的,是以,即使慢,還是會考慮選擇區塊鍊。
#區塊鍊為什麼慢
分布式系統裡有一個著名的理論叫CAP理論:2000年,Eric Brewer教授提出一個猜想:一緻性、可用性和分區容錯性三者,無法在分布式系統中被同時滿足,并且最多隻能滿足其中兩個。
CAP的大緻解釋
Consistency(一緻性) :資料一緻更新,所有資料變動都是同步的
Availability(可用性):好的響應性能
Partition tolerance(分區容錯性): 可靠性
這個理論雖然有一些争議,但從工程實踐中看,和光速理論一樣,可以無限逼近極緻但是難以突破。
區塊鍊系統能把一緻性和可靠性做到極緻,但是“好的響應性能”方面一直有點被人诟病。
我們面向的“聯盟鍊”領域,因為在準入标準,系統架構、參與節點數、共識機制等方面都和公鍊不同,其性能表現遠高于公有鍊,但是目前幾個主流的區塊鍊平台,在正常PC級伺服器硬體上實測,TPS一般是在千級的樣子,交易延遲一般在1秒到10秒這個級别。(聽說TPS十幾萬級和百萬級千萬級區塊鍊已經做出來了?好吧,期待)
筆者曾在大型網際網路公司工作多年,在海量服務領域,面對C10K問題(concurrent 10000 connection,萬級并發)已經有輕車熟路的解決方案,對一般的電商業務或内容浏覽服務,普通pc級伺服器單機達到幾萬TPS,且平均延時在500毫秒以内,飛一般的體驗已經是常态,畢竟網際網路産品卡一下說不定就會導緻使用者流失。對于快速增長的網際網路項目,通過平行擴容、彈性擴容、立體擴容的方式,幾乎能無底線、無上限地面對山呼海嘯的海量流量。
相比而言,區塊鍊的性能比網際網路服務慢,而且難以擴容,根因還是在其“用計算換信任”的設計思路上。
具體哪裡慢呢?
從“古典”區塊鍊的系統内部來看