性能壓測工具選型對比

本文是《Performance Test Together》(簡稱PTT)系列專題分享的第二期,該專題將從性能壓測的設計、實現、執行、監控、問題定位和分析、應用場景等多個緯度對性能壓測的全過程進行拆解,以幫助你們構建完整的性能壓測的理論體系,並提供有例可依的實戰。正則表達式

該系列專題分享由阿里巴巴 PTS 團隊出品。數據庫

第一期:《壓測環境的設計和搭建》服務器

本文致力於給出性能壓測的概念與背景介紹,同時針對市場上的一些性能壓測工具,給出相應的對比,從而幫助你們更好地針對自身需求實現性能壓測。網絡

爲何要作性能壓測

在介紹性能壓測概念與背景以前,首先解釋下爲何要作性能壓測。從09年的淘寶雙十一大促致使多家合做銀行後臺系統接連宕機,到春運期間12306購票難,再到前不久聚美優品促銷活動剛開始就遭秒殺。根據Amazon統計,每慢100毫秒,交易額降低1%。這些事件和統計數據爲你們敲響了警鐘,也客觀說明了性能壓測對於企業應用的重要性。架構

從具體的做用上講,性能壓測能夠用於新系統上線支持、技術升級驗證、業務峯值穩定性保障、站點容量規劃以及性能瓶頸探測。併發

1. 新系統上線支持
在新系統上線前,經過執行性能壓測可以對系統的負載能力有較爲清晰的認知,從而結合預估的潛在用戶數量保障系統上線後的用戶體驗。分佈式

2. 技術升級驗證
在系統重構過程當中,經過性能壓測驗證對比,能夠有效驗證新技術的高效性,指導系統重構。工具

3. 業務峯值穩定性保障
在業務峯值到來前,經過充分的性能壓測,確保大促活動等峯值業務穩定性,保障峯值業務不受損。性能

4. 站點容量規劃
經過性能壓測實現對站點精細化的容量規劃,指導分佈式系統機器資源分配。學習

5. 性能瓶頸探測
經過性能壓測探測系統中的性能瓶頸點,進行鍼對性優化,從而提高系統性能。

綜上所述,性能壓測伴隨着系統開發、重構、上線到優化的生命週期,所以有效的性能壓測對系統的穩定性具備重要的指導意義,是系統生命週期中不可或缺的一部分。

性能壓測概念

性能壓測是經過自動化的測試工具模擬多種正常、峯值以及異常負載條件來對系統的各項性能指標進行測試。

從測試目的上性能壓測又能夠劃分爲負載測試、壓力測試、併發測試、配置測試以及可靠性測試。

  • 負載測試是測試當負載逐漸增長時,系統各項性能指標的變化狀況。
  • 壓力測試是經過肯定一個系統的瓶頸或者不能接受的性能點,來得到系統能提供的最大服務級別的測試。
  • 併發測試經過模擬用戶併發訪問,測試多用戶併發訪問同一個軟件、同一個模塊或者數據記錄時是否存在死鎖等性能問題。
  • 配置測試是經過對被測系統的軟/硬件環境的調整,瞭解各類不一樣方法對軟件系統的性能影響的程度,從而找到系統各項資源的最優分配原則。
  • 可靠性測試是在給系統加載必定業務壓力的狀況下,使系統運行一段時間,以此檢測系統是否穩定。

總的來講,性能壓測是在對系統性能有必定程度瞭解的前提下,在肯定的環境下針對壓測需求進行的一種測試。

如何選取性能壓測工具

在選取合適的性能壓測工具以前,咱們須要先先了解執行一次完整的性能壓測所須要的步驟:

1. 肯定性能壓測目標:性能壓測目標可能源於項目計劃、業務方需求等

2. 肯定性能壓測環境:爲了儘量發揮性能壓測做用,性能壓測環境應當儘量同線上環境一致

3. 肯定性能壓測經過標準:針對性能壓測目標以及選取的性能壓測環境,制定性能壓測經過標準,對於不一樣於線上環境的性能壓測環境,經過標準也應當適度放寬

4. 設計性能壓測:編排壓測鏈路,構造性能壓測數據,儘量模擬真實的請求鏈路以及請求負載

5. 執行性能壓測:藉助性能壓測工具,按照設計執行性能壓測

6. 分析性能壓測結果報告:分析解讀性能壓測結果報告,斷定性能壓測是否達到預期目標,若不知足,要基於性能壓測結果報告分析緣由

由上述步驟可知,一次成功的性能壓測涉及到多個環節,從場景設計到施壓再到分析,缺一不可。工欲善其事,必先利其器,而一款合適的性能工具意味着咱們可以在儘量短的時間內完成一次合理的性能壓測,達到事半功倍的效果。

工具選型對比

在論述了性能壓測必要性以後,如何選取性能壓測工具成爲一個重要的議題?本文選取了市場上主流性能壓測工具:(ab)Apache Bench、LoadRunner、JMeter、阿里雲PTS,並從多個方面出發分析了各個工具的優缺點,彙總後的優缺點以下表所示:

壓測工具 Apache Bench(ab) LoadRunner JMeter PTS
學習成本
安裝部署成本
是否免費
是否支持多協議
壓測結果是否可以圖形化展現
是否支持TPS模式
是否有鏈路、場景編排管理支持
是否支持場景錄製
生態環境強弱
監控指標是否完備
是否原生支持流量地域定製

Apache Bench(ab)

ab是一款用來針對HTTP協議作性能壓測的命令行工具,支持在本地環境發起測試請求,驗證服務器的處理性能。它主要具備如下特色:

首先,做爲一款開源工具,ab具備較好的擴展性,測試開發人員能夠基於自身需求對其進行二次開發,同時它對HTTP協議支持度較好,好比支持設定HTTP請求頭、支持Cookie以及HTTP的多種方法。
此外,使用ab時還能夠經過指定性能壓測產生的總請求數、併發數與壓測時長控制性能壓測,結合其可以輸出性能壓測過程當中的TPS(每秒事務數)、RT(響應時延)等信息的特色,ab具備簡單易上手的特色。
但ab也存在一些缺點,如無圖形化界面支持,支持協議較爲單一,只支持HTTP協議,缺乏對HTTPS協議、WebSocket等協議的支持,對於較爲複雜的性能壓測場景,ab缺乏鏈路編排、場景管理等支持,只可以對單一地址發起性能壓測,此外,它的性能壓測統計指標緯度較少,缺乏性能壓測過程當中的數據統計,只可以在壓測結束後獲取相關的統計數據,沒法實時獲取系統負載等指標,難以應用於生產環境下的性能壓測。

總的來講,ab做爲一款命令行測試工具,適用於本地對支持HTTP協議的單一地址進行性能壓測,但缺乏相應的鏈路編排、場景管理、數據可視化等大規模性能壓測基礎功能,沒法應用於生產環境。

LoadRunner

LoadRunner,是一款發佈於1993年11月的預測系統行爲和性能的負載測試工具。經過以模擬上千萬用戶實施併發負載及實時性能監測的方式來確認和查找問題,LoadRunner做爲一款歷史悠久的商業性能壓測工具,可以對整個企業架構進行測試。企業使用LoadRunner能最大限度地縮短測試時間,優化性能和加速應用系統的發佈週期。 LoadRunner可適用於各類體系架構的自動負載測試,能預測系統行爲並評估系統性能。

LoadRunner從組件上可劃分爲四部分:

  • 負載生成器:模擬用戶對服務器發起請求
  • 虛擬用戶生成器:捕捉用戶業務流,用於錄製和生成腳本
  • 控制器:用於提供場景設計與場景監控,可以實時監控腳本的運行狀況
  • 分析器:聚集來自各類負載生成器的日誌並格式化報告,以即可視化運行結果數據和監控數據

從組件劃分上能夠看出 LoadRunner 對於性能壓測擁有較爲系統的支持,結合多個組件的功能特性,用戶能夠較爲方便地設計複雜背景下的性能壓測場景,例如結合場景設計設置虛擬用戶數量、設置執行時間等,結合虛擬用戶生成器實現複雜鏈路、場景的高效設計與編排。
此外,LoadRunner支持設置思考時間、集合點,還能夠結合分析器實現壓測報告統計數據、指標的可視化,助力測試人員理解性能壓測結果。
但 LoadRunner 做爲一款商業軟件,價格較高,須要本地安裝,安裝過程較複雜,在實際設計執行壓測時須要編寫相應的腳本,對使用人員來講學習成本比較高,此外缺乏監控告警等支持,性能壓測過程當中難以實時發現問題。

總的來講,LoadRunner 做爲一款性能壓測商業軟件,功能較爲齊全,使用者可以藉助 LoadRunner 達到簡單的性能壓測場景編排、施壓目標;但它也存在學習成本居高不下、擴展性差等缺點,此外支持的協議有限,不適合複雜的性能壓測環境。

JMeter

Apache JMeter是Apache組織開發的基於Java的壓力測試工具。它能夠用於測試靜態和動態資源,例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、數據庫、FTP 服務器等等。另外,JMeter可以對應用程序作功能/迴歸測試,經過建立帶有斷言的腳原本驗證你的程序返回了你指望的結果。爲了最大限度的靈活性,JMeter容許使用正則表達式建立斷言。同時JMeter支持對性能壓測結果作圖形分析。

JMeter 做爲一款開源軟件,擴展性強,具備強大的開源社區支持,社區內開發者活躍程度高,也正是在開源社區的積極發展下,JMeter 具備性能壓測的諸多特性,如支持場景編排、斷言設置,支持對多種資源施壓,有圖形化界面支持,支持腳本錄製,使用人員可以較爲簡單的設計併發起性能壓測,此外 JMeter 提供資源監控、性能壓測報告生成等功能。
但在須要高負載施壓的場景下,JMeter 須要部署分佈式環境,部署成本比較高,在使用時,須要編寫相應的腳本,而每一個腳本文件只能保存一個測試用例,學習門檻居高不下的同時也不利於腳本的維護,此外它缺乏監控告警等支持,在性能壓測過程當中使用人員難以藉助 JMeter 實時發現問題。

做爲一款時下熱門的開源性能壓測工具,根據谷歌搜索指數顯示,JMeter 已經逐漸展示出了替代 LoadRunner 的趨勢,如圖:

同時活躍的社區環境、開發者生態也進一步促進了JMeter的功能完善,將來的發展值得期待。但於此同時,JMeter也存在學習、維護成本高,缺乏監控告警等功能支持,難以應用於大型複雜的性能壓測場景。

性能測試服務(Performance Testing Service,簡稱 PTS)是一個 SaaS 性能測試平臺,提供場景 API 編排功能。結合阿里巴巴的自研平臺和引擎,支持按需設定壓測模式、壓測量級、壓測時間,快速發起壓測,監控壓測過程並生成報告等功能,同時也兼容開源工具 JMeter。

下面將從功能、性能、生態與監控四個方面展開介紹 PTS:

功能方面
PTS 提供了鏈路、場景編排壓測報告導出的功能、,除了傳統的併發模式(虛擬用戶併發),PTS也支持 RPS 模式(Requests per Second),也即吞吐量模式,RPS 模式爲 PTS 獨有,具備可以更精準地衡量服務端系統能力等優勢。爲了下降發起性能壓測的門檻,PTS 提供雲端錄製器,便於客戶端的請求抓取,同時還可將抓取的請求一鍵導入到壓測場景中;爲了適配不一樣場景下的性能壓測,PTS 支持建立服務等級協議 SLA(Service Level Agreement)規則,可以實現對業務壓測場景更智能的控制和更全面合理的評價,同時,PTS 也提供了大量 SLA 模板供不一樣背景下的用戶使用;此外,PTS 還支持定時壓測,可以指定啓動壓測的日期、時間以及循環週期等,可以在任意時間段自由發起性能壓測,釋放人力。

性能方面
PTS 可以隨機調度遍及全國各地的壓測引擎,一分鐘內快速啓動性能壓測,模擬真實環境下的用戶請求;支持最高千萬級的流量瞬時脈衝,多重機制確保壓測流量及時中止;支持兩種調速模式:自動遞增和手動調整,壓測流量調整秒級生效。

生態方面
PTS 支持添加阿里雲生態內的雲監控產品,如添加阿里雲生態內的性能管理類產品ARMS,提供應用級別的監控,爲性能壓測提供問題定位的閉環能力;此外 PTS 雲端集成 JMeter,用戶只需在本地完成 JMeter 腳本調試,便可在 PTS 上快速發起壓測。

監控方面
PTS 監控指標包括每一個 API 的併發,RPS (Requests per Second)、響應時間、採樣的日誌等。同時從不一樣細分維度,統計了 API 請求的成功、失敗狀況和響應時間,可以幫助用戶快速定位到系統的性能瓶頸。此外,PTS還可以結合阿里雲生態內的雲產品監控,如監控ECS、SLB及RDS等在內的各產品性能指標;爲雲上服務提供更爲詳盡的監控。

總的來講,阿里雲 PTS 做爲一款雲服務,用戶能夠較低的學習成本快速藉助 PTS 發器壓測,對於阿里雲的用戶來講,PTS 可以緊密結合現有的阿里雲服務,提供全方位的壓測報告供用戶快速定位性能瓶頸;對於 JMeter 用戶,也可以以較低的成本遷移至 PTS,享受 PTS 的高階功能。但 PTS 也存在一些問題,擴展性須要增強,例如須要支持更多網絡協議。

實際案例

某創業公司A即將上線一項新功能,爲了在上線前充分測試,保障服務的高可用性,測試人員給出了相應的測試需求:

  1. 爲了儘量避開業務高峯期,須要在天天的凌晨一點鐘測試;
  2. 測試時,認爲業務的正常響應時間應當在 550 ms 如下,連續三次響應時間超出550 ms 時應當向負責人發出通知,連續三次響應時間超出800 ms 則應當中止壓測;
  3. 爲了模擬真實的用戶流量,須要設置流量一半來源於移動運營商,一半來源於聯通運營商;
  4. 公司但願在對自身業務監控的同時,可以監控到所使用阿里雲上ECS、RDS等雲服務的資源使用狀態;

結合上述的各性能壓測工具優缺點,僅有 PTS 知足客戶需求,下面咱們具體看一下 PTS 如何實現該案例需求。

首先爲了可以實現天天凌晨一點測試,咱們可使用 PTS 所提供的定時壓測功能,經過把場景設置爲定時壓測任務,結合cron表達式能夠實現天天凌晨一點自動運行該壓測場景,配置以下圖所示:

接着爲了實現連續三次響應時間超出550 ms 後,向負責人發送通知;連續三次響應時間超出800 ms 中止壓測,能夠利用 PTS 所提供的 SLA 功能實現,配置以下圖所示:

在配置 SLA 規則後,還能夠設置 SLA 規則應用鏈路,以及報警通知人,以下圖所示:

接下來爲了可以實現流量一半來源於移動運營商,一半來源於聯通運營商,咱們能夠利用 PTS 所提供的流量地域定製功能,指定壓測引擎運營商,以下圖所示:

最後,爲了可以在壓測過程當中以及壓測報告中查看到阿里雲ECS、RDS等監控狀態,能夠在添加監控中添加對應的監控項,以下圖所示:

綜上,PTS 的各項配置成功地知足了該創業公司的壓測需求,在避免員工夜間值班壓測,節省了公司人力資源的同時,提高了該公司的性能壓測效率,在最終的壓測報告中,客戶能夠觀察到業務的性能指標以及所使用雲服務的資源使用狀態,經過對壓測報告的解讀能夠快速定位到服務的性能瓶頸,提高服務質量。

總結

本文介紹了性能壓測的概念以及相關背景,並針對目前幾款受衆相對較多的性能壓測工具給出了優缺點分析,每種工具都有相應的優缺點,你們能夠針對自身需求選取合適的性能壓測工具。

本文介紹了性能壓測的概念以及相關背景,並針對目前幾款受衆相對較多的性能壓測工具給出了優缺點分析,每種工具都有相應的優缺點,你們能夠針對自身需求選取合適的性能壓測工具。

不當之處,歡迎留言指正。


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索