标准答案
- 收到停止信号后先让服务从流量入口摘除,再停止接收新请求或消息,避免新增工作继续进入。
- 为在途请求、后台任务、数据库连接和消息消费设置明确截止时间,超时后按幂等和恢复策略处理。
- 关闭顺序应覆盖监听 socket、连接池、消费者、子进程和临时资源,并记录停机阶段和超时原因。
- 进程管理器需要配置合理的停止超时和最终强杀,部署系统也要给排空时间。
题目解析
摘流只改变流量入口的选择,排空处理已经建立的请求和任务,进程退出才是最后的生命周期动作。readiness 失败后仍可能有传播延迟和已建立连接,因此服务需要主动停止 accept、停止消费,并为在途工作提供有限等待窗口。
消息消费者要在停止拉取后处理已取出的消息,只有完成并持久化结果才确认;子进程、线程池、数据库和 HTTP 客户端也要按依赖顺序关闭。每一阶段都应有 deadline 和超时原因,超过截止时间才进入强制退出和可恢复重试路径。
常见误区
- 误区:收到 SIGTERM 立即 exit。改正:先摘流、停止新工作、排空在途请求,再按 deadline 退出。
- 误区:只等待 HTTP 请求。改正:同时处理消息消费者、后台任务、线程池和子进程。
- 误区:没有停机截止时间。改正:为每个阶段设置总预算,超时记录现场并进入有边界的强制退出。