想象你经营着一家口碑极好的餐厅“蓝记”。隔壁新装修的“绿记”也准备开业了——两家的菜单、后厨布局、服务员培训全都一模一样。不同的是,蓝记的大厨是老面孔,绿记的大厨带来了一套新研发的菜品。聪明的你决定先让蓝记继续招待老顾客,让绿记在后厨悄悄试菜。等绿记的菜试好了、客人满意了,你才在门口挂出“今日请往绿记”的牌子,把客人领进去。万一绿记的菜出了问题?你只需要把牌子换回来,客人依旧能在蓝记享受熟悉的味道——整个过程,餐厅从未打烊。 这就是蓝绿部署(Blue-Green Deployment):始终维护两套完全相同的生产环境,一套“蓝色”承载当前流量,另一套“绿色”部署新版本;验证通过后瞬间把流量切换过去;一旦发现异常,再瞬间切回。这套模式是云原生时代实现“零停机发布”最经典的招式之一。本文会从环境准备、发布流程、流量调度、数据兼容到回滚机制,像开一家“蓝记·绿记”一样,把蓝绿部署的完整实践路径讲给你听。

岗位关联

掌握蓝绿部署,你将具备设计零停机发布方案的能力,这是云架构师与DevOps工程师在关键业务系统上线时的核心方法论。

目录
  1. 可视化演示
  2. 蓝绿部署原理
  3. 环境准备
  4. 发布流程
  5. 流量调度
  6. 数据兼容
  7. 回滚机制
  8. 实践要点
  9. 场景选型
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

\u5c55\u793a\u84dd\u7eff\u90e8\u7f72\u53cc\u73af\u5883\u67b6\u6784(LB\u8def\u7531+\u84dd\u8272\u6d3b\u52a8+\u7eff\u8272\u5f85\u547d)\u3001\u6d41\u91cf\u5207\u6362\u4e0e\u5065\u5eb7\u68c0\u67e5(4\u9636\u6bb5\u95e8\u7981+\u5207\u6362\u6bd4\u4f8b\u4eea\u8868)\u3001\u56de\u6eda\u673a\u5236\u4e0e\u6570\u636e\u8fc1\u79fb(DB\u7248\u672c\u517c\u5bb9+\u5feb\u901f\u56de\u6eda+\u8d44\u6e90\u6210\u672c)\uff0c\u5207\u6362\u6a21\u5f0f\u67e5\u770b\u3002

本节配有交互动效(进入视口后自动加载,约 3KB)。

\u84dd\u7eff\u90e8\u7f72\u53cc\u73af\u5883\u67b6\u6784 \u84dd\u8272\u73af\u5883:\u5f53\u524d\u6d3b\u52a8,\u63a5\u6536\u5168\u90e8\u6d41\u91cf \u7eff\u8272\u73af\u5883:\u5f85\u547d\u72b6\u6001,\u65b0\u7248\u672c\u5c31\u7eea traffic = LB(blue, green) \u8d1f\u8f7d\u5747\u8861\u5668\u63a7\u5236\u6d41\u91cf\u5206\u53d1\u6bd4\u4f8b

蓝绿部署原理

还是那家蓝记。绿记建好了,但你真的敢让客人进去吗?蓝绿部署的底气来自一个简单到接近“笨”的思路:旧店不关,新店先备好,两店完全一样,客人只进其中一家。技术世界里,“两家店”就是两套独立的环境。谁收客流量,谁就是“蓝色环境”;另一套待命的环境就是“绿色环境”。

传统发布像“餐厅装修歇业三天”——停服、更新、再开业,用户只能干等。蓝绿部署则把“更新”和“营业”解耦:新代码先部署到空闲的绿环境,在真实网络环境下做验证,验证通过后,负载均衡器把流量从蓝切到绿。切换完成后,旧版本并非立即销毁,而是原地待命,随时准备接客。

这在数学上如何体现价值?我们用可用性公式来衡量。MTBF 是平均无故障时间,可以理解为系统平均能连续正常工作多久;MTTR 是平均修复时间,可以理解为出故障后平均要花多久才能恢复。传统发布出故障时要重新部署回滚,MTTR 可能长达几十分钟;蓝绿部署只需把流量切回,MTTR 从小时级压缩到秒级,可用性自然逼近 100%。

蓝记灶台上的火从未熄灭,这就是绿记敢于大胆试菜的底气。双环境并行加上快速回滚,构成了蓝绿部署不可动摇的两根支柱:一个保证“新菜有地方试”,一个保证“试砸了能立刻换回来”。

A=MTBFMTBF+MTTRA = \dfrac{\text{MTBF}}{\text{MTBF} + \text{MTTR}}
MTBF 是“系统平均能撑多久不坏”,MTTR 是“坏了之后平均多久能修好”。蓝绿部署把 MTTR 压到秒级,所以可用性 A 无限接近 1。
  1. MTBF(平均无故障间隔时间)系统两次故障之间正常工作的平均时长。例如某服务平均运行 90 天才会发生一次故障。
    MTBF=90 天\text{MTBF} = 90\ \text{天}
  2. MTTR(平均修复时间)从故障发生到恢复正常的平均时长。传统发布回滚可能需要 1 小时,换算成天约等于 0.04 天。
    MTTR=1 小时≈0.04 天\text{MTTR} = 1\ \text{小时} \approx 0.04\ \text{天}
  3. 分母(MTBF + MTTR)一个完整“故障—恢复”周期的时间跨度,表示系统从一次修复完成到下一次修复完成的总耗时。
    周期=MTBF+MTTR\text{周期} = \text{MTBF} + \text{MTTR}
  4. 比值 A(可用性)正常工作的时间占整个周期的比例。A 越接近 1,说明系统可用性越高。
    A=9090+0.04≈0.9996A = \dfrac{90}{90 + 0.04} \approx 0.9996

环境准备

开分店最难的不是装修,而是“一模一样”。装修风格可以复制,但后厨布局、设备型号、调料品牌,任何一处细节不一致,绿记试菜得出的结论就不可信——在蓝记能成的菜,到了绿记可能翻车。部署世界里,这种“两套环境行为不一致”的问题被称为环境漂移,它会让所有验证工作失去意义。

对付环境漂移最有效的武器是基础设施即代码(Infrastructure as Code,简称 IaC)。简单说,就是用 Terraform、CloudFormation 这类工具将网络、服务器、负载均衡、中间件全部描述成代码,蓝绿两套环境由同一份代码“渲染”出来。因为环境是“生成”的而不是“手工搭建”的,天然就消除了一处处手工点击造成的细微偏差。

IaC 之外,配置管理同样要纳入体系。应用的环境变量、密钥、开关配置应从代码中剥离,放入配置中心,按环境维度区分但不允许随意漂移。资源隔离方面,建议把蓝绿环境放进独立的 VPC 或用子网、安全组彻底隔离,避免切换演练时误触对方的资源;生产与测试账号也要分离,防止绿环境启动时读到蓝环境的密钥。

只有后厨的一切都像倒模复制,绿记试菜的结论才有资格代表真实营业场景。环境准备做得越“无趣”,发布当天才能越“有趣”——零事故地开业。

发布流程

绿记后厨开工了。大厨不是现买现做,而是先准备一批“半成品料理包”——每包都一模一样,做出来的菜才能稳定。这对应“不可变镜像”思想:把应用代码、运行依赖、基础镜像一起打包成容器镜像或机器镜像,构建完成后绝不修改。部署时直接拉取这个镜像到绿环境,避免“在服务器上临时改配置”导致环境漂移。

标准发布流程分四步。第一步,CI 流水线构建不可变镜像并上传到镜像仓库。第二步,用编排工具(Kubernetes、Docker Compose 等)把镜像部署到绿环境。第三步,执行冒烟验证——健康检查端点、核心业务链路、依赖连通性,全部绿灯后,才进入第四步:流量切换。注意,这个阶段绿环境对外部用户不可见,所有验证信号都来自内部探针。

冒烟验证的具体动作可以包括:调用服务的 /healthz 端点确认进程存活、跑一遍关键业务用例(如登录、下单)、检查依赖的数据库和缓存是否连通。只要有一项失败,发布流程立即中止,绿环境继续调整,蓝环境完全不受影响。这就是“把翻车风险锁在绿环境里”的含义。

试菜的过程被完整走完,且每一步都有日志记录,客人才会被放心地领进绿记。发布流程的核心纪律是:没有验证,绝不切换。

流量调度

开业的那一刻,真正发挥作用的是门口那位“迎宾员”——负责判断让客人走向哪扇门。技术世界里的迎宾员是流量调度层:负载均衡器(SLB/Nginx)、DNS、API 网关等。蓝绿切换的本质是“修改流量分发规则”,而不是“漂移服务器 IP”。

最常用的切换方式是负载均衡切换:把 VIP 或域名指向的服务器组从蓝色实例组换成绿色实例组。切换完成后,蓝色实例不再收到新请求,但连接池里的存量请求会自然结束。另一种方式是 DNS 切换,成本更低但生效有延迟(受 TTL 影响),适合对切换时间不敏感的场景。

会话保持是常见的坑:如果用户 Session 存在应用服务器本地内存,切流量后会全部失效,表现为“用户突然掉线”。因此要让 Session 存储在 Redis 等外部中间件,或配置负载均衡的会话粘连策略。渐进式流量则把“全量切换”变成“按权重过渡”:先 5% 流量到绿环境,观察无误再 50%、100%,这被称为“蓝绿金丝雀”混合玩法。

迎宾员手里的遥控器不仅可以让客人“全部去绿记”,也可以先“派几位勇敢的客人去试菜”。关键是把开关设计得够灵活、够可逆,让流量调度成为发布流程里最从容的一步。

数据兼容

蓝记和绿记共用地下室的同一个巨型冷冻库。绿记研发的新菜要用新食材,旧菜还要继续卖——冷冻库的存货结构必须同时兼容两份菜谱。这是蓝绿部署最容易被低估的环节:代码可以有两个版本,数据库通常只有一个。

绿环境部署新代码后,如果直接改数据库 Schema(表结构),蓝环境的老代码可能立刻读不了新表结构。因此数据库必须先做到“向后兼容”:新增字段而非删除字段、新增表而非修改旧表、对所有变更准备可回滚的迁移脚本。更严谨的做法是引入双写策略:切换窗口期,新旧两套代码同时对数据库写入,用数据比对工具校验一致性,确保绿环境接管后不会丢数据。

迁移回滚要求每次迁移都带“逆操作”(down 脚本),一旦发现 Schema 变更有问题,可以立即降级回旧结构。切换前还必须完成全量备份与恢复演练——备份不是挂在墙上看的,恢复过才叫备份。很多团队切流量前信心满满,切完后才发现新代码写入的数据格式,旧代码根本读不了,只能加班手工修数据。

冷冻库里的食材编号没变、保质期算法没变,两边的菜谱才能安心切换。数据兼容是蓝绿部署的“隐形地基”,地基没打牢,上面建得再漂亮也白搭。

回滚机制

绿记开业十分钟,最挑剔的老顾客皱眉了:“这菜不是原来的味道。”你二话不说走到门口,把指示牌翻回“请往蓝记”。蓝绿部署最大的礼物,就是让“回滚”从一次重新部署变成一次流量切换。

实现的前提是:切换动作本身必须可逆且幂等。负载均衡的方向再掰回来,蓝环境因为一直保有旧版本流量所需的全套资源,立刻就能接客。这比滚动部署要逐步反向替换实例快得多。

但回滚不等于“一切恢复原样”。业务一致性要处理:切换期间产生的数据若已按新格式写入,旧代码可能读不了,需要做数据补偿或双写清理。监控告警是回滚决策的输入:切换后要在 10 分钟内紧盯错误率、P99 延迟、5xx 状态码等指标,出现异常阈值立即触发回滚预案。应急预案要写明“什么情况回滚、由谁拍板、如何通知用户”,并且至少演练过一次。

灶台没熄火,蓝记随时能重新掌勺。但“随时能掌勺”不等于“厨房没有用过的痕迹”,数据善后工作一样不能少——回滚不是结束,而是另一场运维动作的开始。

实践要点

一家稳定营业的餐厅,靠的不是某个大厨的个人英雄主义,而是后厨、领班、店长之间的默契,以及一本写清楚 SOP 的手册。蓝绿部署要把这套“默契”固化成工具和流程。

自动化工具是底线:从构建、部署、验证到切换,全部脚本化或流水线化,杜绝“人肉点击生产环境按钮”。发布系统要留审计日志,每次切换、回滚都有记录可查。发布单上应该能看到:谁在什么时间、把什么版本、从哪个环境切到了哪个环境。团队协作要明确职责边界:开发负责镜像与应用健康,运维负责流量调度与回滚,DBA 负责 Schema 兼容与备份,QA 负责冒烟用例。

成本控制上,绿环境在非发布期可以缩容或按需启动,但核心规格要与蓝环境保持能力匹配,否则切换后扛不住流量。最后是演练测试:每季度至少做一次故障注入演练,故意让绿环境启动失败,检验回滚链路是否真的通。演练中暴露的问题,远比真实事故中暴露的问题便宜得多。

开业前反复走场的排练,才是开业当天从容不迫的底气。蓝绿部署的“演练文化”也是如此:平时多流汗,战时少流血。

场景选型

是不是每家餐厅都应该开分店?显然不是。路边摊开分店,成本翻倍却未必多赚钱;连锁品牌不开分店,反而失去规模优势。蓝绿部署的适用场景有明显的边界。

最典型适用的是高可用关键业务:在线交易、账户系统、核心 API——停机一分钟都是事故。这些业务通常已有成熟 CI/CD 与监控体系,能支撑蓝绿环境的自动化和验证要求。它的局限性同样清晰:一是成本,双环境意味着接近双倍的资源开销;二是数据迁移复杂,有状态应用(尤其大规模数据库结构变更)用蓝绿会很痛苦;三是切换本身也有风险。

与滚动部署对比:滚动部署在同一套集群里分批次替换实例,资源占用少但回滚需要逐步反向替换,慢且复杂;金丝雀部署更精细但周期长。因此选型建议是:核心系统优先蓝绿或蓝绿与金丝雀混合;非核心系统用滚动部署控制成本;对数据迁移要求极高的系统,先解决数据兼容问题,再考虑蓝绿。

算清楚“一份资源成本”换“一份秒级后悔权”的账,你就知道自己的业务该不该开这家分店了。

AI 应用场景

AI模型推理服务零停机更新

阶段:模型部署与发布(MLOps)

解决的问题:推荐、风控等在线 AI 服务更新模型时,旧模型不能下架,新模型需要真实流量验证。传统方式停服更新会让线上推理中断,且指标劣化时无法秒级回退。

具体案例:某电商推荐系统在“大促”前升级排序模型,新模型部署到绿环境,预热加载特征并回放历史请求,对比 AUC 与推理延迟达标后,负载均衡切流。观察 10 分钟无异常后,蓝环境保留 24 小时作为回滚保险。

大数据平台组件升级

阶段:AI 基础设施运维

解决的问题:Spark/Hadoop 集群升级版本时,离线任务不能中断;升级失败需要快速回到旧版本,避免数据管道长时间停摆。

具体案例:某数据中台升级 Spark 3.x:蓝集群继续跑每日批任务,绿集群并行搭建并迁移部分非核心任务,运行一周稳定后,调度入口切到绿集群,蓝集群保留观察。

AI训练平台版本发布

阶段:平台工程

解决的问题:Kubeflow 等训练平台自身升级时,正在训练的实验任务可能被中断;平台 Web 入口需要零停机。

具体案例:某 AI 公司的训练平台采用蓝绿发布:新版本绿环境启动后,先创建一个示例训练 Job 跑通“提交—调度—日志—产物”全链路,再切换 Web 网关入口,旧版本环境保留 48 小时。

Python 演示

python53 行
class BlueGreenDeploy:    """模拟蓝绿部署的发布、切换与回滚流程。"""     def __init__(self, service_name):        self.service = service_name        self.version_map = {"blue": "v1", "green": "v1"}        self.live_env = "blue"        self.switch_count = 0        self.rollback_count = 0        self.audit_list = []     def _record(self, message):        self.audit_list.append(message)        print("[audit]", message)     def deploy(self, env, version):        self.version_map[env] = version        self._record("deploy " + version + " -> " + env)     def health_check(self, env):        ok = self.version_map[env].startswith("v")        print("health check", env, self.version_map[env], "OK" if ok else "FAIL")        return ok     def switch(self):        target = "green" if self.live_env == "blue" else "blue"        if not self.health_check(target):            raise RuntimeError("health check failed, refuse to switch")        old = self.live_env        self.live_env = target        self.switch_count += 1        self._record("switch " + old + " -> " + target)     def rollback(self):        target = "green" if self.live_env == "blue" else "blue"        self.live_env = target        self.rollback_count += 1        self._record("rollback -> " + self.live_env)  def main():    bg = BlueGreenDeploy("recommend-api")    bg.deploy("green", "v2")    bg.switch()    print("live env now:", bg.live_env)    bg.rollback()    print("live env after rollback:", bg.live_env)    print("summary:", bg.switch_count, "switch,", bg.rollback_count, "rollback")    print("audit:", bg.audit_list)  if __name__ == "__main__":    main()
目的:用一个小型类模拟蓝绿部署的“部署到绿 → 健康检查 → 切换 → 回滚”全流程,并记录审计日志。
  1. self.version_map = {"blue": "v1", "green": "v1"}用字典记录蓝绿两个环境各自的版本号,相当于两本菜单
  2. def deploy(self, env, version):将新版本部署到指定环境,也就是“绿记上架新菜”
  3. if not self.health_check(target):健康检查失败就拒绝切换,等于“菜没试好不许开业”
  4. target = "green" if self.live_env == "blue" else "blue"计算目标环境:蓝活则切绿,绿活则切蓝
  5. def rollback(self):直接把流量切回另一环境,这正是蓝绿部署“秒级回滚”的抽象
  6. self.audit_list.append(message)每次操作写入审计日志,方便事后追查发布历史

常见误区

误区蓝绿部署需要两套完全独立的数据库,蓝环境和绿环境各连各的库,否则无法回滚。

正解实践中蓝绿环境通常共享同一套数据库(或主从库),只是应用层代码不同。维护两套独立数据库会引入数据同步难题,切换后数据不一致反而更危险。正确做法是“应用双套、数据库共享”,通过 Schema 向后兼容和双写策略来保证数据一致,这样回滚时数据才跟得上。

为何常见:因为环境分成了两套,直觉上认为数据库也要跟着分两套,忽略了数据库是有状态的核心资产,不是简单的无状态服务。

误区流量切到绿环境后,蓝环境就完成任务了,应该马上释放资源,省下的成本才是真金白银。

正解蓝环境在保留期(通常 24 到 72 小时)内必须保留,以应对回滚。过早销毁蓝环境等于主动放弃“后悔权”。很多事故恰恰发生在切换后的第一个小时,如果没有蓝环境兜底,就只能重新部署回滚,MTTR 从秒级又变回小时级。

为何常见:资源成本是真实压力,尤其在云上按量计费模式下,看到一个空闲环境总觉得浪费。但这是蓝绿部署的“保险费”,不是浪费。

误区蓝绿部署就是分批次把服务器替换成新版本,和滚动部署差不多,只是换了个说法。

正解两者本质不同。蓝绿部署是两套完整环境并行,通过一次流量切换完成发布;滚动部署是在同一套环境里按批次逐步替换实例,没有完整的“旧环境”保留可供快速回滚。蓝绿回滚是秒级,滚动回滚需要反向逐批替换,慢得多。

为何常见:两者都追求零停机,而且都涉及多台机器的新旧替换,没有深入理解“环境是两套还是一套”时很容易混淆。

误区只要用 IaC 管理环境、用不可变镜像打包应用,切换时就一定能成功,不会出任何问题。

正解镜像一致解决的只是“代码和环境”问题,数据兼容、会话保持、监控告警是三座容易被忽略的大山。很多事故发生在切换之后:Session 全部失效、数据库 Schema 不兼容导致接口报错、告警规则没有覆盖新版本的关键指标。环境一致是必要条件,不是充分条件。

为何常见:在“不可变基础设施”理念被广泛强调的背景下,人们容易过度聚焦环境层,而忽视应用的运行时状态和外部依赖。

误区发现问题后一键把流量切回旧环境,用户无感知,一切就恢复原样了。

正解回滚后数据可能已经按新格式写入数据库,旧代码读不了这些数据。需要数据补偿机制,比如双写清理、字段回填、状态机校正。流量回滚是“前台动作”,数据回滚是“后台善后”,两者必须同时设计,否则可能出现“界面是旧的、数据是新的”的割裂状态。

为何常见:流量切换直观可见,而数据回滚是隐性的,不触发问题时很难想起来,导致设计时被忽略。

面试题

Q1. 蓝绿部署最核心的目标是什么?

单选题 · easy

  • A.降低服务器硬件成本
  • B.实现零停机与快速回滚← 正确答案
  • C.提升单台的服务器性能
  • D.简化应用程序的代码结构

答案:B。蓝绿部署通过维护两套并行环境,把“发布”变成“切换”,从而实现零停机发布;出问题时再把流量切回旧环境,实现秒级回滚。成本、性能、代码结构都不是它的核心目标。

Q2. 蓝绿部署中“蓝”环境通常指的是?

单选题 · easy

  • A.当前承载线上流量的环境← 正确答案
  • B.开发用的沙箱环境
  • C.新版本待发布的测试环境
  • D.已经废弃不用的历史环境

答案:A。“蓝”环境是当前正在承接生产流量的那一套环境,类似还在营业的蓝记餐厅;“绿”环境是部署了新版本、等待切换的那一套。开发沙箱和测试环境不在蓝绿部署的概念范围内。

Q3. 流量切换到绿环境后,旧环境保留一段时间的意义有哪些?

多选题 · mid

  • A.便于快速回滚到旧版本← 正确答案
  • B.提供数据迁移的缓冲期
  • C.让两套环境同时承载流量
  • D.持续监控对比新旧版本差异← 正确答案

答案:AD。保留蓝环境的核心意义是“后悔权”——一旦绿环境异常,立即把流量切回蓝环境;同时可以在保留期内对比新旧版本的监控指标,确认新版本稳定后再回收。数据迁移缓冲应在切换前完成,且蓝绿部署通常不鼓励两套环境长期同时承载流量。

Q4. 保证蓝绿两套环境配置一致的最佳手段是什么?

单选题 · mid

  • A.编写详细的手工操作手册
  • B.采用基础设施即代码来实现← 正确答案
  • C.定期人工巡检所有配置项
  • D.通过数据库主从同步解决

答案:B。基础设施即代码(IaC)把网络、服务器、中间件都描述成代码,两套环境由同一份代码生成,从源头杜绝手工配置的偏差。手工手册和巡检只能发现问题,不能消除问题;数据库主从同步解决的是数据问题,不是环境一致性问题。

Q5. 蓝绿部署中数据兼容最核心的关注点是什么?

单选题 · hard

  • A.Schema双向兼容与迁移可回滚← 正确答案
  • B.新版本性能必须高于旧版本
  • C.数据库选型需要保持一致
  • D.环境数量必须为两台服务器

答案:A。数据库 Schema 必须做到向后兼容(新增而非删除字段),让新旧两版代码都能读写;迁移脚本必须带逆操作,失败时可降级回旧结构。性能高低、选型是否一致都不是数据兼容的核心问题。

Q6. 蓝绿部署中“快速回滚”的本质是什么?

单选题 · easy

  • A.重新发布一次旧的代码版本
  • B.将生产流量直接切回旧环境← 正确答案
  • C.在原环境上打补丁修复缺陷
  • D.重启旧的服务进程来完成

答案:B。蓝绿部署的回滚不是“重新部署”而是“切换方向”——负载均衡器把流量从绿环境掰回蓝环境,秒级完成。蓝环境一直保留着旧版本的全套资源,所以不必重新发布或打补丁。

Q7. 以下哪种场景最适合使用蓝绿部署?

单选题 · mid

  • A.需要零停机的高可用关键业务← 正确答案
  • B.高频迭代的个人学习项目
  • C.非实时的离线大数据批处理
  • D.纯静态的企业门户展示页面

答案:A。蓝绿部署适合停机代价极高的关键业务,如在线交易、账户系统、核心 API。个人项目、离线批处理、静态页面要么没有高可用要求,要么可以通过其他低成本方式发布,没必要付出双环境成本。

Q8. 蓝绿部署的局限性包括哪些?

多选题 · mid

  • A.运行和维护成本直接翻倍← 正确答案
  • B.数据库结构变更带来复杂性← 正确答案
  • C.需要完善的自动化部署能力← 正确答案
  • D.切换流量时完全不支持回滚

答案:ABC。双环境意味着双倍资源开销;共享数据库时 Schema 变更必须兼容两版代码,复杂度高;发布、切换、回滚都依赖自动化。D 说法错误——蓝绿部署恰恰因为可以切回流量才支持快速回滚。

Q9. 蓝绿部署切换后,旧环境在保留期结束后应如何处理?

单选题 · hard

  • A.立即销毁并回收全部资源
  • B.继续承担一部分生产流量
  • C.观察稳定后逐步回收资源← 正确答案
  • D.直接转作开发测试环境

答案:C。保留期结束后,通常先确认监控指标持续稳定,再逐步回收旧环境资源,避免“刚销毁就发现要回滚”的尴尬。立即销毁太激进,继续承担流量违背蓝绿切换原则,转作开发环境会破坏生产环境一致性。

Q10. 关于蓝绿部署与滚动部署的对比,下列说法正确的是?

多选题 · extreme

  • A.滚动部署按批次更新占用资源较少← 正确答案
  • B.蓝绿部署回滚通常比滚动部署更快← 正确答案
  • C.两种方式都要求数据库向后兼容← 正确答案
  • D.蓝绿切换瞬间无需关注会话保持

答案:ABC。滚动部署在同一套集群内分批替换,不需要完整空闲环境,资源占用少;蓝绿回滚是切换流量,滚动回滚要反向逐批替换,因此蓝绿更快;两者共享数据库,都要求 Schema 向后兼容。D 错误——会话保持是蓝绿切换时最容易翻车的点,Session 若存在本地内存,切换后会大量失效。