启动与部署检查
1分钟内可阅读完
启动成功不等于就绪
StartBackground 同步创建 gRPC listener,固定等待约 2 秒后在 goroutine 中启动 HTTP listener。HTTP 端口绑定错误会触发 panic,返回成功不能作为全部 listener 已就绪的保证。
| 检查 | 当前含义 | 生产补充 |
|---|---|---|
/ping | HTTP handler 可达,返回 OK | 不作为数据库、缓存 readiness |
/api/healthz?service=... | Gateway/RPC 调用及服务名匹配 | 增加业务必要依赖检查 |
| 标准 gRPC health | 模板注册了 health Server | 按服务与依赖状态显式更新 |
/version | 当前二进制构建信息 | 与发布 commit/制品摘要核对 |
/metrics | 指标端点 | 核对导出配置及业务指标 |
health 查询参数 service 对应配置 services.service_code。按业务决定 liveness 与 readiness:短暂依赖故障通常应停止接流量,是否重启进程另行判断。
初始化与退出边界
框架 Init 顺序为 debugger、services、security、database、cachebox、observables、cloudevents、RPC 配置、objstore、frontend、automations、aiconnector。错误向调用方返回,但尚无跨全部步骤的事务回滚。
模板退出先 Deregister 再创建 30 秒 timeout;前者尚未统一释放所有资源。RPC Shutdown 中 HTTP shutdown 出错会提前返回,gRPC 使用 GracefulStop,没有以 context 超时触发强制 Stop 的兜底。因此不能承诺整个退出一定在 30 秒内完成。
应用应验证数据库、缓存、自定义 goroutine、MCP 和遥测的关闭;部署平台为终止预留时间,并测试进行中的长请求。不要单靠模板 timeout 字面量设置 termination grace period。
发布前验证
- 固定 CLI、pkg、API include commit 和工具链;完成生成、单测、构建并审查 diff。
- 使用真实配置启动,验证各 listener、认证、权限、数据库 schema 和业务依赖。
- 运行
make test-e2e;模板黑盒测试需独立运行服务,默认E2E_BASE_URL=http://127.0.0.1:8080,凭据与 service code 按环境设置。 - 发送 SIGTERM,观察接流量停止、长请求退出、连接释放与进程退出时间。
- 演练回退 commit/制品,并单独验证数据库兼容性及恢复。
同进程多实例需额外验证全局 Prometheus 注册与 OpenTelemetry provider;不能直接把多实例初始化视为互相隔离。