Skip to content

发布策略

滚动、蓝绿、金丝雀、灰度与回滚。

Updated View as Markdown
For humans

发布策略

上线是最高风险操作:发布策略决定故障影响面。面试主线:四种策略的机制与选型。

四种策略

滚动 / 蓝绿 / 金丝雀: 影响面递增可控

策略 机制 优点 缺点
滚动更新 逐个替换 Pod 简单(K8s 默认)、资源占用小 新旧并存期间兼容性问题
蓝绿 两套环境切换 回滚快(切回蓝) 双倍资源
金丝雀 小流量试新 风险最小、真实数据验证 需要流量治理(Ingress/网关)
重建 先停后启 最简单 有停机窗口(小项目用)

滚动更新(K8s 默认)

  • Deployment 更新时逐个替换:新 Pod 就绪(readiness)才继续替换
  • 参数:maxSurge(最多多出几个)、maxUnavailable(最多几个不可用)
  • 风险:新旧版本并存期间,请求可能打到两种版本(数据库兼容性问题:加列先于代码、删列后于代码)

蓝绿

  • 两套环境(蓝=旧、绿=新),验证绿后切换流量
  • 回滚 = 切回蓝(秒级)
  • 代价:两倍资源;数据库兼容(新旧代码同时连一个库)

金丝雀

  • 5%-10% 流量到新版本,监控错误率/延迟,稳定后逐步放大
  • 需要网关/Ingress 权重路由(或 K8s 多 Deployment)
  • 配合:自动回滚(指标异常自动切回)、对比日志
  • 面试话术:金丝雀是生产验证新版本的最优解(真实流量 + 最小影响)

回滚策略

手段
应用 旧镜像重新部署(不可变基础设施)
数据库 变更脚本可逆(先加后删)、备份恢复(见数据库 PITR)
配置 配置中心版本回退
GitOps git revert(见 CI/CD 篇)

数据库兼容是发布的核心约束:代码先于数据变更部署(加列兼容旧代码),删除列要等旧代码下线。

面试追问

  1. 四种发布策略? 滚动(默认)、蓝绿(切换)、金丝雀(小流量)、重建(停机)。按风险选
  2. 滚动更新的问题? 新旧并存:请求打到两个版本,要数据库兼容
  3. 金丝雀怎么做? 网关权重路由小流量,监控指标,稳定后放大,异常自动回滚
  4. 蓝绿的优势? 回滚秒级(切流量)。代价双倍资源
  5. 数据库怎么配合发布? 加列先于代码、删列晚于代码。变更可逆 + 备份兜底
Navigation

Type to search…

↑↓ navigate↵ selectEsc close