标准答案

  1. 先切换健康状态并等待负载均衡摘除,随后停止接收新请求和新任务。
  2. 设置统一 shutdown deadline,清理 HTTP server、消息消费者、定时器和连接池。
  3. 未完成消息应让位点不提交或保存任务状态,使其可重新投递;不可逆副作用要可查询。
  4. 重复信号、清理失败和超时退出都要可观测,启动重试要防止风暴。

题目解析

SIGTERM 后先标记未就绪并等待负载均衡摘除,再停止新 HTTP、消息和定时任务,给在途工作有限时间完成。直接 process.exit 会截断日志、请求和消息状态。

消息位点只在业务处理达到可恢复边界后提交;未完成消息应重新投递,外部副作用未知时保存操作状态。数据库和连接池要在业务线程停止后再关闭。

重复信号、清理异常和 deadline 超时都要有日志和指标。进程管理器的重启退避和健康检查要防止停机失败变成重启风暴。

常见误区

  • 误区:先关闭数据库再等待请求。改正:先停止新工作和完成/取消在途请求,再关闭下游资源。
  • 误区:停机期间继续接受新消息。改正:先摘除实例并停止消费者,未完成消息保持可重新投递。
  • 误区:没有总超时导致进程永远不退出。改正:设置 shutdown deadline,超时后按可恢复策略强制退出并告警。

作者信息