部署运维规范
公开教程 · 无需登录

部署运维规范

部署运维规范回答三个问题:怎么把代码变成可复现的制品、怎么发布与回退、出了问题怎么发现。本页与骨架一页直接衔接——健康检查端点、结构化日志、容器化编排文件都在骨架阶段入库,这里规定它们的形式与发布时的用法。

1这一页管什么

构建、发布、观测、回退,四个环节各有一组约束。

  1. 管制制品与运行。可复现构建、环境分级与配置注入、健康检查与优雅停机、结构化日志与指标、发布与回滚、数据变更顺序、备份与恢复。
  2. 不交由这一页。谁能访问哪条资源属安全开发规范;接口契约属后端开发规范。两侧在本页只引用,不重写。
  3. 两种落法。日志格式、健康检查端点、镜像命名这类常驻约束写进规则;「按规范发一次版本」这类流程写成技能。
对应的课程知识点:可复现构建(reproducible build)与不可变制品、环境无关配置、优雅停机与就绪 / 存活探针的区分、可观测性三支柱(日志、指标、链路追踪),以及发布工程中的渐进式发布、回滚能力,还有数据库重构里的扩展—迁移—收缩(expand–migrate–contract)模式。

2规范条目

十一条,按一次发布的实际顺序排列。

条目要写清什么,为什么这样规定怎么检查
可复现构建依赖锁定文件入库;容器化构建(Dockerfile)分阶段,只把运行所需的产物放进最终镜像;镜像用版本号或提交号打标签。不可复现的构建无法定位线上跑的究竟是哪份代码同一提交号构建两次,产物应一致
环境与配置开发 / 测试 / 生产三级环境;同一镜像跨环境,只换配置;密钥与环境变体分开存放。各环境各构建一次时,测试结果不代表生产行为换环境部署无需重新构建镜像
健康检查(health check)存活与就绪两个端点分开;就绪未通过不接受流量;收到停止信号先处理完在途请求再退出。两者合一会让「启动中」被当成「已死」而反复重启依赖未就绪时端点返回失败;发起停止后在途请求不被切断
结构化日志(structured logging)单行 JSON;必带请求标识(request ID)、时间戳、级别、模块名;字段命名统一;敏感字段不落日志。可被查询的日志才谈得上观测抽样一次请求,检查各模块日志能否串起同一个标识
指标与告警至少定义请求量、错误率、时延、依赖连通四项指标;每条告警写明阈值、责任人与处置动作。没有处置动作的告警等价于噪声制造一次失败,检查告警是否触发并指向责任人
发布与回滚采用滚动或蓝绿发布;一键回滚到上一个版本标签;回滚步骤写进 README 并演练过。回滚能力是发布策略的前提,不是补救措施执行一次回滚并记录耗时
数据变更顺序结构变更先于代码发布且向后兼容:加字段 → 双写 → 切读 → 删旧字段;删除类操作最后执行。顺序颠倒会造成新旧版本之间必然有一段不可用窗口旧版本代码在新结构上应仍可运行
备份与恢复写明备份频率与保留期、恢复目标(RPO / RTO);定期执行恢复演练。未演练过的备份不能作为恢复依据执行一次恢复演练并记录用时
性能与容量写清时延预算(如列表接口 p95 不超过 500 毫秒)、慢操作阈值、批量大小上限、外部调用配额。没有预算时,「慢」的判断只能靠感觉定期抽样一次时延分布;超预算的接口应能定位到具体调用点
限流与配额写接口与成本较高的接口(模型调用、检索)按主体限流;超限时返回明确错误与重试建议连续发起超额请求,应被拒绝而非被排队处理
发布留痕每次发布记录版本号、变更内容、验证结论,归档到仓库的 docs/ 目录。发布记录是事后复盘的唯一时间线按版本标签检索,应能找到对应记录

3本课先写到哪

最小集合与发布顺序,四件事即可验收。

  1. 最小集合五件。容器化编排文件(Dockerfile 与 Compose)入库、一条命令启动、健康检查端点免认证、日志单行 JSON 带请求标识、版本标签。
  2. 指标推后,字段先定。后续课次才接指标,日志字段现在就要定死,避免届时返工改写全量日志。
  3. 本课做一次回滚演练。从当前版本标签与上一个版本标签各起一次,记录步骤与耗时。
  4. 发布顺序写进技能。把下列顺序写成「按规范发一次版本」技能,避免每次口头交接。
构建镜像以提交号打标签
迁移数据先加后删,向后兼容
发布滚动或蓝绿
健康检查就绪通过才接流量
打标签记录版本与验证结论
失败的分支只有一条:回滚到上一个版本标签。回滚路径若不预先演练,故障发生时它同样不可用。