怎么做服務(wù)壓測(cè)?壓測(cè)關(guān)注什么?
大學(xué)同學(xué)在日本的IT公司,有想去日本發(fā)展的歡迎交流。一顆種子發(fā)芽了??,一起來把他澆灌成參天大樹??吧!www.tomori-tech.com

背景
在業(yè)務(wù)新上線,或者業(yè)務(wù)做活動(dòng),壓測(cè)成為必不可少的一步。但是很多開發(fā)對(duì)如何做好服務(wù)壓測(cè)并沒有特別系統(tǒng)的了解,這篇文章的目的是為了解釋清楚單機(jī)服務(wù)壓測(cè)的目的、做法、誤區(qū),幫助大家更好地達(dá)成壓測(cè)的目的
壓測(cè)的目的是什么?
檢查性能瓶頸
服務(wù)的處理能力取決于資源中瓶頸最低的那個(gè)—木桶理論。我們并不總是對(duì)自己的服務(wù)這么自信,壓測(cè)能夠幫我們了解清楚在高壓情況下的表現(xiàn),發(fā)現(xiàn)隱藏的問題。
單機(jī)處理能力(QPS)
硬件影響了服務(wù)性,但處理能力跟硬件的關(guān)系有的時(shí)候并不是線性的,CPU從2核增加到4核,服務(wù)的能力并不一定會(huì)提高兩倍。
容量規(guī)劃的需要:什么系統(tǒng),什么時(shí)候,需要多少服務(wù)器。
服務(wù)的責(zé)任人能夠清晰的知道:什么時(shí)候該加機(jī)器、什么時(shí)候應(yīng)該減機(jī)器?雙11等大促場(chǎng)景需要準(zhǔn)備多少機(jī)器,既能保障系統(tǒng)穩(wěn)定性、又能節(jié)約成本
缺少經(jīng)驗(yàn)的開發(fā),經(jīng)常無法很好達(dá)成三個(gè)目標(biāo)中的任何一個(gè)。后續(xù)的內(nèi)容我們將按照三個(gè)目標(biāo)逐一講述,壓測(cè)中可能存在的誤區(qū)
性能瓶頸分析
在分析服務(wù)性能瓶頸的時(shí)候,一般使用perf工具來生成服務(wù)在壓測(cè)時(shí)的火焰圖

y 軸表示調(diào)用棧,每一層都是一個(gè)函數(shù)。調(diào)用棧越深,火焰就越高,頂部就是正在執(zhí)行的函數(shù),下方都是它的父函數(shù)。
x 軸表示抽樣數(shù),如果一個(gè)函數(shù)在 x 軸占據(jù)的寬度越寬,就表示它被抽到的次數(shù)多,即執(zhí)行的時(shí)間長(zhǎng)。注意,x 軸不代表時(shí)間,而是所有的調(diào)用棧合并后,按字母順序排列的。
火焰圖就是看頂層的哪個(gè)函數(shù)占據(jù)的寬度最大。只要有”平頂”(plateaus),就表示該函數(shù)可能存在性能問題,需要特別留意和分析所占比例是否與預(yù)期相符。
誤區(qū)
調(diào)用量不夠,火焰圖采樣次數(shù)不足:采樣次數(shù)會(huì)導(dǎo)致火焰圖中函數(shù)占比有出入,導(dǎo)致火焰圖缺少
分析不夠:對(duì)于占用較多的函數(shù),不能深入找出原因,得到合理的解釋。
單機(jī)處理能力
一般來說服務(wù)的單機(jī)處理能力主要受設(shè)計(jì)方案、代碼實(shí)現(xiàn)、硬件、第三方依賴共同決定。進(jìn)入壓測(cè)階段,影響單機(jī)處理能力的,也就是硬件了,接下來我們了解下硬件
CPU
一般來說CPU核數(shù)越多,主頻越高,服務(wù)的處理處理能力也就越高。當(dāng)然,這里有個(gè)條件,就是每個(gè)CPU在處理的時(shí)候資源是獨(dú)立的,否則當(dāng)兩個(gè)CPU同時(shí)都需要某一個(gè)資源時(shí),其中一個(gè)就需要等待,直到資源閑置才能繼續(xù)。因此,當(dāng)服務(wù)中“鎖”沖突嚴(yán)重時(shí),CPU都浪費(fèi)在線程/進(jìn)程切換,CPU核數(shù)增加也無法帶來處理性能的線性增長(zhǎng)。此時(shí)就需要進(jìn)行鎖沖突優(yōu)化,降低鎖的粒度,甚至使用無鎖服務(wù)。
內(nèi)存
內(nèi)存也是影響服務(wù)性能的一個(gè)重要因素。當(dāng)內(nèi)存充足的時(shí)候,內(nèi)存分配和釋放的代價(jià)會(huì)影響服務(wù)的性能。當(dāng)服務(wù)不足的時(shí)候,會(huì)出現(xiàn)Swap分區(qū)的換入換出
磁盤IO
無論機(jī)械磁盤,還是固態(tài)硬盤讀寫,磁盤的讀寫速度與內(nèi)存、CPU的速度都不在一個(gè)等級(jí)上。在一般的業(yè)務(wù)型服務(wù)中,經(jīng)常會(huì)出現(xiàn)日志打印過多,磁盤IO瓶頸,導(dǎo)致服務(wù)處理能力與預(yù)期不符。
微信的服務(wù)在日志打印方面做得很好,所有的日志都直接打印共享內(nèi)存,然后異步刷盤。業(yè)務(wù)就可以放心打日志,不用提心吊膽,隨時(shí)炸彈爆炸。

誤區(qū)
壓測(cè)時(shí)不關(guān)心服務(wù)指標(biāo):導(dǎo)致缺少對(duì)系統(tǒng)基本層面的了解,一般監(jiān)控內(nèi)容包括響應(yīng)時(shí)間、吞吐量、錯(cuò)誤率、緩存命中率
不關(guān)注資源使用情況:包括CPU、內(nèi)存、磁盤IO、網(wǎng)絡(luò)吞吐、DB、Redis、MQ等
壓測(cè)之后調(diào)整單機(jī)配置,期望單機(jī)性能得到線性增長(zhǎng)
容量規(guī)劃
很多開發(fā)在做完壓測(cè)之后,對(duì)容量的準(zhǔn)備和預(yù)估還是沒有概念的,不知道多少容量能支撐整個(gè)系統(tǒng)。隨著流量增加,期望加機(jī)器解決所有的問題。最后往往是所有的期望,全都化作失望。畢竟服務(wù)本身的處理能力,不僅取決于服務(wù)的性能,還取決于依賴的第三方服務(wù)處理能力,例如,Redis單機(jī)處理能力是10w QPS,如果有一個(gè)key的訪問QPS到達(dá)瓶頸,服務(wù)的擴(kuò)展再多的機(jī)器也是無濟(jì)于事。
容量規(guī)劃怎么做?
流量預(yù)估:通過歷史數(shù)據(jù)(或者結(jié)合業(yè)務(wù)和時(shí)間)預(yù)估業(yè)務(wù)流量會(huì)有多大的系統(tǒng)調(diào)用量
容量評(píng)估:根據(jù)預(yù)估結(jié)果,計(jì)算服務(wù)需要分配多少機(jī)器
場(chǎng)景壓測(cè):針對(duì)重點(diǎn)業(yè)務(wù)場(chǎng)景,進(jìn)行全局性的壓測(cè),根據(jù)壓測(cè)結(jié)果再次調(diào)整。
source: www.cyningsun.com/02-17-2019/stress-testing.html
分享&在看
