Upgrade to Pro — share decks privately, control downloads, hide ads and more …

壓力測試大冒險:解鎖應用程式的隱藏性能之謎

Marcus
November 12, 2023

 壓力測試大冒險:解鎖應用程式的隱藏性能之謎

Modern Web Conference 2023
本次議程中將全面介紹並分享壓力測試的基本觀念和理念。

首先,我們將深入探究壓力測試的重要性,探討如何明確定義測試目標,並闡述測試如何在應用程式中發現脆弱點,確保系統的穩定性與可靠性。

接著,我們將著重探討壓力測試與服務等級協定(SLA)之間的密不可分聯繫,闡明在確保系統滿足用戶期望方面,壓力測試所扮演的關鍵角色。

最後,我們將透過實際案例與工具演示,深入探討如何精心設計壓力測試場景,模擬各種負載情境,以揭示應用程式的性能極限。這三個核心觀念將引導參與者深入理解壓力測試,揭開優越性能的秘密,同時突顯壓力測試在確保SLA達成中的關鍵作用。

Marcus

November 12, 2023
Tweet

More Decks by Marcus

Other Decks in Programming

Transcript

  1. 2 I’m ▸ 後端打雜工 ▸ #挑戰自我 #分享 #可觀測性 分享經驗 -

    COSCUP、MOPCON、DevopsDays - .NET Conf、Will 保哥線上技術分享 - 微軟活動 : 打造化繁為簡的雲原生平台 Hello! m@rcus 學習筆記 Marcus
  2. 4 Agenda 1 Performance Testing 工具選擇 Takeaway 4 3 2

    傳統監控工具的挑戰 Credit to : https://www.behance.net/diegocarbonell
  3. 12 流量 10 倍,會發生什麼事 ? RD 會受傷 Credit to :

    https://game.udn.com/game/story/10453/3232490
  4. RAS : Reliability, Availability & Serviceability • 可靠性 Reliability •

    特定的時間內,系統正常執行成功的機率(失敗) • 平均無故障時間 (MTBF) : 20天10小時12分鐘 • 可用性 High Available • 正常運行時間的百分比(成功) • 衡量指標 : SLA 99.90% • 可維護性 Serviceability • 系統修復或維護的簡單性和速度 • 出現問題時診斷系統的各種方法。及早發現故障可以減少或避免系統停機 16 Credit to : https://en.wikipedia.org/wiki/Reliability,_availability_and_serviceability
  5. 17 Make it work Make it right Make it fast

    - [質] 系統活著 - [質] 功能正常 - [量] 性能佳 (Performance)
  6. 20 What makes me recognize that I have a performance

    problem ? 反思 : 如何知道應用程式有性能議題
  7. ” In software engineering, performance testing is in general a

    testing practice performed to determine how a system performs in terms of responsiveness and stability under a particular workload ” 28 - Wikipedia
  8. Testing Types and Strategies • 效能測試!= 壓力測試 • 非功能性需求 (Non-function

    required) • less traffic ≠ no performance problems • troubleshooting and debugging • 不同目標跟方式 29
  9. 30 Testing Types and Strategies Spike : 驗證系統在活動突然、短暫和大量增加的情況下的行為 Smoke :

    驗證腳本是否有效以及系統在最小負載下是否能夠充分執行 Average Load : 評估系統在預期正常條件下的效能 Stress : 評估當負載超過預期平均值時系統在其極限下的表現 Soak : 評估系統在較長時間內的可靠性和性能 Breakpoint : 逐漸增加負載,以確定系統的容量限制 Credit to : Load test types
  10. 測試計畫 : Testing Plan 39 Business Needs Stakeholder Requirements Test

    Scenario Execution (Test case) Result & Reporting
  11. Business Needs : Defining Goals • Why : 為什麼需要測試 •

    ex : 了解系統目前狀況 • Define goals and required • ex : 順利度過雙11 • ex : 提升應用程式性能 20% • 結果是否符合預期 • 監控與追蹤成效 • 量化數據 & Test Report 41 Credit to : 我是誰 我在哪 我要去哪裡
  12. Business Needs : Defining Goals SLA Service Level Agreement SLOs

    SLIs Service-Level Indicator Service-Level Indicator Service-Level Indicator Credit to : https://k6.io/modern-load-testing-for-engineering-teams/
  13. Business Needs : Defining Goals SLA 99% latency < 300ms

    SLOs SLIs 99% latency < 100ms 99% latency > 150ms Latency of successful (http 200) 99% latency < 200 ms Credit to : https://k6.io/modern-load-testing-for-engineering-teams/
  14. 設計壓力測試場景 • 為了在過程中獲得 有意義的數據,制定清晰的測試場景 • 場景設計 : 定義你想要測試的情境,並設置相關環境。 • 合適的測試

    : 定義應用程式的合理負載,以使其能夠應對不同情況。 • 準備測試數據 : 製作測試用的基礎數據,以生成更加真實的測試場景 44
  15. 測試場景 : 以打卡系統為例 46 6:00 AM 12:00 PM 06:00 PM

    00:00 AM N N+1k N+2k N+3k N+4k 早上高峰負載測試 (Load Testing) - 逐漸增加吞吐量或 VU - 並在一段時間內保持該平均負載 目的 : 測試系統在預期負載下的性能 Credit to : https://k6.io/docs/test-types/
  16. 測試場景 : 以打卡系統為例 47 6:00 AM 12:00 PM 06:00 PM

    00:00 AM N N+1k N+2k N+3k N+4k 下班高峰尖峰測試 (Spike Testing) - 模擬突然和非常高的負載 - 缺乏穩定(滿載)持續時間或通常很短暫 目的 : 確定系統的行為方式以及它是否能夠承受突然的負載衝擊 Credit to : https://k6.io/docs/test-types/
  17. 測試場景 : 以打卡系統為例 48 6:00 AM 12:00 PM 06:00 PM

    00:00 AM N N+1k N+2k N+3k N+4k 低流量穩定性測試 (Soak Testing) - 系統在較長時間內效能下降和資源消耗。 - 系統在較長時間內的可用性和穩定性 目的 : 長時間使用後的穩定性和可靠性,機器使用狀況 Credit to : https://k6.io/docs/test-types/
  18. 測試場景 : 以打卡系統為例 49 6:00 AM 12:00 PM 06:00 PM

    00:00 AM N N+1k N+2k N+3k N+4k 極限測試 (Breakpoint Testing) - 需要知道系統的負載是否預計會持續成長 - 對程式碼庫或基礎設施進行重大更改之後 目的 : 找到系統限制 (暴力解) Credit to : https://k6.io/docs/test-types/
  19. 壓力測試工具選擇 51 關鍵因素 目的 說明 Note 測試需求 定位問題 確定測試類型,網路/伺服器/應用程式/資料庫 單一使用者

    vs. 多用戶並發 用戶介面 操作便利性 選擇合適的使用者介面:圖形介面或命令列 圖形介面 vs. command script 操作便利性 腳本的易用性、方便性與參數化 分析報告 性能診斷 性能指標與問題識別 簡單、易於理解的測試報告 整合與支援 CI/CD 工具的整合能力和社區、官方支持 成本 管理預算 考慮工具的購買成本和長期維護費用 免費開源 vs. 付費商業 Performance 資源優化 對硬體和系統資源的需求 Scalability 適應性 是否支援大規模使用者模擬 系統架構 適應性 是否適合既有的系統架構 單體 vs. SOA vs. 微服務 團隊 適應性 是否適合團隊的技能水平和偏好 學習資源 知識傳遞 文件和學習資源
  20. 壓力測試工具選擇 : k6 53 • Since 2016 18.5 starts •

    CNCF Project • Grafana lab Load Impact • Go • Performance Engine • CLI & API • 開發者體驗++ Developer • Reliability Testing tool • Load testing、E2E • Integration Testing • Chaos Testing、Functional Testing Testing tool
  21. 高併發 • 目的 • 消峰填谷 • 策略 • 快取 •

    限流 • 服務降級 • 非同步 • 排隊 65 Credit to : https://help.aliyun.com/document_detail/102687.html
  22. 限流 • http status code : 429 Too Many Requests

    68 Credit to : https://www.wallarm.com/what/rate-limiting