1 背景
某年某月的某一天宪潮,有這樣的一段對話:
老板: 咱們線上容量是多少?
小強: 額势木,不太清楚
老板: N天后鄙煤,我們的流量將增大M倍,系統(tǒng)能抗住嗎?
小強: 可能扛不住吧具壮,不過我們可以擴容
老板: 擴多少?
小強: (拍腦袋)double一下吧
“double一下”是否可以解決問題准颓?存在多大的浪費?如何有效評估系統(tǒng)容量來解決這個窘境?
在這里引出一個系統(tǒng)容量的概念棺妓。系統(tǒng)容量攘已,指系統(tǒng)在有冗余的情況下的極限服務(wù)能力,可以理解為是水池的水位怜跑。當水位超過警戒線的時候样勃,需要對系統(tǒng)進行橫向/縱向的調(diào)整。
系統(tǒng)容量需要預(yù)留冗余性芬,是因為我們要保證在部署峡眶、網(wǎng)段故障、機房故障時植锉,線上服務(wù)依舊是可用的辫樱。
綜上,可以得出公式:系統(tǒng)容量 = 單實例極限容量 * 當前實例數(shù) * 冗余度
2 流行的方案
- jmeter
- 擴大單個實例的流量
- tcpcopy
2.1 jmeter
構(gòu)造測試數(shù)據(jù)汽煮,進行接口級測試搏熄,觀察服務(wù)表現(xiàn)
優(yōu)點:靈活棚唆,可對特定接口進行針對性壓測
缺點:很難模擬真實的流量場景(線上的接口太多,各接口的流量比例不同)
2.2 擴大流量
通過調(diào)整權(quán)重或縮減集群規(guī)模心例,將線上流量壓到單個服務(wù)實例上宵凌,觀察服務(wù)表現(xiàn)
優(yōu)點:真實
缺點:在壓力過大時可能造成服務(wù)質(zhì)量下降,影響用戶使用止后。
2.3 tcpcopy(推薦)
拷貝線上流量瞎惫,對旁路環(huán)境進行壓測
優(yōu)點:真實,不會影響用戶
缺點:需要準備完整的旁路環(huán)境
3 性能指標
不管采用什么樣的壓測方案译株,我們需要知道壓到什么程度就是“極限”了瓜喇。
對于在線類服務(wù),最關(guān)注的是服務(wù)的響應(yīng)時間歉糜,可以是所有接口的平均響應(yīng)時間乘寒,也可以是某些接口的平均響應(yīng)時間。
由于壓測環(huán)境不是線上真實的服務(wù)器匪补,需要單獨搭建一整套供壓測的環(huán)境伞辛。
建議按線上的部署比例進行等比例縮放壓測環(huán)境的實例數(shù)。