跳至主要內容
Skip to content

壓力測試與觀察性:Artillery 與 Grafana 儀表板

在上一章,我們建立了分散式集群。但真實跑在負載下的表現才是關鍵。WebSocket 壓測比 HTTP 複雜,因為它需要長時間維持連線。本章我們將學習如何使用 Artillery 進行模擬,並透過 Grafana 建立觀察眼。


一、 壓力測試工具:Artillery

Artillery 是一個現代化的壓測工具,內建強大的 WebSocket 插件。

實戰:Artillery 壓測腳本 (load-test.yml)

yaml
config:
  target: "ws://localhost:8080"
  phases:
    - duration: 60
      arrivalRate: 10
  plugins:
    ws: {}

scenarios:
  - engine: ws
    flow:
      - connect: "/"
      - send: '{"type":"JOIN", "roomID":"room-1"}'
      - think: 1
      - disconnect: {}

二、 觀察指標:你在看什麼?

壓測後,我們不應該只看「是否崩潰」,更應該關注:

  1. p95 / p99 Latency:99% 的用戶收到的延遲是否低於閾值。
  2. 連線建立速度:握手過程是否有顯著堆積。
  3. 記憶體佔用:WebSocket 連線是記憶體消耗的大戶。

三、 建立觀察性:Prometheus + Grafana

只看 Log 是不專業的。在生產環境,我們需要即時圖表:

  • Prometheus:負責抓取各個節點的指標(連線數、吞吐量)。
  • Grafana:負責將指標繪製成精美的 Dashboard。

關鍵監控面板建議:

  • Active Connections:目前總連線數。
  • Messages In/Out:訊息吞吐處理能力。
  • Event Loop Lag:Node.js 事件循環是否因過量訊息而阻塞。

總結

沒有監控的系統就像在黑暗中航行。透過壓測與觀察性建立,我們能預先發現瓶頸並在故障發生前採取行動。

下一章,我們將進入全系列完結:終極實戰專案。


️ 進階挑戰

  1. 實作挑戰:安裝 artillery 並對你前幾章寫的「Room Manager」伺服器進行一次 60 秒的壓測,觀察 CPU 的變化。
  2. 深度思考:對於 WebSocket 這種長連線應用,傳統的「負載平衡器」與「伺服器端」監控,哪一個更能反映真實的連線健康度?

延伸閱讀與資源