談談壓測

背景

隨著業務不斷發展,用戶量不斷增加,系統負載越來越高。為了解決系統負載問題,我們是不是直接大量增加機器就可以了?
同時,公司業務開展需要,可能需要開展各種營銷活動,目前系統是否能夠支援那麼多用戶也是個未知數,如何解決呢?
答案就是今天要講的壓測。

目的

  • 驗證單個業務及整個的處理能力及響應時間等
  • 驗證系統的性能瓶頸
  • 合理的容量規劃,而不是大量增加

分類

  • 單介面壓測
  • 全鏈路壓測

性能測試指標

業務類

  • TPS
  • 相應時間
    – 平均響應時間、最小響應時間、最大響應時間、90%響應時間等
    – 百分位數是一個統計學名詞。99% 的百分位響應時間,指的是 99% 的請求響應時間都處在這個值以下。
    – 如果99%響應時間跟平均響應時間相差很大,那麼說明是抗不住這麼大量的,需要做相應調整及優化
  • 業務成功率
    – 壓測前要確定壓測的業務成功率,不能把報錯的數據當做壓測結果,一般可以定業務成功率最少為1%
  • 系統資源指標
  • CPU使用率
  • 記憶體使用率
  • 磁碟繁忙率
  • 網路IO

全鏈路壓測

目的

只做單系統壓測是不夠的,因為在活動開始的瞬間,各系統都面臨自身服務的巨大的壓力,而系統之間是有互相依賴關係的,單機壓測沒有考慮到依賴環節壓力都比較大的情況。一個系統出現故障,故障會在鏈路流轉過程中層層累加,會造成無法評估的影響。

為什麼選擇線上環境做全鏈路壓測

通常情況下公司不可能按照線上環境架構與性能要求1比1的搭建一套離線環境

應用TPS

由於是全鏈路壓測,所以不能單看一個介面的TPS,需要查看同個應用的不同介面,相同應用不同介面的TPS之和可以當做是應用總的TPS

準備工作

  • 確定壓測場景
    – 制定大促的壓測場景(比如秒殺、抽獎等)
    – 確認壓測鏈路
  • 估算流量漏斗
    – 流量轉化不是百分百的,如100個用戶看到商詳,可能會有50個人會去下單,最後有45個人進行了支付,那麼在全鏈路壓測的時候就要進行流量漏斗的估算。
    – 可以根據近7天線上真實用戶的行為數據分型分析建模,以及往期同類型活動線上的流量分布情況進行估算
  • 確定壓測目標
  • 壓測腳本
  • 發通知及公告
    – 通知商家避開壓測時間段
    – 通知相關業務方關注相關告警等
  • 限流
    – 可能線上有開啟限流,壓測的時候要適當放開
  • 影子庫
    – 做業務數據隔離,防止生成臟數據影響線上業務
  • 外部mock伺服器
    – mock掉部分服務,比如微信支付

工具

  • ab
    ab是apache自帶的壓力測試工具。ab非常實用,它不僅可以對apache伺服器進行網站訪問壓力測試,也可以對或其它類型的伺服器進行壓力測試。比如nginx、tomcat、IIS等。
  • wrk
    wrk 是一款c語言開發的現代的http性能基準測試工具,使用簡單,功能強大。
  • JMeter
    Apache JMeter是一款純java編寫負載功能測試和性能測試開源工具軟體,小巧輕便且免費。
  • Loadrunner
    Loadrunner是HP公司提供的一款性能測試工具,通過模擬成千上萬個用戶實施並發操作,測試系統的性能,並且提供詳細的測試結果分析,協助用戶查找問題。
    收費應用。
  • 自研工具

參考資料

Tags: