區塊鏈本質論

區塊鏈被大家關注件好事情,但非常不希望看到各種區塊鏈項目盲目上馬,造成各種社會資源的浪費。區塊鏈技術本身尚在發展階段,還有很多核心技術問題有待突破,對區塊鏈技術本質還充斥着各種不同的理解。後面幾天我們將就區塊鏈的計算本質,技術難點,業務調整,社會影響等方面和大家分享。

(3) 性能 : 吞吐量、確認延遲和狀態容量

咱買個電腦,大家都知道要看處理器 (CPU) 的速度,每秒能處理多少指令;也會要看內存容量,這基本上決定了我們能同時開多少個應用,打開多大的文件並且不卡。區塊鏈系統,也是類似,吞吐量類似於一臺電腦的 CPU 處理速度,決定了每秒可以處理多少個交易;而狀態容量類似於一臺電腦的內存容量,決定了整個系統可以承載多少個用戶 (地址) 在各個應用裏面的狀態。

有個額外的指標是確認延遲,這個源自一個很奇特的現象。區塊鏈系統可以接受一個交易,但是沒處理或者沒處理完,就開始接受下一個交易了。這個時候你就會發現,例如每秒 100 個交易的處理吞吐量,並不是你發一個交易,1/100 秒之後這個交易就處理完,並且被確認了。通常每個交易會需要歷經更多的時間,才最終得以確認。

比特幣性能很弱雞,大家都知道,大約平均每秒處理 7 個交易。每個交易僅包含幾個大整數的加減法,如果單純是計算這些交易,隨便拿個筆記本每秒都能算上百萬的交易。那爲啥比特幣這麼慢呢?先說個結論,這個事情不能賴在共識算法頭上,這不是 PoW 的問題。共識算法的事兒可以先看上一篇 :

王嘉平:簡版 區塊鏈本質論 (2): 共識本質 zhuanlan.zhihu.com簡版 區塊鏈本質論 (3): 性能本質之吞吐量

比特幣慢,有人說是 PoW 的難度很高,要十分鐘纔算一個塊,也有人說比特幣需要大量的算力才行。這些其實都是誤解,把因果搞反了。十分鐘纔出一個塊,是因爲協議就是這麼定的,不讓出太快。如果大家算力多了,出塊出得快了。比特幣網絡的算力調整算法會自動加大 PoW 難度,使得出塊速度始終保持在十分鐘一塊的樣子。需要大量的算力,是因爲大家都要搶着去參與比特幣的這個共識過程,因爲每搶到一次機會,獎勵 25 個比特幣呀,看了一下,今天 9000 多美元一個。

所以,就這樣參與比特幣共識的算力越來越多,PoW 的難度也越來越高,就是我們今天看到的狀況。但是這個的 PoW 算力,只是在爭搶出塊機會,這個算力再大,也不會使得比特幣處理交易的速度有絲毫的提升。比特幣系統,吞吐量低的原因是因爲,其最初上線的時候,順應當時的底層互聯網的通訊能力,設定了每十分鐘出一個塊,每個塊大小爲 1M 字節。然後每個交易差不到需要 200 到 300 個字節,然後綜合起來就是這個大概 7 幾個交易每秒的吞吐量了。

爲什麼比特幣系統要這樣設計呢?不能出塊間隔小一點,或者每個塊大一點嗎?到底是什麼被什麼東西限制住了呢?答案是,

網絡帶寬從根本上限制了區塊鏈的吞吐量

這就是爲什麼,我去年還看項目的時候,對於那些吹幾十萬幾百萬 TPS 的項目。我一般就問一個問題,你的系統跑起來需要多少帶寬?要那麼高的帶寬,你就只能把所有節點放在一個機房裏面,用局域網連起來,這不是區塊鏈,這叫做雲服務 .....

王嘉平:簡版 區塊鏈本質論 (1): 計算本質 zhuanlan.zhihu.com簡版 區塊鏈本質論 (3): 性能本質之吞吐量

咱開頭第一篇就講到,區塊鏈是在一個鬆散分佈的節點之間,接力執行計算的過程。那麼,計算的過程要能被接力,那就意味着每個節點都需要獲得這個計算的最新的上下文,最新的數據和狀態。在區塊鏈裏面,具體的做法是,有節點出了一個塊之後,必須要有足夠的時間,讓大部分其他參與者都同步到這個新的塊,然後再出下一個塊。就是因爲這個原因,吞吐量會受到網絡帶寬的限制,不能太高,否則區塊鏈網絡就會無法達成共識的一致性。

然後,畢竟我們現在的互聯網已經比起 10 年前要快不少了。所以,現在把比特幣網絡加快幾十倍其實根本不需要什麼算法的改進,改大塊大小,改小出塊間隔就可以輕鬆實現至少幾十倍的吞吐量提升。但是如果要進一步提高,並且還要保證其去中心的程度,這就有很大的理論挑戰了。

這裏需要強調一下,去中心的程度和性能是有矛盾的。去中心的程度要求,儘量多的人可以參與到網絡裏面來,可以自己運行一個節點。那麼,帶寬要求就不能太高,要匹配互聯網接入的平均帶寬水平。爲什麼 DPOS(例如 EOS) 這麼高吞吐量?因爲它去中心的程度基本沒有,無異於雲服務,那麼他就可以利用非常高的帶寬,是普通互聯網接入帶寬的幾千倍,那麼吞吐量當然就輕鬆提升了。

隨着吞吐量的提升,除了帶寬,對每個節點的 CPU 處理能力,磁盤的讀寫能力也都會有更高要求。這裏強調帶寬,不僅僅是因爲帶寬是首要瓶頸,更是因爲高帶寬對去中心的程度有極大的傷害,因爲高帶寬的接入受到地理位置的限制,基本上只能在數據中心。而 CPU, 磁盤的升級,完全不受地理位置的約束。

後面幾篇,我們繼續聊性能的其他兩個方面。這一篇的擴展閱讀 :

王嘉平:區塊鏈公鏈如何才能快起來 (一)zhuanlan.zhihu.com簡版 區塊鏈本質論 (3): 性能本質之吞吐量

作者簡介
國際計算機網絡系統頂會 NSDI 2019,發表了王嘉平博士團隊關於高性能並行分片區塊鏈系統的論文,這是中國人自主研發成果在區塊鏈核心算法領域首次得到國際專家和同行的認可。

王嘉平博士原爲微軟研究院主管研究員,專注分佈式系統,計算機圖形學和視覺以及用於機器學習的 GPU 集羣等領域的研究,有數十項研究成果發表於 ACM SIGGRAPH/ToG 頂級國際期刊,已授權的美國專利十餘項。他師從沈向洋博士 (現微軟全球執行副總裁),在中科院計算所獲得博士學位。他的博士論文獲得 2009 年度全國百篇優秀博士論文獎,是該年唯一一名計算機科學專業的獲獎者。

來源鏈接:mp.weixin.qq.com