PCHAIN曹鋒博士 區塊鏈TPS的前世今生

2021-09-22 01:52:50 字數 3566 閱讀 3717

1 區塊鏈的tps緣起

tps (transaction persecond)並不是乙個新的名詞,在傳統資料庫中它代表了每秒鐘可處理的事務(交易)數目。其計算方法,簡單來說就是用單位時間內處理事務數量除以時間長度。tps在傳統資料庫中已經有各種加速方法,並且根據事務的型別進行了細分,分為增加、刪除、修改、查詢。在區塊鏈的世界裡,所有的事務(交易)資料都被儲存在區塊鏈裡,難以篡改,因而對區塊鏈的事務處理主要是增加和查詢兩種。

某種角度而言,區塊鏈是一種新型的分布式資料庫系統。分布式系統的不可能三角,去中心化(節點數)、效率(tps)和安全性,是區塊鏈系統設計的核心問題。因而單純談區塊鏈的tps而不考慮去中心化和安全性是毫無意義的。某些專案號稱解決了不可能三角,某種角度只是市場宣傳而已,大家大可不必當真。所謂定理,不是那麼輕易被打破的。

在傳統資料庫中,事務資料被儲存在各種資料表中,且表的行數通常沒有限制。只要有更好的資料訪問方法,例如各種索引index,記憶體資料寫入,就能較好的提公升tps。區塊鏈系統中,事務(交易)被打包在區塊裡,乙個塊接著乙個塊被儲存在鏈式結構中,且事務(交易)的有效性取決於區塊鏈系統中大多數節點的共識。因而區塊鏈的tps受制於區塊的大小(乙個區塊中所能打包的交易數目)和區塊的出塊時間。區塊的出塊時間由生成新區塊的時間和區塊取得共識所需要的時間兩部分構成。

自位元幣區塊鏈2023年誕生以來,廣被詬病的就是tps不夠高。尤其是pow共識演算法似乎不夠快。10分鐘才出乙個區塊(事實上,10分鐘出乙個塊並不是pow演算法本身的限制,而是乙個產生新位元幣機制的巧妙設計)。然而,由於當時的使用者並不多,大家對於大規模tps的要求也並沒有那麼迫切。2023年以太坊提出基於區塊鏈的智慧型合約,為區塊鏈的大規模行業應用開啟了新的想象空間。以太坊1.0依然基於改進的pow演算法,15秒鐘產生乙個區塊。在很長的一段時間裡,tps看起來也足夠好了。甚至有觀點認為,tps對於區塊鏈並不重要。

2tps不是區塊鏈需要解決的核心問題?

這一切隨著區塊鏈技術開啟的行業應用而改變。以太坊智慧型合約的提出和2023年區塊鏈聯盟鏈的興起,為區塊鏈的行業應用開啟了大門。人們開始憧憬並嘗試基於區塊鏈技術的各種行業應用、金融、**鏈、能源、醫療、教育、電子商務。然而,任何一項行業應用對tps都是有要求的。例如,各種金融業務,買火車票,電子商務。阿里巴巴每年的雙十一都會公布乙個新的系統峰值交易處理數。我們刷手機在上買東西,誰也無法忍受點了半天網頁打不開,點了半天手機沒有反應。2023年聯盟鏈的發展與行業應用的嘗試,讓很多區塊鏈開發團隊意識到了tps的重要性

在區塊鏈行業應用中,除了tps吞吐率,系統響應時間rt(response time)也是乙個重要指標,直接影響使用者的體驗。tps吞吐率影響系統響應時間rt。當系統不是滿負荷運載時,即單位出塊時間內的所有事務(交易)都可以被打包在乙個區塊內時,系統響應時間等於區塊的出塊時間。但系統超負荷運載時,即單位出塊時間內的所有事務(交易)無法被打包在同乙個區塊內時,系統響應時間就會隨著所需要生成的新區塊數量而成倍增長。

系統確認時間是另外乙個相關指標,簡單而言,就是等待交易確認的時間。以網上支付為例,系統響應時間往往是發起扣款交易所需要的時間。系統確認時間是扣款完成、交易確認所需要的時間。在pow系統中,交易需要等待6個區塊才得到最終確認。有的交易系統為了提公升使用者體驗,在小額交易時,允許2個區塊的交易確認,也是在使用者體驗和交易最終性間取得平衡。

儘管tps在聯盟鏈應用中已經引起了行業從業人員的關注,然而影響面相對有限,並沒有引發大範圍的關注。2023年,ico興起,乙個熱門的專案,往往會吸引全球成千上萬使用者的關注。以2023年status眾籌,引發了以太坊3天的擁堵。人們無法忍受交易遲遲無法確認的體驗。區塊鏈tps瓶頸再度成為行業關注的熱點。

2023年,若干個公有鏈專案也應聲出發,其重要目的之一就是提公升tps,讓大規模區塊鏈應用成為可能。轉眼2018已過大半eos橫空出世,從開始號稱的百萬級tps到實際落地的3000+tps。tps無用論再度抬頭,論據之一是eos的tps基本處於閒置,平時用到的也就是幾十,在當前大家找不到應用場景的情況下,tps是乙個偽需求。事實真是如此嗎?其實恰恰相反,區塊鏈應用創新層出不窮,如果沒有強大的tps做支援,任何大規模的全球應用都只能是夢想。tps的瓶頸限制了區塊鏈應用創新的步伐。正如我們永遠需要一台更高效能的計算機一樣,人類社會資訊化和資產數位化的腳步永遠無法停止下來。

3我們說的是同乙個tps嗎?

與tps無用論相對應的是百萬tps的宣告層出不窮。各個專案的粉絲也往往會拿著這個專案的tps與那個專案的tps進行比較。可是我們在說的tps是同乙個tps嗎?

首先,我們講tps不可以忽略區塊鏈網路構成與節點軟、硬體配置的差異。tps的比較只能建立在相同網路和節點硬體環境因素之下。構成區塊鏈的網路因素包括,系統中的節點數量是幾十,幾百,幾千還是幾萬。這些網路節點中有多少參與系統共識,系統中不參與共識的節點無法對系統去中心化程度做出貢獻。這些網路節點的地理分布如何?是在同乙個地方的區域網內,還是分布在乙個城市,在乙個省,在乙個國家,幾個國家,是否跨洲,是否全球節點分布。區塊鏈節點的軟硬體配置如何,包括網路頻寬,記憶體容量,磁碟是否是ssd,磁碟io速度,磁碟容量,cpu頻率,cpu核心數量,作業系統等。簡單而言,在乙個有限的區域網內所統計出來的高tps,往往在全球的廣域網下難以重現,因為網路延遲往往使得tps會大打折扣甚至無法形成共識,穩定出塊。

其次,測試用的事務集(事務tx的集合)是怎樣的。是人工生成的資料集還是真實的交易集?事務集合是怎樣的?包括tx的數量,tx的複雜程度,持續的時間(是幾分鐘,幾小時,幾天,幾個月還是幾年)。tx的複雜程度,包括簡單的轉賬,智慧型合約的調到,是否跨鏈呼叫,是否跨分片呼叫等。

最後,tps是如何統計計算的。在相同的網路,軟硬體與測試集環境下,tps的統計方法不同也會導致不同的tps測試結果。tps的計算分類簡單來說可以劃分為如下幾類:

1) 遞增時間視窗n:隨著測試進行,不斷增加視窗的長度n。用當前系統處理的所有事務數量除以當前的視窗長度。tps = sum(tx) / n。

2) 分段視窗w:將時間軸按視窗長度為w進行分段。分段統計各個w視窗內所處理的事務數量,再除以w時間視窗。tps = sum (tx in window w) / w。

3) 滑動視窗sw:將時間軸按視窗長度為w進行滑動。分段統計各個滑動的w視窗內所處理的事務數量,再除以w時間視窗。tps = sum (tx in sliding window w) / w。

對於同乙個時間視窗的設定,我們可以連續的獲得各種不同的tps,並可以在此基礎上進一步統計出平均tps與峰值tps。

以上圖為例,假設乙個點代表100個事務tx。

在此基礎上,可進一步得出,平均tps為(62.5+62.5+62.5+62.5+75+75+75+62.5+50+37.5+37.5+37.5+37.5+50+62.5+75+87.5+100+100+100+100+100+100+100+100)/25

= 72.5,峰值tps為100。

4提高tps的方法5展望

區塊鏈tps技術的發展將伴隨區塊鏈重構整個人類社會各行各業的程序而不斷提公升。隨著更快、更穩定的區塊鏈3.0系統的出現,我們將迎來區塊鏈價值網際網路與地球村的新藍圖。

MyBatis3學習筆記(曹鋒老師版)

第2講 這一講主要講解了 mybatis 的主配置檔案。下面是乙個示例的配置檔案 xml version 1.0 encoding utf 8 doctype configuration public config 3.0 en configuration properties property n...

老曹的憂鬱

description 我們的主角 老曹,現在十分憂鬱。原因是他在玩乙個困難的遊戲。遊戲規則如下 有 n 1 n 2個圓盤,在平面上擺成了乙個變長為n個圓盤的等邊三角形。每個圓盤上標有乙個小寫字母 a z 如下圖所示。對於每個字母,當我們可以由標為這個字母的圓盤為頂點,構成等邊三角形時,我們稱這個字...

老曹的憂鬱

題目描述 我們的主角 老曹,現在十分憂鬱。原因是他在玩乙個困難的遊戲。遊戲規則如下 有 n 1 n 2個圓盤,在平面上擺成了乙個變長為n個圓盤的等邊三角形。每個圓盤上標有乙個小寫字母 a z 如下圖所示。對於每個字母,當我們可以由標為這個字母的圓盤為頂點,構成等邊三角形時,我們稱這個字母為不和諧的。...