性能压测工具选型对比
本文是《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,并從多個方面出發分析了各個工具的優缺點,匯總后的優缺點如下表所示:
| 學習成本 | 低 | 高 | 高 | 低 |
| 安裝部署成本 | 低 | 高 | 高 | 低 |
| 是否免費 | 是 | 否 | 是 | 否 |
| 是否支持多協議 | 否 | 是 | 是 | 是 |
| 壓測結果是否能夠圖形化展示 | 否 | 是 | 是 | 是 |
| 是否支持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即將上線一項新功能,為了在上線前充分測試,保障服務的高可用性,測試人員給出了相應的測試需求:
結合上述的各性能壓測工具優缺點,僅有 PTS 滿足客戶需求,下面我們具體看一下 PTS 如何實現該案例需求。
首先為了能夠實現每天凌晨一點測試,我們可以使用 PTS 所提供的定時壓測功能,通過把場景設置為定時壓測任務,結合cron表達式可以實現每天凌晨一點自動運行該壓測場景,配置如下圖所示:
接著為了實現連續三次響應時間超出550 ms 后,向負責人發送通知;連續三次響應時間超出800 ms 停止壓測,可以利用 PTS 所提供的 SLA 功能實現,配置如下圖所示:
在配置 SLA 規則后,還可以設置 SLA 規則應用鏈路,以及報警通知人,如下圖所示:
接下來為了能夠實現流量一半來源于移動運營商,一半來源于聯通運營商,我們可以利用 PTS 所提供的流量地域定制功能,指定壓測引擎運營商,如下圖所示:
最后,為了能夠在壓測過程中以及壓測報告中查看到阿里云ECS、RDS等監控狀態,可以在添加監控中添加對應的監控項,如下圖所示:
綜上,PTS 的各項配置成功地滿足了該創業公司的壓測需求,在避免員工夜間值班壓測,節省了公司人力資源的同時,提升了該公司的性能壓測效率,在最終的壓測報告中,客戶可以觀察到業務的性能指標以及所使用云服務的資源使用狀態,通過對壓測報告的解讀可以快速定位到服務的性能瓶頸,提升服務質量。
總結
本文介紹了性能壓測的概念以及相關背景,并針對目前幾款受眾相對較多的性能壓測工具給出了優缺點分析,每種工具都有相應的優缺點,大家可以針對自身需求選取合適的性能壓測工具。
本文介紹了性能壓測的概念以及相關背景,并針對目前幾款受眾相對較多的性能壓測工具給出了優缺點分析,每種工具都有相應的優缺點,大家可以針對自身需求選取合適的性能壓測工具。
不當之處,歡迎留言指正。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的性能压测工具选型对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 藏不住了,这就是阿里 AI 的真正实力!
- 下一篇: 阿里云应用高可用 AHAS 正式商用,可