在性能測試中涂屁,需要根據(jù)具體的性能需求和系統(tǒng)架構(gòu)等情況书在,采用不同的測試策略,其中最常見的策略就有容量測試拆又。
什么是容量 如何理解
容量定義
所謂容量儒旬,即系統(tǒng)處于最大負(fù)載狀態(tài)或某項(xiàng)指標(biāo)達(dá)到所能接受的最大閾值下對請求的最大處理能力栏账。
如何理解
- 系統(tǒng)的容量(處理能力)是有限的;
- 容量是可度量的栈源;
如何統(tǒng)計容量指標(biāo)
統(tǒng)計維度
- 最大負(fù)載狀態(tài) 服務(wù)器CPU使用率達(dá)到100%
- 內(nèi)存使用達(dá)到最大值
- 磁盤IO延時超過所能接受的最大時延
- 磁盤使用率超過最大限制
- 網(wǎng)絡(luò)使用率達(dá)到上限(最大吞吐量)
- 最大接受閾值 每秒請求數(shù)/事務(wù)數(shù)(QPS/TPS)
- 響應(yīng)時間(ART/99%RT)
- 事務(wù)成功率(一般要求99.99%甚至更高)
- 超時/異常錯誤率
- 配置參數(shù)挡爵,比如:最大連接數(shù)、最大線程數(shù)甚垦、JVM內(nèi)存分配上限
統(tǒng)計方法
- 埋點(diǎn)采集:即在系統(tǒng)的各個節(jié)點(diǎn)茶鹃,根據(jù)需要添加埋點(diǎn),針對性的進(jìn)行數(shù)據(jù)采集艰亮。
- 日志/數(shù)據(jù)庫:通過日志服務(wù)(比如ELK)或者運(yùn)維監(jiān)控(現(xiàn)在很流行的Devops)闭翩,采集分析數(shù)據(jù)。
- Agent/探針:在需要采集的節(jié)點(diǎn)添加Agent/探針迄埃,實(shí)時采集疗韵,數(shù)據(jù)存入時序數(shù)據(jù)庫,實(shí)時展示调俘。
注意事項(xiàng)
- 采集對比的數(shù)據(jù)一定要采集線上的真實(shí)數(shù)據(jù)伶棒,這樣才能反映真實(shí)客觀的系統(tǒng)壓力。
- 如果是在測試環(huán)境彩库,配置一定要和線上保持一致(服務(wù)器數(shù)量可以不同肤无,但配置盡可能保持一致)
容量測試
容量測試是性能測試?yán)锏囊环N測試方法,它的目的就是測量系統(tǒng)的最大容量骇钦,為系統(tǒng)擴(kuò)容宛渐,性能優(yōu)化提供參考,節(jié)省成本投入眯搭,提高資源利用率窥翩。
測試思路
- 根據(jù)具體的業(yè)務(wù)情況和系統(tǒng)架構(gòu),通過配置測試的手段鳞仙,測量得到單個服務(wù)節(jié)點(diǎn)在對應(yīng)的業(yè)務(wù)場景下最大的性能表現(xiàn)寇蚊。
- 根據(jù)系統(tǒng)架構(gòu)(集群、分布式棍好、微服務(wù))特點(diǎn)仗岸,通過啟用≥2的服務(wù)節(jié)點(diǎn),來得到服務(wù)節(jié)點(diǎn)的增加和系統(tǒng)性能的提升比例借笙。
- 通過線上采集的系統(tǒng)數(shù)據(jù)扒怖,分析出過去某段時間(或某個業(yè)務(wù))的高峰流量,然后通過計算业稼,得到容量擴(kuò)容盗痒,需要投入的實(shí)際服務(wù)數(shù)量。
約束 or 停止條件
- 業(yè)務(wù)線相關(guān)人員必須到位低散,測試過程能促使我們更加理解業(yè)務(wù)形態(tài)俯邓,容易出現(xiàn)的問題可能就是未來的故障點(diǎn)骡楼。
- 在測試過程中,只要限定的某項(xiàng)指標(biāo)達(dá)到最大可接受閾值或某項(xiàng)資源達(dá)到最大使用狀態(tài)看成,即刻停止測試君编。
選擇合適的容量指標(biāo)
考慮到業(yè)務(wù)需求和系統(tǒng)架構(gòu)的不同,在選取容量指標(biāo)時一般遵循如下原則:
- 數(shù)據(jù)密集型:即并發(fā)請求量較大的類型川慌,一般TPS和RT是比較關(guān)注的指標(biāo)吃嘿。
- 數(shù)據(jù)存儲型:即需要存儲讀寫的數(shù)據(jù)量較大的類型,一般吞吐量和IO是比較關(guān)注的指標(biāo)梦重。
容量規(guī)劃
為什么需要容量規(guī)劃
對于業(yè)務(wù)越來越復(fù)雜的商業(yè)形態(tài)兑燥,每個業(yè)務(wù)都由一系列不同的系統(tǒng)來提供服務(wù),每個業(yè)務(wù)系統(tǒng)都部署在不同的機(jī)器上琴拧。容量規(guī)劃的目的在于讓每一個業(yè)務(wù)系統(tǒng)能夠清晰地知道:
- 什么時候應(yīng)該增加服務(wù)節(jié)點(diǎn)降瞳,什么時候應(yīng)該減少服務(wù)節(jié)點(diǎn)(比如服務(wù)端接受到的流量達(dá)到什么量級)(比如壓測,周年慶蚓胸,大促等)
- 為了壓測挣饥,周年慶,大促等業(yè)務(wù)需求沛膳,需要擴(kuò)充到什么數(shù)量級的服務(wù)扔枫,才能即保證系統(tǒng)的可用性、穩(wěn)定性锹安,又能節(jié)約成本
容量規(guī)劃四步走
- 業(yè)務(wù)流量預(yù)估階段:通過分析歷史數(shù)據(jù)以及實(shí)時的線上監(jiān)控短荐,預(yù)估未來某個時間點(diǎn)或者某個業(yè)務(wù)可能會有多少多少的流量沖擊;
- 系統(tǒng)容量評估階段:根據(jù)具體的業(yè)務(wù)場景叹哭,分析每個業(yè)務(wù)場景的流量配比忍宋,然后計算每個業(yè)務(wù)大概需要多少服務(wù)節(jié)點(diǎn)來提供可靠穩(wěn)定的性能支撐;
- 系統(tǒng)容量測試階段:通過全鏈路壓測或者PAT/UAT環(huán)境的壓測风罩,來模擬真實(shí)的業(yè)務(wù)場景糠排,確定每個服務(wù)節(jié)點(diǎn)的具體性能表現(xiàn),進(jìn)行針對性的調(diào)整超升;
- 流量分配調(diào)整階段:根據(jù)壓測的結(jié)果入宦,設(shè)定限流、服務(wù)降級等系統(tǒng)保護(hù)措施廓俭,來預(yù)防當(dāng)實(shí)際流量超過系統(tǒng)所能承受的最大流量時云石,系統(tǒng)無法提供服務(wù)唉工;
擴(kuò)容手段
垂直擴(kuò)容
- 升級服務(wù)的硬件配置研乒,讓單個服務(wù)節(jié)點(diǎn)的容量更大,來提供更高的系統(tǒng)服務(wù)能力淋硝。比如:加大CPU數(shù)量和內(nèi)存雹熬,更換性能更好的服務(wù)器宽菜,高性能SSD或者PCIE flash卡等。
- 如果用容器竿报,可以啟用VPA铅乡,啟用更多的容器來滿足業(yè)務(wù)增長需求律秃,此場景下需要注意后端DB和緩存的連接數(shù)使用情況搔耕,并不是能無限擴(kuò)展的。
水平擴(kuò)展
- 即增加服務(wù)節(jié)點(diǎn)的數(shù)量坡慌,讓可提供服務(wù)的服務(wù)變得更多芽世,來提升系統(tǒng)總體的服務(wù)能力挚赊。常見的方式有:
- 服務(wù)集群:服務(wù)器的數(shù)量由1→N(但需要重點(diǎn)關(guān)注負(fù)載均衡);
- 分布式:提供服務(wù)的節(jié)點(diǎn)由統(tǒng)一集中管理部署济瓢,分散到不同的地點(diǎn)荠割;
- 容器:提供更靈活的彈性擴(kuò)容機(jī)制,根據(jù)具體的訪問流量大小來彈性擴(kuò)容或者縮容旺矾;
容量評估的步驟與方法
預(yù)估總訪問量
- 最簡單的辦法就是:詢問業(yè)務(wù)方蔑鹦,詢問運(yùn)營同學(xué),詢問產(chǎn)品同學(xué)箕宙,看產(chǎn)品和運(yùn)營對此次活動的流量預(yù)估嚎朽。
- 不過,業(yè)務(wù)方對于流量的預(yù)估扒吁,應(yīng)該就兩個指標(biāo)火鼻,pv 和 用戶訪問數(shù)。技術(shù)人員需要根據(jù)這兩個數(shù)據(jù)雕崩,計算其他相關(guān)指標(biāo)魁索,比如 QPS 等。
預(yù)估平均QPS
-
總請求數(shù) = 總PV * 頁面衍生連接數(shù)
平均QPS = 總請求數(shù) / 總時間
比如:活動落地頁1小時內(nèi)的總訪問量是30w pv盼铁,該落地頁的衍生連接數(shù)為30 ,那么落地頁的平均QPS為 (30W30) /(6060) = 2500
預(yù)估峰值QPS
- 系統(tǒng)容量規(guī)劃時粗蔚,不能只考慮平均QPS,而是要峰值QPS饶火,如何評估峰值QPS呢鹏控?
- 這個要根據(jù)實(shí)際的業(yè)務(wù)評估,也可以通過以往一些活動的 pv 等數(shù)據(jù)進(jìn)行預(yù)估肤寝。
- 一般情況当辐,峰值QPS大概是均值QPS的3-5倍,日均QPS為1000鲤看,于是評估出峰值QPS為5000缘揪。(舉例,根據(jù)實(shí)際情況和經(jīng)驗(yàn)來判斷)
預(yù)估系統(tǒng)、單機(jī)極限QPS
- 這個性能指標(biāo)找筝,是服務(wù)器蹈垢,最基本的指標(biāo)之一,所以沒有其他的辦法袖裕,就是壓力測試曹抬。通過壓力測試,算出服務(wù)器的單機(jī)極限QPS 急鳄。
寫在最后
- 需要注意的是谤民,以上都是計算單個服務(wù)器或是單個集群的容量,實(shí)際生產(chǎn)環(huán)境是由web, 消息隊(duì)列疾宏,緩存赖临,數(shù)據(jù)庫 等等一系列組成的復(fù)雜集群。
- 在分布式系統(tǒng)中灾锯,任何環(huán)節(jié)出現(xiàn)瓶頸兢榨,都有可能導(dǎo)致雪崩效應(yīng),最后整個集群垮掉 顺饮。
- 要了解規(guī)劃整個平臺的容量吵聪,就必須計算出每一個節(jié)點(diǎn)的容量,找出任何可能出現(xiàn)的瓶頸所在兼雄。
- 墨菲定律一定會發(fā)生吟逝,只是時間問題。