BACKEND ADVANCED · 146
Graceful Shutdown / Health / Readiness:Server 不只是「開起來」
Production deploy、container restart、VM shutdown 都可能要求 process 結束。好的 server 會先停止接新 request、等既有工作收尾、關閉 DB pool,再退出。
Learning outcomes
- 能區分 liveness 與 readiness。
- 能處理 termination signal。
- 能描述 graceful shutdown 順序。
- 能設計 deploy smoke / drain evidence。
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 03. 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
↓ exit6. Release evidence
- new version health/readiness PASS
- smoke GET /health /courses
- old process drained
- error rate / latency not spiking
- rollback path available
Backend Advanced review
| 課 | 能力 |
|---|---|
| 143 | stream / backpressure |
| 144 | DB concurrency / pool / transaction |
| 145 | timeout / retry / idempotency |
| 146 | process lifecycle / health / graceful shutdown |
Knowledge check / Final challenge
- Course API 加 readiness flag。
- SIGTERM 後先停止接新 request。
- 模擬一個 5 秒 request,確認 shutdown 不會立刻切斷。
- 設計 production smoke + rollback evidence。