蓝绿部署:被吹成零上线事故神药的技术,藏着多少企业没算清的隐形成本

去年深秋跟一个做跨境独立站的技术负责人吃饭,他喝了半瓶啤酒才敢说,618大促前他们团队熬了三个通宵搭好的蓝绿部署流程,在切流量的瞬间因为绿环境的数据库连接池配置比蓝环境少了三分之二,直接被峰值流量打崩,两个小时丢了近两百万的GMV。

你敢信?

很多人对蓝绿部署的认知,还停留在云厂商销售嘴里的“零停机、秒级回滚、上线无感知”的完美叙事里,真自己上手踩过坑才知道,这东西哪里是什么银弹,分明是个需要精雕细琢的精密装置,差一点螺丝没拧紧,就要出大问题。

被神化的技术,真实的技术边界在哪

蓝绿部署根本不是云原生时代的新发明。早在上世纪90年代IBM给金融机构做大型机运维的时候,就已经在用两套对等的主机系统轮流承担生产流量的模式,算下来到现在快30年了。它的核心逻辑说穿了非常朴素:搭两套完全对等的生产环境,一套承载当前正在运行的老版本应用(也就是大家常说的“蓝环境”),另一套提前部署好准备上线的新版本(“绿环境”),等所有测试流程跑完,直接把用户流量从蓝环境切到绿环境,原本的蓝环境不着急下线,留着当回滚的备份通道。

它从设计之初就不是为了实现“零风险上线”,只是为了把上线的等待时间从传统停机发布的“小时级”,压缩到流量切换的“秒级”。

很多人对这套逻辑的误解,就出在“完全对等”这四个字上。

生产环境蓝绿部署流量切换架构示意图
生产环境蓝绿部署流量切换架构示意图

差别大了去了。

很多团队搭绿环境的时候,图省钱把服务器规格降两档,网络策略配得比蓝环境宽松,甚至连数据库权限都没对齐,就敢说自己搭好了蓝绿部署流程。之前接触过一个做在线职业教育的团队,花了近十万买了云厂商的蓝绿部署套件,秋季班开课前的新版本上线时才发现,绿环境的对象存储权限没配对,用户上传的课程课件全存到了测试桶里,光是回滚加修复就花了40分钟——那时候正赶上早高峰的进课流量,客服的咨询电话直接被打爆。

要明确的是,蓝绿部署和大家常听的滚动更新、金丝雀发布根本不是一回事。滚动更新是逐批替换旧版本的实例,新版本的流量是一点点涨上去的;金丝雀发布是先拿1%的小流量给新版本做“试错”,观察没有问题再逐步放大流量;而蓝绿部署是直接把全部流量从老环境切到新环境,中间没有任何灰度缓冲带,对环境一致性的要求,比另外两种发布模式高好几个量级。

当下的落地现状:一半是真实刚需,一半是盲目跟风

现在国内主流云厂商,基本都把蓝绿部署功能打包进了自家的DevOps工具链里,三年前还要靠团队手动搭两套环境、配流量路由的流程,现在在控制台点几下就能完成配置,整体使用成本比2021年的时候降了差不多70%。

但真要算下来,能把蓝绿部署用明白的企业,占比其实不到两成。

最大的问题永远是成本账算不明白。两套对等的生产环境,意味着服务器、数据库实例、公网带宽的直接成本就要翻一倍,对于很多年营收几千万的中小厂来说,光这部分开销就能占掉全年运维预算的三分之一。很多团队为了省钱,平时把绿环境缩到最小配置,快上线了才临时扩容,结果扩容的镜像跟蓝环境的版本对不上,切流量的时候直接出问题。

这两年整个产业链的变化也挺有意思。之前做可观测性工具的厂商,客户大多是为了排查线上bug找过来的,最近两年差不多三分之一的新客户,都是冲着蓝绿部署的场景来的——毕竟你要敢直接把全量流量切到绿环境,就必须保证绿环境的所有运行指标,从CPU使用率、接口响应时间到错误率,跟蓝环境是完全对齐的,不然切过去就是事故。这就逼着企业把全链路的日志、指标、追踪体系搭起来,不然连自己的环境是不是一致都不知道。

企业蓝绿部署上线前全链路指标校验面板示例
企业蓝绿部署上线前全链路指标校验面板示例

我见过最离谱的团队,给绿环境做的测试全是自己写的mock假接口,根本没连真实的生产数据库,上线切流量的时候才发现,新版本的SQL写法把数据库的慢查询占比拉到了80%,整个库直接锁死。

图啥呢?

之前参加运维圈的线下聚会,有个做MMO游戏的运维说,他们当初第一次用蓝绿部署切新版本的时候,因为绿环境的消息队列没配死信队列,切过去之后用户发的世界频道聊天消息丢了一半,最后花了三个小时把离线消息重新补发,玩家在论坛骂了整整一周。

说起来都是泪。

没人愿意摆到台面上说的风险账

没人愿意摆到台面上说的风险账
没人愿意摆到台面上说的风险账

大部分介绍蓝绿部署的教程,只会告诉你它怎么好,怎么能实现零停机,根本不会提藏在流程背后的风险。

第一个最容易踩的坑,就是数据一致性的问题。很多人以为蓝绿部署只管应用层的切换,数据库是两套环境共用的,根本不需要单独调整。但你想啊,新版本的应用上线前,往往要做数据库的结构变更——比如加个字段、改个表结构,这些变更一旦跑到生产库里,原来的蓝环境上跑的老版本应用,很可能因为读不了新的表结构直接报错。这时候你再想切回蓝环境回滚,会发现回滚通道早就断了,根本切不回去。

第二个坑是流量切换的“假安全”。很多人觉得在控制台上点一下“切流量”,整个切换过程就是秒级完成的,不会有什么问题。但实际上,DNS的缓存、CDN的节点同步、客户端的长连接保持,这些环节的同步时间根本不是秒级的。有时候控制台显示已经100%的流量都切到绿环境了,其实还有20%左右的用户的长连接还挂在老的蓝环境实例上,这时候如果着急把蓝环境的资源释放掉省钱,这部分用户直接就掉线了。

现在行业里其实已经攒出了一套不成文的治理规则:比如用蓝绿部署时,所有数据库结构变更必须遵守“向前兼容”原则,也就是老版本的应用必须能正常读、写变更后的数据库;比如流量切完之后,蓝环境至少要留72小时才能销毁,不能刚切完就把资源收了;比如切流量的时候别图快,哪怕花10分钟,从1%到10%到50%再到100%逐步放大,别直接从0拉到全量。

聊到未来的走向,其实不需要搞什么玄乎的概念。

第一,蓝绿部署不会被什么新的发布模式取代,反而会和Serverless架构深度结合。之前最大的成本痛点——两套环境常年跑着浪费钱,会被弹性算力解决:平时绿环境只留个最小的测试实例跑功能验证,到上线前10分钟再自动拉起和蓝环境配置完全对等的弹性实例,预热好缓存和连接,等切流量完成、过了观察期再自动缩容,能把之前翻倍的环境成本压到原来的20%都不到。

第二,未来3年这个赛道的核心竞争点,根本不是什么“一键自动化部署”,而是蓝绿环境的一致性自动校验能力。现在大家的校验流程还是靠人工对比配置、跑测试用例,漏检的概率非常高。等系统能自动对比两个环境的所有配置、依赖版本、网络策略、运行指标差异,不等人工测试就把不一致的地方揪出来,这套流程才算真的成熟——现在这块的工具成熟度还不到30%,缺口很大。

第三,别觉得蓝绿部署是互联网大厂的专属。等这套工具的使用成本随着云厂商的价格战降到一年几万块的时候,差不多10人以上规模的技术团队,基本都会把它当成上线的标配。毕竟谁也不想再像十年前那样,选个凌晨两点的时间偷偷上线,结果碰到个bug整个团队熬到天亮。

上次跟那个跨境电商的技术负责人再见面,他说他们现在已经不用全量切的蓝绿部署了,把切流量的速度放慢到了30分钟,绿环境的配置跟蓝环境完全对齐,上个月的大促上线,全程没出一点问题。

其实哪有什么完美的技术。

所有被吹成神药的方案,最后落地的时候,拼的都是谁少踩两个坑。

作者|fawen

排版|fawen

审核|柚子

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:蓝绿部署:被吹成零上线事故神药的技术,藏着多少企业没算清的隐形成本
文章链接:https://m.lfdjt.com/info_23_30992.html