08-发布与回滚预案(蓝绿 10 步部署 × Alembic downgrade × 3-2-1 备份)¶
【重建推定版 V1.0】 / DOC-BT-08 / 版本 V1.0(2026-08-21 听写重建) 依据:03-测试环境准备 §三 听云 10 步部署 + PJM §4.6 git tag 快照 + DIP1-TND-P §7 运维三保险
一、蓝绿部署 10 步(生产发布 = 听云 OCM 执行)¶
| # | 步骤 | 说明 | 验证点 | 失败触发回滚 |
|---|---|---|---|---|
| 1 | git tag 快照 | git tag prod/v3.3.0-<YYYYMMDD-HHMM> + push Gitee 备份仓(仅备份用) |
Gitee 标签可见 | 标签失败 = 终止,不影响线上 |
| 2 | 听写打包 + scp 给听云 | 听写从听码本地接收代码包 → 推送 scp 给听云(不经过 Gitee pull) | 听云本地收到 tar+sha256 | 打包失败 → 步骤 1 重来 |
| 3 | 生产数据库备份(3-2-1 原则) | ① 本地 PostgreSQL pg_dump(加密)② 阿里云 NAS 同步一份 ③ 异地对象存储(OSS)一份;命名 dip1-prod-<YYYYMMDD-HHMM>.sql.gz.aes256 |
sha256 文件三份一致 + AES key 存入密码机 | 备份失败 = 立即中止发布(P0) |
| 4 | 蓝环境(Green)构建 | 蓝容器 dip1-api-green 拉取新包,部署 v3.3.0,不接入生产流量;alembic upgrade head(head=0011) |
Green 容器 health=200;Green-DB alembic current=head | Green 启动失败 = P0 → §三 回滚 |
| 5 | Green 执行 v3_seed(幂等) | Green DB 环境变量 7 项 Set → v3_seed.py 执行(UFCS 21 + VQR 16 + MFR 1 + LGD 1 + 17 账号 ON CONFLICT) |
Green BD-05 users count=17;BD-03 schema head=0011 | seed 非幂等报错 = P0 → §三 回滚 |
| 6 | Blue → Green 5% 金丝雀切流 | Nginx Ingress 权重:Blue=95% / Green=5%(真实客户流量,先导入 1 TL 内部测试账号流量) | Green access log 有请求,无 5xx;NPS 无骤降 | 5% 流量 5xx ≥ 3 次/min → 切回 100% Blue |
| 7 | 金丝雀扩大(20% → 50% → 100%)(每步 15min) | 每个阶段检查:QPS × 响应时间 × 5xx 率 × NPS(听云 Grafana Dashboard 实时) | 20%/50% 阶段 5xx ≤ 0.01% | 任一阶段 5xx ≥ 0.5% → 立即全量切回 Blue |
| 8 | Green 100% + Blue 保留 30min | 切流完成后 Blue 不立即下线(热备 30min,所有客户连接自然断开);同时执行 UAT 26 基线冒烟用例 | 26 用例 ≥ 24 PASS(2 个可后续修复) | 100% Green UAT 冒烟 < 24 PASS → 30min 内 §三 回滚 |
| 9 | Blue 下线 + 写 OCL 发布日志 | Blue 容器 stop(保留 24h 后再 delete);OCL 编号 L-YYYYMMDD-NN 完成 | OCL 包含 1~8 全部验证点记录 | — |
| 10 | 通知听写 + 协作记录 COLLAB 关闭 | 听云 → 听写:发布完成 + OCL 编号 → 听写更新 PJR + DTL → 进入 UAT / L4 | 三方(DT / OC / WDE)COLLAB 版本 = v3.3.0 Closed | — |
二、回滚触发阈值(满足任一立即启动 §三)¶
| 类别 | 阈值 | 响应等级 |
|---|---|---|
| 数据库 | 发布后 alembic head 错误 / 29 新表缺失任意一张 ≥ 1 张 | P0(5min 内启动回滚) |
| 5xx 错误率 | Green 在任一阶段 5xx 率 ≥ 0.5%(QPS ≥ 10 条件下) | P0(10s 内 Nginx 切回 Blue) |
| 核心指标 | S7-1 OQS 1141.60 HKD 报价失败率 ≥ 5%;S7-3 LGD ETA 推送失败率 ≥ 10% | P1(30min 内回滚) |
| NPS | 发布后 1h 内 NPS 平均 ≤ 6 星(比基线低 ≥ 3 星) | P1 |
| 安全 | 注入 / 越权 / 数据泄露 被报 1 例以上 | P0 |
| 听云健康检查 | BD-01 overall≠ok + BD-03 head 不对(连续 3 次 × 2 min 间隔) | P0 |
三、回滚 7 步(Alembic downgrade + DB 备份恢复)¶
原则:回滚是发布的一部分,任何发布前必须先演练回滚 1 次(至少阿里云 UAT 成功 1 次)
| # | 步骤 | 说明 | 验证点 |
|---|---|---|---|
| 1 | Nginx 全量切回 Blue(10s 级) | weight Blue=100 Green=0;同时 Green 关闭新入口但保留日志 2h 排障 |
Blue access log 恢复流量;Green 停止接收请求 |
| 2 | Alembic downgrade -1(Green DB) | alembic downgrade -1 回到发布前版本(本次发布前 alembic=V2.0.0 对应 head=0005) |
downgrade 执行 0 error;alembic current = 发布前编号 |
| 3 | 评估是否需要恢复 DB 备份 | 若 downgrade 失败(如数据已被不可逆转写) → 执行 §一 步骤 3 的 3-2-1 备份恢复:NAS 本地 dump 导入(最快) | 恢复后 BD-03 schema head = 发布前编号;订单表行数 = 发布前(± 发布期间新订单需手动合并) |
| 4 | Green 代码回滚(docker tag) | Green 容器镜像从 v3.3.0 → v2.0.0 prod tag(生产前一稳定版 weavely/dip1-api:prod) |
Green 容器 version = v2.0.0,health=200 |
| 5 | Blue → Green 再次切流 50/50 | 验证 Blue 热备没问题后,再做均衡验证;避免单点长期 Blue | 两端 version 均为 v2.0.0(统一版本) |
| 6 | 通知三方 + 写 OCL 回滚日志 | OCL 必须包含:触发阈值(§二哪一条)/ 影响范围(受影响订单数)/ 根因分析(初步)/ 修复 DeadLine | OCL 完成 + DTL 同步留痕(听写侧) |
| 7 | 缺陷登记进入 07-缺陷管理(WDE-006+) | 根因 = 代码问题 → WDE-前缀派单给听码;根因 = 部署/配置 → OCL-前缀听云自修复;根因 = 主数据 → MDS-前缀 | 听码写 WDL;下次发布前该缺陷必须 Closed(UAT 中通过) |
四、数据库备份 3-2-1 原则(发布必做)¶
| 备份位置 | 存储介质 | 保留时长 | 加密方式 | 恢复预计时长 |
|---|---|---|---|---|
| 1 / 本地 PostgreSQL 主机 | 本机 SSD | 30 天(每日 1 份) | AES-256 | ~10min(10GB 数据) |
| 2 / 阿里云 NAS 挂载点 | 阿里云 NAS(同可用区) | 90 天(每日 1 份) | AES-256 + NAS 加密 | ~30min(跨存储) |
| 3 / 阿里云 OSS 异地冷备 | OSS 跨区(香港 → 新加坡) | 180 天(每周 1 份) | AES-256 + OSS Bucket Policy 加密 | ~2h(跨区大文件) |
备份校验:每 周日 自动执行「NAS → 空临时 DB 恢复 → 26 基线冒烟用例」演练;恢复失败立即告警(OCL + P0)。
五、UAT 发布-回滚演练(S7 三轮之前必须通过 1 次)¶
该演练 = §一蓝绿 10 步 + §三回滚 7 步 完整跑通,用阿里云 UAT 环境(uat-cloud)模拟蓝绿,验证流程无死步骤。
| 演练 ID | 目标 | 验收 | 通过记录 |
|---|---|---|---|
| DR-202608xx-01 | 蓝绿部署流程跑通 | 步骤 1~10 全部通过;Green 5%→20%→50%→100% 无 5xx | □ TL 签字 |
| DR-202608xx-02 | 5xx 阈值触发 + 回滚 | 人为在 Green 引入一个空指针 → 5xx≥0.5% → 自动切回 Blue → 回滚 7 步 → 恢复 26 用例 PASS | □ TL 签字 |
| DR-202608xx-03 | 备份恢复演练 | NAS 备份恢复 → 验证 DB 表行数一致 → 基线用例 PASS | □ TL 签字 |
本文档为【重建推定版】,§一 蓝绿 10 步来源于 PJM §4.6 发布规范 + 双轨交付(听写打包→听云部署);§三 回滚 7 步 Alembic downgrade -1 来源于 DIP1-ARC §运维三保险;§四 3-2-1 备份来源于 TND-P §7.2 备份策略。