在性能測試中,需要根據具體的性能需求和系統架構等情況,采用不同的測試策略,其中最常見的策略就有容量測試。
這篇博客,就來聊聊容量測試以及容量規划的一些內容。。。
一、什么是容量?如何理解?
在開始之前,有一點需要知道:系統的處理能力是有限的!
1、容量定義
所謂容量,即系統處於最大負載狀態或某項指標達到所能接受的最大閾值下對請求的最大處理能力。
2、如何理解
①、系統的容量(處理能力)是有限的;
②、容量是可度量的;
二、如何統計容量指標?
1、統計維度
一般來說,可以從如下兩個維度來定量系統的容量:
維度類型 | 列舉說明 |
最大負載狀態 | 服務器CPU使用率達到100% |
內存使用達到最大值 | |
磁盤IO延時超過所能接受的最大時延 | |
磁盤使用率超過最大限制 | |
網絡使用率達到上限(最大吞吐量) | |
最大接受閾值 | 每秒請求數/事務數(QPS/TPS) |
響應時間(ART/99%RT) | |
事務成功率(一般要求99.99%甚至更高) | |
超時/異常錯誤率 | |
配置參數,比如:最大連接數、最大線程數、JVM內存分配上限 |
2、統計方法
一般來說,常用的采集數據的方法,有以下幾種方式:
①、埋點采集:即在系統的各個節點,根據需要添加埋點,針對性的進行數據采集;
②、日志/數據庫:通過日志服務(比如ELK)或者運維監控(現在很流行的Devops),采集分析數據;
③、Agent/探針:在需要采集的節點添加Agent/探針,實時采集,數據存入時序數據庫(比如influxdb),實時展示;
3、注意事項
①、采集對比的數據一定要采集線上的真實數據,這樣才能反映真實客觀的系統壓力。
②、容量測試環境的配置,一定要和線上保持一致(服務器數量可以不同,但配置盡可能保持一致)。
三、容量測試
容量測試是性能測試里的一種測試方法,它的目的就是測量系統的最大容量,為系統擴容,性能優化提供參考,節省成本投入,提高資源利用率。
1、測試思路
①、根據具體的業務情況和系統架構,通過配置測試的手段,測量得到單個服務節點在對應的業務場景下最大的性能表現;
②、根據系統架構(集群、分布式、微服務)特點,通過啟用≥2的服務節點,來得到服務節點的增加和系統性能的提升比例;
③、通過線上采集的系統數據,分析出過去某段時間(或某個業務)的高峰流量,然后通過計算,得到容量擴容,需要投入的實際服務數量;
2、約束/停止條件
在測試過程中,只要限定的某項指標達到最大可接受閾值或某項資源達到最大使用狀態,即刻停止測試。
3、選擇合適的容量指標
考慮到業務需求和系統架構的不同,在選取容量指標時一般遵循如下原則:
①、數據密集型:即並發請求量較大的類型,一般TPS和RT是比較關注的指標;
②、數據存儲型:即需要存儲讀寫的數據量較大的類型,一般吞吐量和IO是比較關注的指標;
四、容量規划
1、為什么需要容量規划?
對於業務越來越復雜的商業形態,每個業務都由一系列不同的系統來提供服務,每個業務系統都部署在不同的機器上。容量規划的目的在於讓每一個業務系統能夠清晰地知道:
①、什么時候應該增加服務節點,什么時候應該減少服務節點(比如服務端接受到的流量達到什么量級)?(比如雙十一,大促,秒殺)
②、為了雙 11 、促銷、秒殺、渠道拓展引流等業務需求,需要擴充到什么數量級的服務,才能即保證系統的可用性、穩定性,又能節約成本?
2、容量規划四步走
①、業務流量預估階段:通過分析歷史數據以及實時的線上監控,預估未來某個時間點或者某個業務可能會有多少多少的流量沖擊;
②、系統容量評估階段:根據具體的業務場景,分析每個業務場景的流量配比,然后計算每個業務大概需要多少服務節點來提供可靠穩定的性能支撐;
③、系統容量測試階段:通過全鏈路壓測或者PAT/UAT環境的壓測,來模擬真實的業務場景,確定每個服務節點的具體性能表現,進行針對性的調整;
④、流量分配調整階段:根據壓測的結果,設定限流、服務降級等系統保護措施,來預防當實際流量超過系統所能承受的最大流量時,系統無法提供服務;
3、擴容手段
①、垂直擴容
升級服務的硬件配置,讓單個服務節點的容量更大,來提供更高的系統服務能力。比如:
加大服務機器的CPU數量和內存,更換性能更好的高速緩存服務器,數據存儲用NAS盤替換等。
②、水平擴展
即增加服務節點的數量,讓可提供服務的服務變得更多,來提升系統總體的服務能力。常見的方式有:
服務集群:服務器的數量由1→N(但需要重點關注負載均衡);
分布式:提供服務的節點由統一集中管理部署,分散到不同的地點;
容器:提供更靈活的彈性擴容機制,根據具體的訪問流量大小來彈性擴容或者縮容;
4、更多參考
關於容量規划,可以看這里:阿里巴巴全鏈路壓測
關於集群和分布式,看這里:分布式與集群的區別是什么?
內容僅僅是個人的一些思考和總結,如有更好的意見或建議,歡迎評論區指出,謝謝。。。