能回滚的发布,才叫发布

举报
yd_278382871 发表于 2026/11/14 18:24:40 2026/11/14
【摘要】 发布流程里最先被省掉的就是回滚。三件事:把回滚当交付物、分清哪类改动回不去、在非峰值时段真拔一次。上线脚本写了 200 行,回滚脚本只有一句「重新部署上一版」——而上一版已经不在制品库里了。一、回滚是交付物,不是预案回滚脚本和发布脚本一起写、一起评审,缺一半不算完成。没有回滚路径的变更,本质上是在赌。「重新部署上一版」不是回滚:制品被覆盖、镜像标签被复用、配置被就地改过,这条路就走不通。版本...

发布流程里最先被省掉的就是回滚。三件事:把回滚当交付物、分清哪类改动回不去、在非峰值时段真拔一次。

上线脚本写了 200 行,回滚脚本只有一句「重新部署上一版」——而上一版已经不在制品库里了。

一、回滚是交付物,不是预案

  • 回滚脚本和发布脚本一起写、一起评审,缺一半不算完成。没有回滚路径的变更,本质上是在赌。
  • 「重新部署上一版」不是回滚:制品被覆盖、镜像标签被复用、配置被就地改过,这条路就走不通。版本必须可寻址。
  • 回滚要有时限:入口流量切回、会话清理、缓存失效,全部算在时限里。写「5 分钟内可回滚」就真的计过时。
判据:随便挑一次历史发布,说清回滚到哪个版本、用哪条命令、谁有权执行、几分钟内完成。

二、分清哪三类改动回不去

改动类型 为什么回不去 先做的事
数据结构变更 新字段写入旧代码读不懂 先加列后用列,删列延后一个版本
不可逆副作用 消息已投递、外部已回调 幂等键 + 补偿任务,而不是靠回滚
状态就地覆盖 配置被原地改,没有旧值 配置版本化,回滚是切指针不是改内容

代码回滚是切指针,数据回滚是另一件事。把这两件事混成一句话,事故就多一次。

三、在非峰值时段真拔一次

# 演练:把流量切回上一版本,计时并记录现象
deploy switch --to "$PREV_VERSION"
deploy status --wait-until=ready
  • 演练要有人在旁边计时,记录从下决定到流量全部恢复的分钟数;只写「已演练」不算证据。
  • 演练要包含一次「发布到一半失败」:旧实例还在、新实例起不来,此时系统长什么样。
  • 每次大版本发布前后各一次,比季度一次的大演练有用得多。
判据:演练记录里有时间戳、耗时、执行人,以及演练中发现并修掉的问题。

落到华为云上:制品用容器镜像服务 SWR 打不可变标签,回滚才有目标;发布用云容器引擎 CCE 的滚动与回滚,配合应用服务网格 ASM 做流量切分;配置变更进配置中心(CSE)走版本化,别在机器上原地改;云监控服务 CES 上给回滚前后各留一段指标基线。

参考

  • Google SRE Workbook · Canarying Releases
  • 华为云 · 云容器引擎 CCE 工作负载回滚
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。