服務全鏈路壓測設計

在服務數量增多到一定程度,出問題的可能性越來越大,現在各種常見的架構手段,高可用手段都是爲了提升系統的可用性,給用戶提供更好的體驗。而全鏈路壓測則相當於對服務進行一次體檢,瞭解當前系統的狀況

定義:基於線上環境和實際業務場景,通過模擬海量的用戶請求,來對整個系統鏈路進行壓力測試。

目的:

  • 驗證新功能的穩定性
  • 驗證峯值流量下服務的穩定性和伸縮性
  • 對線上服務進行更準確的容量評估
  • 找到系統瓶頸並且進行優化

壓測極限標準

  • load不超過 (機器核數* 0.6)
  • 網卡流量不超過網卡容量的0.6,超過的話可能延遲比較大
  • 請求超時不超過請求總量的十萬分之一
  • QPS不低於預估的85%,否則需要優化,或者給出合理的解釋

壓測方案

爲模擬更真實的環境,壓測機器與線上機器同等配置,仿照線上機器的部署情況部署。壓測數據儘可能採用線上真實數據。

方案一

複用線上環境壓測,在低峯期,比如凌晨3點鐘,回放讀請求,寫請求無法壓測,因爲寫請求會導致數據污染。

壓測可以採用本地日常環境,或者採用線上環境:

  • 日常環境:要求低,如果想要效果真實,可以構建與線上服務一模一樣的配套設施,缺點是成本高

  • 線上環境:完全採用線上環境,測量機器的抗壓能力,流量逐漸的分配到越來越少的服務器上,觀察10分鐘以上,直到服務器處理的極限。

    • 需要強大的壓測平臺
    • 立體監控系統
    • 服務治理平臺
    • 可參加各大公司的全鏈路壓測系統,在文末參考中。

流量複用工具:TCPcopy

方案二

方案一很難對整個集羣的進行壓測,容易以偏概全,無法評估系統的真實性能。如果想做全鏈路壓測:

  • 儘可能構造真實數據

  • 壓測線上真實環境

  • 核心技術

    • 壓測標識透傳

      • 線程:採用InheritableThreadLocal父線程ThreadLocal中的變量傳遞給子線程,保證了壓測標識的傳遞
      • 進程:存儲在請求的Header中,做一些標識。
    • 壓測服務隔離,不能因爲壓測影響正常服務

      • 根據業務需求在線上對整條鏈路創建一個壓測分組,隔離出一批機器用於壓測,在請求入口處,可以將請求進行分割
    • 壓測數據隔離,不影響真實數據

    • 使用影子表進行數據隔離,線上使用同一個數據庫,只是在寫入數據的時候將數據寫入到另外一張“影子表”中。

最後

附錄中給了很多互聯網大廠的真實案例,可以一起學習

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章