← 中文资源

简体中文版本

添加健康检查端点

区分存活与就绪端点,用带超时的依赖检查让编排器重启故障进程或摘除未就绪实例,同时避免泄露敏感信息。

阅读英文原文

存活与就绪的区别

**存活(liveness)**回答“这个进程是否需要重启”,只应检查进程本身和事件循环。**就绪(readiness)**回答“这个实例是否应接收流量”,可以检查数据库、缓存和必需的下游服务。

app.get('/healthz', (_req, res) => res.sendStatus(200));

app.get('/readyz', async (_req, res) => {
  const ok = await withTimeout(checkDatabase(), 1000);
  res.status(ok ? 200 : 503).json({ ready: ok });
});

步骤

  1. 添加不依赖外部服务的存活端点,避免数据库故障导致所有实例被重启。
  2. 添加就绪端点,以短超时检查关键依赖,不可用时返回 503。
  3. 为编排器配置正确的探针:启动慢时使用 startup probe,就绪检查用于从负载均衡中摘除实例。
  4. 在测试环境停止依赖,确认就绪失败而存活保持健康;恢复后确认就绪重新通过。

验证

  • /healthz 在数据库宕机时仍返回 200。
  • /readyz 在数据库宕机时返回 503,恢复后返回 200。
  • 负载均衡停止向未就绪实例发送流量。
  • 依赖故障不会导致健康进程被重启。
  • 响应中不包含连接串、堆栈或用户数据。

限制

探针运行频繁,应使用轻量查询并短期缓存结果。健康检查不是授权机制,详细诊断应放在管理员访问之后。就绪检查只能验证可达性,不能证明查询结果正确。