壓力測試與觀察性: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: {}二、 觀察指標:你在看什麼?
壓測後,我們不應該只看「是否崩潰」,更應該關注:
- p95 / p99 Latency:99% 的用戶收到的延遲是否低於閾值。
- 連線建立速度:握手過程是否有顯著堆積。
- 記憶體佔用:WebSocket 連線是記憶體消耗的大戶。
三、 建立觀察性:Prometheus + Grafana
只看 Log 是不專業的。在生產環境,我們需要即時圖表:
- Prometheus:負責抓取各個節點的指標(連線數、吞吐量)。
- Grafana:負責將指標繪製成精美的 Dashboard。
關鍵監控面板建議:
- Active Connections:目前總連線數。
- Messages In/Out:訊息吞吐處理能力。
- Event Loop Lag:Node.js 事件循環是否因過量訊息而阻塞。
總結
沒有監控的系統就像在黑暗中航行。透過壓測與觀察性建立,我們能預先發現瓶頸並在故障發生前採取行動。
下一章,我們將進入全系列完結:終極實戰專案。
️ 進階挑戰
- 實作挑戰:安裝
artillery並對你前幾章寫的「Room Manager」伺服器進行一次 60 秒的壓測,觀察 CPU 的變化。 - 深度思考:對於 WebSocket 這種長連線應用,傳統的「負載平衡器」與「伺服器端」監控,哪一個更能反映真實的連線健康度?
延伸閱讀與資源
- Artillery Docs:WebSocket guide
- K6 Docs:Testing WebSockets