feat: drain readiness before graceful shutdown

This commit is contained in:
2026-09-20 19:41:28 +08:00
parent 656a81251e
commit 00d4156b25
5 changed files with 66 additions and 9 deletions

View File

@@ -1,6 +1,6 @@
# 健康检查接口
状态:已实现,基础阶段。无需鉴权;默认仅监听 `127.0.0.1:8080`。
状态:已实现。无需鉴权;默认仅监听 `127.0.0.1:8080`。
## GET /health/live
@@ -38,6 +38,8 @@ curl -i http://127.0.0.1:8080/health/ready
响应不包含 DSN、数据库错误文本或凭据。检查迁移记录不能发现所有人工 DDL 漂移,运行账户权限和迁移流程仍需受控。
进程收到 `SIGTERM` 后会先进入排空状态:就绪探针立即返回 `503`,再在有限的优雅关闭窗口内停止 HTTP/WS 服务并等待存量请求结束。存量任务租约不会因为探针变化而被删除,仍由正常恢复逻辑接管。
## GET /version
返回当前服务的构建和协议身份,不访问数据库,也无需鉴权。该接口适合在滚动发布或故障接管后核对节点是否运行了预期版本。

View File

@@ -6,6 +6,7 @@
| 检查 | 环境/命令 | 结果 |
| --- | --- | --- |
| 就绪探针排空门控 | `go test -race ./internal/transport/httpserver ./cmd/orbit`;`TestReadinessEntersDrainBeforeShutdown` | PASS;SIGTERM 关闭路径先将 `/health/ready` 置为 503,再进入限定优雅关闭窗口;响应不泄露内部错误 |
| 服务端单元与竞态、vet、构建 | Docker `golang:1.27.1`,仓库声明版本;`GOWORK=off go test -race ./... && go vet ./... && go build ./...` | PASS |
| 后台运行参数边界 | `internal/config.TestRuntimeDefaultsAndBoundedOverrides`;默认值与四个 `ORBIT_*` 覆盖项 | PASS;循环间隔限定100ms–1m,批量限定1–100,服务启动日志记录生效值 |
| 生效运行参数指标 | `internal/observability.TestRuntimeObservationDoesNotExposeErrors`;固定指标目录 | PASS;workflow/schedule/execution_recovery 间隔和批量上限以固定基数指标导出,不进入业务或租户标签 |
@@ -28,7 +29,7 @@
| Go 1.27.1 备份恢复脚本 | Go 1.27.1 交叉构建 macOS arm64 二进制;`scripts/test-backup-restore.sh`;MySQL 8.4 | PASS;源/恢复核心计数均为 `1,1,1,1,28`,迁移校验完整、固定索引6个、外键0 |
| Go 1.27.1 数据库短暂不可用脚本 | Go 1.27.1 交叉构建 macOS arm64 二进制;`scripts/test-db-recovery.sh`;MySQL 8.4 同卷重启 | PASS;readiness `200 → 503 → 200`,恢复后使用原凭据成功受理任务 |
| Go 1.27.1 MySQL GTID 复制与手工提升 | 两个一次性 MySQL 8.4 bridge 容器;真实 Orbit HTTP;`scripts/test-mysql-replication.sh` | PASS;复制 IO/SQL 均为 `Yes`,任务记录复制到副本,源库停止后手工提升、结构核验和原幂等键重放通过;自动切换未验证 |
| Orbit HTTP/metrics 子进程 | 同一共享网络命名空间;`TestIntegrationMetricsProcess`;metrics 启用/禁用各一组,禁用分支等待后台周期 | PASS,5.304 秒;监听隔离、隐私、后台采样、metrics 关闭后调度器持续运行和优雅退出均通过 |
| Orbit HTTP/metrics 子进程 | 同一共享网络命名空间;`TestIntegrationMetricsProcess`;metrics 启用/禁用各一组,禁用分支等待后台周期 | PASS,5.304 秒;监听隔离、隐私、后台采样、metrics 关闭后调度器持续运行和优雅退出均通过;服务就绪排空门控另有单元/竞态覆盖 |
| 真实Worker执行测量 | `orbit-exec-load`;最终短/混合/中长及截止不足四组,环境及原始JSON见[测量报告](phase-6-execution-load.md) | 96+96+6项全部逐项核验,长任务18次续租;24项截止负例按预期非零退出。SDK全模块竞态/vet/build通过,生产容量未验收 |
| 真实Weave流程测量 | `orbit-workflow-load`;24/100实例、固定发布版本双分支并行及24实例截止负例,见[流程测量报告](phase-6-workflow-load.md) | 124个正常实例、248个不同任务/唯一尝试和本地调用逐项关联;负例2成功/22未核验,非零退出。重新构建并保存源码/二进制哈希,替换旧证据;生产容量未验收 |