Skip to content

fix(server): 支持配置 readiness 依赖检查预算 - #282

Open
ranxi2001 wants to merge 1 commit into
productionfrom
fix/readiness-dependency-timeout
Open

ranxi2001 wants to merge 1 commit into
productionfrom
fix/readiness-dependency-timeout

Conversation

@ranxi2001

@ranxi2001 ranxi2001 commented Oct 2, 2026 •

Copy link
Copy Markdown
Owner

解决的问题与行为变化

/readyz 原来固定使用 1 秒检查 PostgreSQL 和 Redis。远程依赖正常但检查超过 1 秒时,运维只能修改代码才能调整应用预算;单独增大 kubelet 的 timeoutSeconds 无效。

新增 server.readiness_timeout_seconds / SERVER_READINESS_TIMEOUT_SECONDS,省略或 0 保持 1 秒,显式值允许 1..60 秒。HTTP 等待和共享依赖检查使用相同预算;内部调用者也有等待上限,更短的调用者 deadline 仍优先。依赖错误继续返回 503,响应不暴露内部错误;并发探针继续共用同一次检查,取消一个调用者不会中止其他调用者的检查。

关联记录与来源

Refs #279。仅补齐 readiness 预算配置,不关闭该 Issue:线上 scheduler full rebuild 超时、outbox lag 和远端依赖延迟原因仍需排查。本 PR 未引入其他仓库提交。

复现与验收

  • 基线:production 的 bc83ff9c367883e5b7d0140e6bb42e2e7cc5239c;本机 macOS arm64、Go 1.27.0。
  • TestProvideLifecycleSlowDependency 使用 sqlmock 模拟 1.2 秒 PostgreSQL Ping,并连接本地 miniredis,通过真实 provider 与 HTTP wrapper 验证:默认预算返回 503,配置 2 秒返回 200。
  • 用 Go overlay 将两处预算恢复成固定 1 秒作对照,同一测试的配置 2 秒场景按预期失败(实际 503,期望 200);这是一项固定预算机制对照,不是线上根因复现。
  • 覆盖 YAML/环境变量及覆盖优先级、0/60 边界、拒绝 -1/61、依赖错误、错误脱敏、卡住的客户端、取消、并发探针复用、存活检查与排空行为。

实际验证

检查 结果与范围
git diff --check、修改的 Go 文件经 gofmt 通过
backend/: go test -race -tags=unit ./internal/config ./internal/server ./internal/serverless 通过,三个包完整检查
固定 1 秒预算的 overlay 对照 按预期失败:配置预算的慢依赖场景仍返回 503
backend/: go generate ./cmd/server 通过,Wire 生成结果仅增加配置参数
backend/: CGO_ENABLED=0 GOMAXPROCS=2 go build -p 1 -trimpath -o /tmp/sub2api-readiness-server ./cmd/server 通过,未嵌入前端
GitHub push CI,head bf6856d6a 全部通过:后端 unit/integration、golangci-lint、前端 lint/typecheck/关键测试、脚本与辅助服务检查
GitHub Security Scan,head bf6856d6a 通过
本地全量后端 unit/integration、golangci-lint、前端构建 未在本地运行;全量后端和 lint 已由上述 CI 覆盖,前端构建未运行(无前端改动)
PR CI 首次运行 Worker 测试 TestManagedProcessGetsOnlyWorkerEnvironmentAndStops 读到 preparing 而非 running;该包与基线完全一致,已重跑失败 job。readiness 所在包通过。同 head 的 push CI 全绿不替代这条失败记录;该用例在本机 macOS 会跳过
线上延迟复现、生产验收 未运行,本 PR 不代表 #279 线上故障已修复

兼容性与运行影响

  • 配置重启生效,默认行为保持 1 秒,无数据库迁移,无新增依赖。
  • Kubernetes 需同步设置更大的探针超时,例如应用预算 3 秒、readinessProbe.timeoutSeconds: 5。Compose 需要显式传入环境变量。
  • 更大的预算会延长依赖故障时的撤流等待;先测量真实数据库/Redis 操作耗时,不能用 SSH 本地监听端口的 TCP 连接耗时代替远端往返。持续依赖故障和 scheduler 重建超时需要另行排查。
  • Serverless heartbeat 等内部调用者有自己的 deadline;本配置不会延长它们的外层预算。liveness、计费、选号和 outbox 行为未改。
  • 回退配置为 0 可恢复 1 秒预算;未合并、发布或部署本 PR。

文档与用户可见变化

更新 deploy/config.example.yaml 和 deploy/kubernetes/README.md,补充环境变量、Kubernetes 配套示例及适用边界。无 UI 改动。

Agent 使用声明

  • Agent 名称与参与范围:Codex;问题分析、实现、测试、文档与 PR 正文,未使用子 Agent。
  • 模型名称:GPT-6;更具体的模型 ID 当前会话未提供,未知。
  • 推理强度:未知,当前会话未提供可核验的配置值。

提交前自查

  • base 分支和改动范围正确,没有夹带无关修改。
  • 正文、提交、测试数据和附件不含凭据、ticket/state 或真实用户敏感信息。
  • 实际验证结果已列出,失败、未运行和未覆盖的部分已说明。
  • 已检查配置默认值、权限、兼容性及相关文档。
  • 已补充针对性回归验证与固定预算对照。
  • 已填写 Agent 使用声明及实际可确认的信息。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant