【架构师系列】真正的灰度发布

究竟什么才是灰度发布其实并没有一个严格的标准,因为这个东西不是黑的也不是白的是个中间过渡地带,这类的东西定义都会比较麻烦。由于工作的原因看到好多友商所谓的灰度发布产品,有意思的是他们实现的是完全不一样的功能,对外都说自己是灰度发布。我看到的有三种:

1. 更新过程可以暂停,停在一个既有新版本又有旧版本的状态,然后选择升级或者回滚

2. 支持流量比例分配,可以把百分之几的流量分配给一个服务,剩下的给另一个服务

3. 支持 url 路径流量分配,一个路径下的流量给一个服务,另一个路径流量给另一个服务

那究竟哪个才能算是灰度发布呢?抛开具体的技术实现,让我们从需求的角度来考虑一下为什么要有灰度发布?灰度发布究竟是要做什么?从目的出发再来看技术实现就会清晰很多。

既然要灰度就是不希望所有人都看到,就是为了控制影响范围,之所以要做这种限制就说明发布的人心里对这个发布的版本就是不确定的,害怕影响范围太大风险不可控。也就是说这个风险因素在开发和测试环境都没有办法控制,只能在生产环境来观察,那究竟是怎样的因素会导致必须要上线观察而不是在开发测试环节来解决呢?主要有从运维和产品两大方面的考量因素。

图片发自简书App

从运维的角度讲,任何一次上线都是有风险的,或者有一些步骤的遗漏,流程的不规范,或者有一些隐藏的代码 bug都会导致线上的不稳定。控制风险的办法就是小批量上线,验证之后在全部更新。此外一些稳定性和性能的问题在开发测试环境很难复现,因此这一类的修复和功能只能到生产环境来验证,同样由于效果的未知也不可能全量更新。再有一些大的重构,比如编程语言的变化,框架的变化,基础库的更新,操作系统的更新都会有未知的影响,而这些影响也需要生产的检验。

从产品的角度讲,有一些产品设计,交互,界面展现形式都不是坐在办公室里拍桌子就可以定出最佳实践的。产品经理的视角和用户的视角是不同的,即使是产品经理之间的风格,偏好也是不一致的。小到按钮的顺序,弹框展示的位置,大到页面整体的布局,广告位的展示策略,究竟用哪种设计更好并没有理论上的最佳实践。而这种情况就需要大家分别作出自己的方案,去线上收集真实的用户数据作对比。也就是硅谷里常说的 A/B testing,也可以归到灰度发布的范畴。本质上就是基于数据驱动来作抉择,在用户的投票中选择哪种方案,而不是传统的看谁嗓门大会拍桌子,看谁官大来做决策。

了解了需求,我们就很容易推导出所有人都在说的灰度发布真正是什么了。

图片发自简书App


1. 精确的流量分发控制

这是一切的核心,从运维风险控制的角度,需要把受影响的流量控制在一个精确的范围内,在上线前就知道哪部分用户会有问题,而不是真出问题谁受到影响都不知道。一个常见场景是新版本只让公司内部的员工能访问到,再一个市,一个省的一点点推上去。从产品角度看要做 A/B test,就需要控制测试样本,哪些用户是 A 版本,哪些用户是 B 版本,在发布后应该就是固定的,而不是一个用户一会儿访问 A,一会儿访问 B。而传统的负载均衡器策略只能做到粗犷的比例分配,并没有细粒度的流量规则控制。而一个理想的灰度发布系统应该有很细粒度的流量规则,比如匹配 android 用户,匹配某个地区的用户,甚至能组合多种条件匹配到特定的人群。

2. 监控系统的支撑

流量精确分配只是第一步,接下来更重要的是获得多个版本的关键指标。对运维来说可能是看错误率,吞吐量,延迟,cpu 内存消耗这些系统层面指标。对于产品来说可能是要看点击率,pv,uv 等业务指标的变化。这些都需要能把数据收集并作展示,来方便后续决策:全量推还是回滚?使用方案 A 还是 B?不然的话灰度发布带来不了更多业务方面的促进,也不能帮你更好的了解业务的状态和用户行为。

3. 灵活的发布系统

从上面的介绍可以看出灰度发布并不是个短暂的过程,可能会持续很久。例如某个重大的框架或者系统更新可能会持续很久,有可能整个服务在几个月内都是新旧并存,甚至有可能需要两个版本分别各自迭代。而从产品的角度来看可能就会更灵活,很有可能线上有五六个方案都在收集数据,每天有了一些新想法都要上一些小版本看效果,每个版本上线后可能都要再各自做优化调整观察效果。这种情况可能线上就永远不会有一个统一的版本灰度反而是个常态来应对不断变化的需求和挑战。而发布系统也需要做相应的调整,不在把每个服务看成一个单一版本的运行体,只在更新的短时间内出现多版本共存,只允许全量推和回滚这种粗粒度策略。而是应该将多版本共存看成常态,允许每个版本各自迭代,版本之间又能区分对应的监控日志信息,这样灵活的发布系统才能配合灵活的灰度策略。

说了这么写灰度系统要做的事情其实就是流量控制和数据收集,来控制风险并帮助产品做决策。再看一下最开始提出的三个所谓的灰度发布:更新过程可以暂停,流量比例分配,url分流。它们充其量也只是做到了流量精确分配的某几个特殊情况,而且还都是不很精确的分配。而如果结合使用场景就会发现,这几种在实际中是很难用起来的,因为没有流量的精确控制很难控制风险范围,如果风险都不可控,那还要灰度发布干什么呢?更不要提后面的监控数据收集和灵活的发布了。

图片发自简书App

所以说一个真实好用的发布系统是十分复杂的,绝对不是页面上点两三下就可以完成的,而后面的实现更需要一整套体系来支撑。如果你想打造一个灰度发布系统,希望这篇文章能对你有所启发。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容