dubbo图形化界面搭建_使用 JMeter 进行 Dubbo 性能测试
1 前言
說道性能測(cè)試工具,你會(huì)立刻聯(lián)想到哪一個(gè)?ab(ApacheBench)、JMeter、LoadRunner、wrk…可以說市面上的壓測(cè)工具實(shí)在是五花八門。那如果再問一句,對(duì) Dubbo 進(jìn)行性能壓測(cè),你會(huì) pick 哪一個(gè)?可能大多數(shù)人就懵逼了。可以發(fā)現(xiàn),大多數(shù)的壓測(cè)工具對(duì)開放的協(xié)議支持地比較好,例如:HTTP 協(xié)議,但對(duì)于 Dubbo 框架的私有協(xié)議:dubbo,它們都顯得力不從心了。
如果不從通用的壓測(cè)工具上解決 Dubbo 的壓測(cè)需求問題,可以自己寫 Dubbo 客戶端,自己統(tǒng)計(jì)匯總結(jié)果,但總歸不夠優(yōu)雅,再加上很多開發(fā)同學(xué)沒有豐富的測(cè)試經(jīng)驗(yàn),很容易出現(xiàn)一些偏差。說到底,還是壓測(cè)工具靠譜,于是便引出了本文的主角 —— jmeter-plugins-for-apache-dubbo。這是一款由 Dubbo 社區(qū) Commiter – 凝雨 同學(xué)開發(fā)的 JMeter 插件,可以非常輕松地對(duì) Dubbo 實(shí)現(xiàn)性能測(cè)試。
2 JMeter 介紹
在開始?jí)簻y(cè) Dubbo 之前,先簡(jiǎn)單介紹一下這款開源的性能測(cè)試工具 —— JMeter。JMeter 是 Apache 組織基于 Java 開發(fā)的一款性能測(cè)試工具。它最初被設(shè)計(jì)用于 Web 應(yīng)用測(cè)試,但后來擴(kuò)展到其他測(cè)試領(lǐng)域,并可以在 Windows、Mac、Linux 環(huán)境下安裝使用。JMeter 還提供了圖形界面,這使得編寫測(cè)試用例變得非常簡(jiǎn)單,具有易學(xué)和易操作的特點(diǎn)。
JMeter 官網(wǎng):http://jmeter.apache.org/download_jmeter.cgi2.1 安裝 JMeter
截止本文發(fā)布,官方的最新版本為:apache-jmeter-5.1.1.zip , 下載后直接解壓即可。
jmeter目錄
在 ${JMETER_HOME}/bin 下找到啟動(dòng)腳本,可以打開圖形化界面
- Mac/Linux 用戶可以直接使用 jmeter 可執(zhí)行文件,或者 jmeter.sh 啟動(dòng)腳本
- Windows 用戶可以使用 jmeter.bat 啟動(dòng)腳本
2.2 命令行提示信息
啟動(dòng)過程中會(huì)有一段命令行日志輸出:
================================================================================Don't use GUI mode for load testing !, only for Test creation and Test debugging.For load testing, use CLI Mode (was NON GUI): jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]& increase Java Heap to meet your test requirements: Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch fileCheck : https://jmeter.apache.org/usermanual/best-practices.html================================================================================注意到第一行的提示,GUI 僅僅能夠用于調(diào)試和創(chuàng)建測(cè)試計(jì)劃,實(shí)際的性能測(cè)試需要使用命令行工具進(jìn)行。
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
- 【jmx file】:使用 GUI 創(chuàng)建的測(cè)試計(jì)劃文件,后綴名為 .jmx
- 【results file】:測(cè)試結(jié)果文本文件輸出路徑
- 【Path to web report folder】:測(cè)試報(bào)告輸出路徑,JMeter 的強(qiáng)大之處,可以生成圖文并茂的測(cè)試報(bào)告
2.3 GUI 界面展示
上圖所示為 JMeter 的主界面。官方提供了國(guó)際化支持,通過 【Options】->【Choose Language】可以將界面語言變更為簡(jiǎn)體中文。
3 JMeter 壓測(cè) HTTP
本節(jié)以 JMeter 壓測(cè) HTTP 為引子,介紹 JMeter 的使用方式,讓沒有使用過 JMeter 的讀者對(duì)這款工具有一個(gè)較為直觀的感受。
3.1 創(chuàng)建線程組
在“測(cè)試計(jì)劃”上右鍵 【添加】–>【線程(用戶)】–>【線程組】。
給線程組起一個(gè)名字,方便記憶。
- 線程數(shù):決定了由多少線程并發(fā)壓測(cè)
- Ramp-Up:代表了 JMeter 創(chuàng)建所有線程所需要的時(shí)間,如圖所示則代表每 0.1s 創(chuàng)建一個(gè)線程
- 循環(huán)次數(shù):在運(yùn)行所設(shè)置的次數(shù)之后,壓測(cè)將會(huì)終止。如果想要運(yùn)行固定時(shí)長(zhǎng)的壓測(cè),可以設(shè)置為:永遠(yuǎn),并在下面的調(diào)度器中指定持續(xù)時(shí)間
3.2 增加 HTTP 取樣器
在剛剛創(chuàng)建的線程組上右鍵 【添加】–>【取樣器】–>【HTTP請(qǐng)求】。
為 HTTP 取樣器配置上壓測(cè)地址和必要的參數(shù)
3.3 添加察看結(jié)果樹
在剛剛創(chuàng)建的線程組上右鍵 【添加】–>【監(jiān)聽器】–>【察看結(jié)果樹】。
只有添加了【察看結(jié)果樹】才能讓我們看到 GUI 中測(cè)試的結(jié)果。
3.4 準(zhǔn)備 HTTP Server
使用 SpringBoot 可以快速構(gòu)建一個(gè) RestController,其暴露了 localhost:8080/queryOrder/{orderNo} 做為壓測(cè)入口
@RestControllerpublic class OrderRestController { @Autowired OrderService orderService; @RequestMapping("/queryOrder/{orderNo}") public OrderDTO queryOrder(@PathVariable("orderNo") long orderNo) { return orderService.queryOrder(orderNo); }}被壓測(cè)的服務(wù) OrderService :
@Componentpublic class OrderService { public OrderDTO queryOrder(long orderNo) { OrderDTO orderDTO = new OrderDTO(); orderDTO.setOrderNo(orderNo); orderDTO.setTotalPrice(new BigDecimal(ThreadLocalRandom.current().nextDouble(100.0D))); orderDTO.setBody(new byte[1000]); return orderDTO; }}3.5 驗(yàn)證結(jié)果
在剛剛創(chuàng)建的線程組上右鍵 【驗(yàn)證】,執(zhí)行單次驗(yàn)證,可以用來測(cè)試與服務(wù)端的連通性。在【察看結(jié)果樹】選項(xiàng)卡中可以看到【響應(yīng)數(shù)據(jù)】已經(jīng)正常返回了。
3.6 執(zhí)行測(cè)試計(jì)劃
還記得之前啟動(dòng) GUI 時(shí)控制臺(tái)曾經(jīng)提示過我們,GUI 只負(fù)責(zé)創(chuàng)建測(cè)試計(jì)劃并驗(yàn)證,不能用于執(zhí)行實(shí)際的并發(fā)壓測(cè)。在 GUI 中準(zhǔn)備就緒之后,我們可以在【文件】->【保存測(cè)試計(jì)劃為】中將測(cè)試計(jì)劃另存為 rest-order-thread-group.jmx 測(cè)試文件,以便我們?cè)诿钚羞M(jìn)行壓測(cè):
1jmeter -n -t ./rest-order-thread-group.jmx -l ./result.txt -e -o ./webreport下圖展示了最終生成的測(cè)試報(bào)告,主要匯總了執(zhí)行次數(shù)、響應(yīng)時(shí)間、吞吐量、網(wǎng)絡(luò)傳輸速率。
在實(shí)際的測(cè)試報(bào)告中,還有更加詳細(xì)的維度可以展示,上述只是展示了匯總信息。
4 JMeter 壓測(cè) Dubbo
JMeter 默認(rèn)并不支持私有的 dubbo 協(xié)議,但其優(yōu)秀的擴(kuò)展機(jī)制使得只需要添加插件,就可以完成 Dubbo 壓測(cè),這一節(jié)也是本文重點(diǎn)介紹的部分。
4.1 安裝 jmeter-plugins-for-apache-dubbo
插件地址:https://github.com/thubbo/jmeter-plugins-for-apache-dubbo目前該插件支持對(duì)最新版本的 Dubbo 進(jìn)行壓測(cè),推薦的安裝方式:
安裝插件后的ext目錄
4.2 增加 Dubbo 取樣器
之前的小結(jié)已經(jīng)介紹了如何添加線程組和 HTTP 取樣器,現(xiàn)在想要對(duì) Dubbo 應(yīng)用進(jìn)行性能測(cè)試,可以直接復(fù)用之前的線程組配置,在線程組上右鍵 【添加】–>【取樣器】–>【Dubbo Sample】。
創(chuàng)建 Dubbo 取樣器之后,可以對(duì)其進(jìn)行配置
4.3 準(zhǔn)備 Dubbo Provider
復(fù)用 HTTP 取樣器時(shí)的 OrderService
@Servicepublic class OrderDubboProvider implements OrderApi { @Autowired OrderService orderService; @Override public OrderDTO queryOrder(long orderNo) { return orderService.queryOrder(orderNo); }}配置 application.properties,注冊(cè)服務(wù)到 Zookeeper 注冊(cè)中心:
dubbo.scan.basePackages=com.alibaba.edas.benchmarkdubbo.application.name=dubbo-provider-demodubbo.registry.address=zookeeper://127.0.0.1:2181dubbo.protocol.port=208804.4 驗(yàn)證結(jié)果
在 JMeter 中配置好 Dubbo 服務(wù)所連接的注冊(cè)中心,接著通過 Get Provider List 可以獲取到服務(wù)提供者列表,以供壓測(cè)選擇。在線程組上右鍵 【驗(yàn)證】,執(zhí)行單次驗(yàn)證,可以用來測(cè)試與服務(wù)端的連通性。在【察看結(jié)果樹】選項(xiàng)卡中可以看到【響應(yīng)數(shù)據(jù)】可以正常執(zhí)行 Dubbo 調(diào)用了。
4.5 執(zhí)行測(cè)試計(jì)劃
可以將 Dubbo 取樣器和 HTTP 取樣器包含在同一個(gè)測(cè)試計(jì)劃中一起執(zhí)行,同時(shí)進(jìn)行了 Dubbo 接口與 Rest 接口的性能對(duì)比。在命令行進(jìn)行壓測(cè):
1jmeter -n -t ./rest-order-thread-group.jmx -l ./result.txt -e -o ./webreport下圖展示了最終生成的測(cè)試報(bào)告:
Dubbo 接口與 Rest 接口所封裝的業(yè)務(wù)接口均為 OrderService,所以壓測(cè)上的差距直接體現(xiàn)出了 Dubbo 和 Rest 的差距。從報(bào)告對(duì)比上來看,Dubbo 接口的平均 RT 遠(yuǎn)低于 Rest 接口。
5 總結(jié)
本文從零到一介紹了使用 JMeter 壓測(cè) HTTP 的方法,讓讀者熟悉 JMeter 的使用方式,并著重介紹了使用 jmeter-plugins-for-apache-dubbo 插件壓測(cè) Dubbo 的方法。
由于 JMeter Plugin 的限制,目前 Dubbo 的壓測(cè)請(qǐng)求是通過泛化調(diào)用進(jìn)行發(fā)送的,會(huì)有一定程度的性能下降,所以在實(shí)際評(píng)估 Dubbo 接口性能時(shí),接口實(shí)際性能會(huì)比壓測(cè)結(jié)果更加樂觀。
總結(jié)
以上是生活随笔為你收集整理的dubbo图形化界面搭建_使用 JMeter 进行 Dubbo 性能测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: url能访问但new file()找不到
- 下一篇: java 重复提交_java解决重复提交