← Node / Backend Course

BACKEND ADVANCED · 146

Graceful Shutdown / Health / Readiness:Server 不只是「開起來」

Production deploy、container restart、VM shutdown 都可能要求 process 結束。好的 server 會先停止接新 request、等既有工作收尾、關閉 DB pool,再退出。

Learning outcomes

1. Signal

process.on(
  "SIGTERM",
  shutdown
);

平台可能先送 termination signal,給 process 一段時間收尾;不要只靠突然 kill。

2. Graceful sequence

SIGTERM
  ↓
mark not ready
  ↓
stop accepting new requests
  ↓
wait in-flight requests
  ↓
close DB pool / resources
  ↓
exit 0

3. Health vs readiness

Liveness

process 是否還活著、event loop 是否基本可工作。

Readiness

現在是否應該接新流量;例如 DB pool 尚未初始化就不 ready。

4. 不要讓 health endpoint 做太重

health check 本身會被頻繁呼叫。過度昂貴的外部依賴查詢可能反而放大故障。

5. Project checkpoint:Course API production lifecycle

startup
  ↓ config validation
  ↓ DB pool ready
  ↓ readiness = true
  ↓ serve traffic

deploy / shutdown
  ↓ readiness = false
  ↓ close listener
  ↓ drain
  ↓ close pool
  ↓ exit

6. Release evidence

Backend Advanced review

課能力
143stream / backpressure
144DB concurrency / pool / transaction
145timeout / retry / idempotency
146process lifecycle / health / graceful shutdown

Knowledge check / Final challenge

  1. Course API 加 readiness flag。
  2. SIGTERM 後先停止接新 request。
  3. 模擬一個 5 秒 request,確認 shutdown 不會立刻切斷。
  4. 設計 production smoke + rollback evidence。