标准答案
- 就绪探针先失败,让负载均衡停止分发新请求。
- 停止新消费,等待已处理消息完成并提交位点;未完成消息应可重新投递。
- 在途请求和后台任务受 shutdown deadline 约束,无法完成的工作保存状态或取消。
- 关闭顺序要避免先关数据库连接再让业务线程继续运行。
题目解析
优雅停机应先让就绪探针失败并等待流量摘除,再停止新 HTTP 请求、消息消费和定时任务,最后在 deadline 内完成或转移在途工作。不同入口都要有明确的停止状态。
消息位点只能在业务处理达到可恢复边界后提交,未完成消息应重新投递;长任务和外部调用无法立即取消时,要保存状态并让后续流程接管。
停机 deadline 到达后需要有强制关闭和告警路径。关闭顺序应让业务线程先停止,再关闭连接池、执行器和日志,避免资源先关导致二次失败。
常见误区
- 误区:收到 SIGTERM 立即退出。改正:执行摘流量、停止新工作、处理在途任务和有限冲刷。
- 误区:只停止 Web 请求不停止消费者。改正:同时暂停消息、定时任务和后台执行器,并保存未完成状态。
- 误区:停机无限等待导致部署卡住。改正:设置总 deadline,超时后按可恢复策略强制退出并告警。