标准答案
- 存活检查适合发现进程卡死、死循环或无法继续工作的状态,失败后通常可能重启容器。
- 就绪或业务健康检查关注是否应该接收流量,数据库、依赖或初始化未完成时可能暂时不应接流量但不必重启。
- 检查命令应轻量、超时明确、依赖范围有限,避免健康检查本身把下游打垮。
- 恢复动作应区分摘流、重试和重启,并观察连续失败、启动窗口和恢复后的数据一致性。
题目解析
liveness 回答“进程是否已经无法自行恢复”,readiness 回答“当前是否应该接收流量”,startup 则给慢启动应用一个初始化窗口。健康检查本身也会占用线程、连接和下游容量,应该轻量、快速、有明确超时,并避免把所有依赖故障都转化成重启。
一个进程仍在运行但事件循环卡死、线程池耗尽或关键本地资源不可用时,单纯 ps 检查没有意义;反过来,短暂的数据库故障也不一定需要重启整个实例。应结合本地状态、依赖隔离、错误率和恢复动作定义探针语义。
常见误区
- 误区:只用 ps 判断业务健康。改正:检查能够代表接流量能力的本地端点、队列和关键资源状态。
- 误区:下游短暂故障就重启所有实例。改正:把深层依赖放入 readiness 或降级策略,避免 liveness 重启风暴。
- 误区:健康检查没有超时。改正:设置严格的 timeout、failureThreshold 和调用资源上限。