HyperBench白皮書_第1頁
HyperBench白皮書_第2頁
HyperBench白皮書_第3頁
HyperBench白皮書_第4頁
HyperBench白皮書_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、!摘要 1產(chǎn)品介紹 2整體架構(gòu) 3產(chǎn)品架構(gòu) 3核心流程 4測試引擎 6鉤子函數(shù) 6虛擬機(jī) 7插件 8適配器 9區(qū)塊鏈客戶端 9區(qū)塊鏈平臺 10分布式控制器 11上下文同步 11數(shù)據(jù)反饋 13總結(jié)與展望 14*+隨著區(qū)塊鏈行業(yè)不斷發(fā)展,不斷滲透到金融、政務(wù)、司法、民生等各個領(lǐng)域,區(qū)塊鏈技術(shù)也日益受到人們的關(guān)注。然而,當(dāng)你想選擇某一區(qū)塊鏈平臺給業(yè)務(wù)問題輸出解決方案時,卻無法了解各種區(qū)塊鏈平臺的性能作為方案參考,為解決這一痛點(diǎn),趣鏈科技開源研究小組為大眾提供一個高性能、高易用、分布式的區(qū)塊鏈平臺性能測試工具:HyperBench。HyperBench 作為通用的性能基準(zhǔn)測試框架,可靈活適配趣鏈區(qū)塊鏈

2、底層平臺、Hyperledger/Fabric 等多種主流區(qū)塊鏈平臺,配置操作方便,腳本定制簡單,可以快速構(gòu)建區(qū)塊鏈平臺性能測試。HyperBench實(shí)現(xiàn)了強(qiáng)大的智能調(diào)度引擎,通過分布式控制器調(diào)節(jié)多臺壓力機(jī),能夠?qū)毫?shù)據(jù)運(yùn)行時上下文進(jìn)行分發(fā)、調(diào)控、匯總及可視化分析,同時又能保證單臺壓力機(jī)具有良好的壓力輸出能力,強(qiáng)大而又全面,是一個不可多得的區(qū)塊鏈性能測試平臺。,-./HyperBench 簡單來說是一個通用的區(qū)塊鏈性能測試工具,他支持多種待測試區(qū)塊鏈系統(tǒng),允許用戶使用自定義的測試用例,可以從云端和本地機(jī)器生成負(fù)載,通過測試腳本測試區(qū)塊鏈平臺,最終得到想要的性能測試結(jié)果。! 1-1 Hyper

3、Bench #$%HyperBench 的優(yōu)勢在于通用性、易用性以及可伸縮性:通用性:可以適配 Hyperchain、Fabric 等多種不同的區(qū)塊鏈主流平臺,期望最終可以達(dá)到區(qū)塊鏈全平臺的支持;易用性:配置操作方便、測試腳本定制簡單(基于統(tǒng)一標(biāo)準(zhǔn)庫)、可快速構(gòu)建平臺測試,測試指標(biāo)多樣,支持可視化工具進(jìn)行數(shù)據(jù)渲染,最終實(shí)現(xiàn)數(shù)據(jù)可視化統(tǒng)計(jì)分析??缮炜s性:單一機(jī)器生成的壓測負(fù)載量很快就會達(dá)到機(jī)器的資源上限,而 HyperBench 具備良好的伸縮彈性,采用分布式集群方案進(jìn)行壓力調(diào)度,使其具備良好的伸縮延展性,同時還會最大化的優(yōu)化單機(jī)性能,使其具備良好的壓力輸出能力。 01232.1 !#$為防止用

4、戶一開始使用 HyperBench 時感到復(fù)雜,在這里簡單對 HyperBench架構(gòu)進(jìn)行介紹,整體來說 HyperBench 采用方便、靈活、可擴(kuò)展的組織架構(gòu),是一個可以對 SUT(System Under Test, 被測系統(tǒng))進(jìn)行持續(xù)產(chǎn)生工作負(fù)載(壓測)并進(jìn)行持續(xù)監(jiān)聽系統(tǒng)壓測狀態(tài)的服務(wù)。HyperBench 的整體架構(gòu)可以分為四層: master 層、worker 層、虛擬機(jī)層以及區(qū)塊鏈平臺層。master 層! 2-1 HyperBench &()master 層包括控制器和數(shù)據(jù)匯總兩個關(guān)鍵元素,即根據(jù)輸入的測試用例中包含的參數(shù)和腳本來控制平臺按照指定的形式、數(shù)量來進(jìn)行壓力輸出,并匯總

5、壓力輸出情況進(jìn)行數(shù)據(jù)統(tǒng)計(jì)??刂破髫?fù)責(zé)控制平臺的整個流程,包括根據(jù)測試用例進(jìn)行相應(yīng)的初始化、通過分布式控制對壓力機(jī)的壓力輸出情況以及壓力機(jī)對壓力數(shù)據(jù)的統(tǒng)計(jì)控制;數(shù)據(jù)匯總負(fù)責(zé)收集從壓力機(jī)反饋的壓力數(shù)據(jù),并對數(shù)據(jù)進(jìn)行匯總統(tǒng)計(jì)。worker 層worker 層包括壓力調(diào)度和數(shù)據(jù)統(tǒng)計(jì)兩個關(guān)鍵元素,即根據(jù)分布式控制指定的壓力輸出參數(shù),均勻、穩(wěn)定的輸出壓力,并統(tǒng)計(jì)當(dāng)前 worker 輸出的壓力數(shù)據(jù)。壓力調(diào)度負(fù)責(zé)根據(jù)指定的參數(shù),定時、定量的向測試平臺輸出壓力,即一秒鐘總共要輸出多少壓力,每次要輸出多少壓力,多長時間輸出一次等;數(shù)據(jù)統(tǒng)計(jì)負(fù)責(zé)收集 worker 輸出的壓力情況,包括輸出壓力是否成功、輸出壓力的確認(rèn)

6、情況等。虛擬機(jī)層虛擬機(jī)是實(shí)際執(zhí)行壓力輸出的基本單位,在測試中一個虛擬機(jī)具有自己獨(dú)立的 uid 和上下文,運(yùn)行基準(zhǔn)層設(shè)定的測試腳本,模擬一個實(shí)際使用區(qū)塊鏈系統(tǒng)的用戶對區(qū)塊鏈系統(tǒng)進(jìn)行連續(xù)操作,當(dāng)前已實(shí)現(xiàn) lua 版本的虛擬機(jī),后續(xù)根據(jù)需求進(jìn)一步開發(fā) JavaScrip 版本以及 Python 版本的虛擬機(jī)。區(qū)塊鏈平臺層每個虛擬機(jī)通過統(tǒng)一的區(qū)塊鏈客戶端,模擬用戶對區(qū)塊鏈進(jìn)行操作,不同區(qū)塊鏈系統(tǒng)通過 gosdk 實(shí)現(xiàn)接口進(jìn)行適配,可支持多種區(qū)塊鏈平臺如 Hyperchain、 Fabric、Ethreum 等。2.2 %&(由于單臺壓力機(jī)輸出的壓力有限,假設(shè)現(xiàn)在有多臺壓力機(jī),一臺壓力機(jī)作為 maste

7、r 控制整個壓力的輸出,其他壓力機(jī)作為 worker 服從 master 的調(diào)度,配合完成一個名為 case1 的壓力測試,其核心處理流程如圖 2-2 所示。對 master 而言,其流程如下:master 讀取壓力測試文件夾,名為 case1;在 master 中,通過分布式控制啟動 worker 開始向區(qū)塊鏈平臺輸出壓力;收集 worker 的壓力數(shù)據(jù);等待 worker 完成壓力輸出;將壓力數(shù)據(jù)匯總,并進(jìn)行統(tǒng)計(jì)分析。壓力測試結(jié)束。對 worker 而言,其流程如下:初始化虛擬機(jī),并完成壓力測試上下文初始化,包括合約地址、abi 等;通過壓力調(diào)度輸出壓力。每次輸出壓力都經(jīng)過以下步驟:從虛擬

8、機(jī)池中獲取虛擬機(jī);在虛擬機(jī)中,通過對應(yīng)的區(qū)塊鏈平臺客戶端輸出壓力;統(tǒng)計(jì)壓力數(shù)據(jù)。壓力輸出完成后反饋給 master。! 2-2 HyperBench *+,-./014567為了壓力機(jī) worker 能夠高效、靈活的輸送壓力,HyperBench 設(shè)計(jì)了一種可以靈活適配測試腳本的測試引擎。! 3-1 HyperBench *+23在測試引擎中,HyperBench 提供了一系列鉤子函數(shù),測試腳本中只需要實(shí)現(xiàn)相應(yīng)的鉤子函數(shù),通過插件的形式即可創(chuàng)建對應(yīng)腳本語言的虛擬機(jī),并在虛擬機(jī)中執(zhí)行對應(yīng)的鉤子函數(shù)。對于不同的測試場景,可以根據(jù)實(shí)際情況編寫對應(yīng)的測試腳本,從而使得測試腳本更加靈活。另外虛擬機(jī)通過

9、go 語言創(chuàng)建,相對于使用純腳本語言而言,性能更高。3.1 )*+,測試引擎中提供了許多鉤子函數(shù)以供使用。BeforeDeploy:在部署合約前執(zhí)行,只在 master 上執(zhí)行一次,用于完成部署合約前的準(zhǔn)備工作;DeployContract:用于部署合約,屬于對內(nèi)的鉤子函數(shù),即代碼內(nèi)部實(shí)現(xiàn);BeforeGet:在合約部署完成之后、生成壓力機(jī)輸出壓力時的上下文之前執(zhí)行,只在 master 上執(zhí)行一次,可用于合約初始化等;GetContext:用于生成壓力機(jī)輸出壓力時的上下文,屬于對內(nèi)的鉤子函數(shù);BeforeSet:在生成上下文之后、設(shè)置壓力機(jī)上下文之前執(zhí)行,每個 worker上的每個 VM 都會

10、執(zhí)行一次;SetContext:用于設(shè)置壓力機(jī)輸出壓力時的上下文,屬于對內(nèi)的鉤子函數(shù);BeforeRun:在設(shè)置完壓力機(jī)上下文之后、輸出壓力測試前執(zhí)行,每個worker 上的每個 VM 都會執(zhí)行一次;Run:用于輸出壓力,輸出了多少總壓力,就會執(zhí)行多少次;AfterRun:在壓力輸出后執(zhí)行,每個 worker 上的每個 VM 都會執(zhí)行一次;Statistics:用于統(tǒng)計(jì)壓力輸出情況,屬于對內(nèi)的鉤子函數(shù)。3.2 -./虛擬機(jī)作為測試引擎的核心部分,通過調(diào)度提供的鉤子函數(shù)及 go 插件對測試平臺輸出壓力。虛擬機(jī)主要包含以下部分:創(chuàng)建虛擬機(jī):根據(jù)測試腳本的類型,創(chuàng)建不同的虛擬機(jī)。注入鉤子函數(shù):為了測

11、試腳本更加靈活,需要將預(yù)先提供的鉤子函數(shù)注入到虛擬機(jī)中。添加插件庫:HyperBench 將與區(qū)塊鏈平臺交互的客戶端以及一些工具包封裝成插件的形式,以便在虛擬機(jī)中向區(qū)塊鏈平臺輸出壓力、為測試腳本提供對應(yīng)的工具包。加載測試腳本:對于測試引擎對外提供的鉤子函數(shù),需要加載測試腳本中具體鉤子函數(shù)的實(shí)現(xiàn)方法,以便在虛擬機(jī)中調(diào)用。! 3-2 HyperBench 4563.3 01在測試引擎中提供了多種插件供虛擬機(jī)使用,主要提供了以下幾種插件庫:適配器:適配不同的區(qū)塊鏈平臺,作為不同的區(qū)塊鏈平臺客戶端,與之進(jìn)行交互。工具包:提供一些工具方法,以便在測試腳本中使用。索引包:提供當(dāng)前虛擬機(jī)輸出壓力時對應(yīng)的上下

12、文環(huán)境, 例如壓力機(jī)編號和虛擬機(jī)編號等。! 3-3 HyperBench 78提供上述插件的好處有:為測試腳本提供工具類;對于測試引擎中提供的一些對內(nèi)的鉤子函數(shù),使用 go 語言實(shí)現(xiàn),相對于純腳本語言而言,執(zhí)行性能更高;更加便于后續(xù)增加新的插件庫。89:為了能夠向不同的區(qū)塊鏈平臺輸出壓力,適配多種區(qū)塊鏈平臺,HyperBench提供了適配器用于適配不同的區(qū)塊鏈平臺客戶端。! 4-1 HyperBench 9:;適配器以插件的形式添加到虛擬機(jī)中,以便在虛擬機(jī)中向不同的區(qū)塊鏈平臺輸出壓力。為了能夠適配不同的區(qū)塊鏈平臺,HyperBench 抽象出了區(qū)塊鏈客戶端的概念,用于與區(qū)塊鏈平臺進(jìn)行交互,不同

13、的區(qū)塊鏈平臺只需要基于對應(yīng)平臺的 gosdk 實(shí)現(xiàn)對應(yīng)平臺的客戶端,即可通過虛擬機(jī)與之交互。4.1 23467為了適配不同的區(qū)塊鏈平臺,抽象出了區(qū)塊鏈客戶端。區(qū)塊鏈客戶端中定義了如何與區(qū)塊鏈平臺交互的接口,不同的區(qū)塊鏈平臺只需要基于對應(yīng)的 gosdk 實(shí)現(xiàn)對應(yīng)的區(qū)塊鏈客戶端接口即可。區(qū)塊鏈客戶端中定義的接口如下:部署合約: 用于向區(qū)塊鏈平臺部署合約, 在虛擬機(jī)調(diào)用鉤子函數(shù)DeployContract 時,實(shí)際調(diào)用的是此接口對應(yīng)的實(shí)現(xiàn)方法。執(zhí)行合約:用于調(diào)用區(qū)塊鏈平臺中的合約,在鉤子函數(shù) Run 中,根據(jù)實(shí)際情況選擇是否調(diào)用、以及傳入的參數(shù)等。轉(zhuǎn)賬交易:用于向區(qū)塊鏈平臺發(fā)送轉(zhuǎn)賬交易,在鉤子函數(shù)

14、Run 中,根據(jù)實(shí)際情況選擇是否調(diào)用、以及傳入的參數(shù)等。交易確認(rèn):用于查詢交易回執(zhí),在執(zhí)行合約或轉(zhuǎn)賬交易時,確認(rèn)異步處理的交易執(zhí)行結(jié)果。查詢數(shù)據(jù):目前屬于預(yù)留接口。配置項(xiàng):用于接收配置項(xiàng),從而修改在區(qū)塊鏈客戶端發(fā)送交易時的一些參數(shù)進(jìn)行,具體支持哪些參數(shù)根據(jù)區(qū)塊鏈平臺客戶端的實(shí)現(xiàn)類而定。生成上下文:用于生成壓力機(jī)輸出壓力時的上下文,例如合約地址、合約 abi 等。在虛擬機(jī)調(diào)用鉤子函數(shù) GetContext 時,實(shí)際調(diào)用的是此接口對應(yīng)的實(shí)現(xiàn)方法。設(shè)置上下文:用于設(shè)置壓力機(jī)輸出壓力時的上下文,在虛擬機(jī)調(diào)用鉤子函數(shù) SetContext 時,實(shí)際調(diào)用的是此接口對應(yīng)的實(shí)現(xiàn)方法。重置上下文:目前屬于預(yù)留接

15、口。統(tǒng)計(jì):統(tǒng)計(jì)壓力輸出這一時間段里,區(qū)塊鏈平臺的性能表現(xiàn),例如 tps、 bps 等。在虛擬機(jī)調(diào)用鉤子函數(shù) SetContext 時,實(shí)際調(diào)用的是此接口對應(yīng)的實(shí)現(xiàn)方法。4.2 23489目前 HyperBench 支持以下區(qū)塊鏈平臺:FlatoHyperchainFabric 4. ;?:為了便于 HyperBench 中的 master 控制壓力機(jī) worker,提供了分布式控制器協(xié)助 master 管理 worker。! 5-1 HyperBench ?;分布式控制器主要是協(xié)助 master 管理 worker,通過同步上下文,將壓力測試所需的配置文件同步到壓力機(jī)中,并將壓力機(jī)輸出壓力時對

16、應(yīng)的上下文同步到壓力機(jī)中;通過數(shù)據(jù)反饋,將壓力機(jī)輸出的壓力情況反饋到 master 中。5.1 :;上下文同步包含主要包含以下功能:文件上下文同步:HyperBench 只在 master 中接收壓力測試對應(yīng)的配置文件和測試腳本等文件數(shù)據(jù),為了壓力機(jī)worker 也能了解到壓力測試相關(guān)的信息,需要將壓力測試相關(guān)的文件同步到 worker 中,以便壓力機(jī) worker 能夠根據(jù)配置文件進(jìn)行相應(yīng)的初始化等準(zhǔn)備操作。運(yùn)行時上下文同步:HyperBench 在進(jìn)行壓力測試前的一些準(zhǔn)備工作,只在 master 中進(jìn)行,例如部署合約,在 master 中做完相應(yīng)準(zhǔn)備工作后,如果準(zhǔn)備 工作產(chǎn)生的數(shù)據(jù)等對壓力

17、輸出的上下文是相關(guān)的,需要將這些數(shù)據(jù)同步到 worker,以便 worker 能夠獲取到完整的壓力輸出上下文。在上下文同步的過程中,對 master 而言,其流程如下:master 打包壓力測試相關(guān)的文件;master 將打包后的文件上傳到 worker;master 進(jìn)行壓力測試前的準(zhǔn)備,例如部署合約;master 生成壓力測試環(huán)境的上下文,例如合約地址、合約 abi;master 將生成的上下文傳給 worker;對 worker 而言,其流程如下worker 根據(jù) master 傳過來的文件開始進(jìn)行初始化等操作;worker 根據(jù)收到的上下文信息設(shè)置自己的上下文環(huán)境;等待輸出壓力。! 5-2 HyperBench ?;AB015.2 ,數(shù)據(jù)反饋主要用于 master 收集 worker 的壓力輸出情況,以便于 master 對最終對壓力輸出進(jìn)行匯總統(tǒng)計(jì)。目前的數(shù)據(jù)反饋采用的是 master 主動拉取的形式,即每過一段時間,master會主動的從 worker 拉取壓力數(shù)據(jù),拉取的數(shù)據(jù)則用于數(shù)據(jù)匯總統(tǒng)計(jì),數(shù)據(jù)匯總統(tǒng)計(jì)可自行對接可視化組件如 grafana。ABCHyperBench 為區(qū)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論