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