談談壓測

背景

隨着業務不斷髮展,用戶量不斷增長,系統負載愈來愈高。爲了解決系統負載問題,咱們是否是直接大量增長機器就能夠了?
同時,公司業務開展須要,可能須要開展各類營銷活動,目前系統是否可以支持那麼多用戶也是個未知數,如何解決呢?
答案就是今天要講的壓測。java

目的

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

分類

  • 單接口壓測
  • 全鏈路壓測

性能測試指標

業務類

  • TPS
  • 相應時間
    - 平均響應時間、最小響應時間、最大響應時間、90%響應時間等
    - 百分位數是一個統計學名詞。99% 的百分位響應時間,指的是 99% 的請求響應時間都處在這個值如下。
    - 若是99%響應時間跟平均響應時間相差很大,那麼說明是抗不住這麼大量的,須要作相應調整及優化
  • 業務成功率
    - 壓測前要肯定壓測的業務成功率,不能把報錯的數據當作壓測結果,通常能夠定業務成功率最少爲1%
  • 系統資源指標
  • CPU使用率
  • 內存使用率
  • 磁盤繁忙率
  • 網絡IO

全鏈路壓測

目的

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

爲何選擇線上環境作全鏈路壓測

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

應用TPS

因爲是全鏈路壓測,因此不能單看一個接口的TPS,須要查看同個應用的不一樣接口,相同應用不一樣接口的TPS之和能夠當作是應用總的TPSgithub

準備工做

  • 肯定壓測場景
    - 制定大促的壓測場景(好比秒殺、抽獎等)
    - 確認壓測鏈路
  • 估算流量漏斗
    - 流量轉化不是百分百的,如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公司提供的一款性能測試工具,經過模擬成千上萬個用戶實施併發操做,測試系統的性能,而且提供詳細的測試結果分析,協助用戶查找問題。
    收費應用。
  • 自研工具

參考資料

相關文章
相關標籤/搜索