如何进行灰度发布,考虑啥

灰度发布的定义:

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,而我们平常所说的金丝雀部署也就是灰度发布的一种方式。

灰度发布结构图如下:


灰度发布/金丝雀发布由以下几个步骤组成:

准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件。

从负载均衡列表中移除掉“金丝雀”服务器。

升级“金丝雀”应用(排掉原有流量并进行部署)。

对应用进行自动化测试。

将“金丝雀”服务器重新添加到负载均衡列表中(连通性和健康检查)。

如果“金丝雀”在线使用测试成功,升级剩余的其他服务器。(否则就回滚)

除此之外灰度发布还可以设置路由权重,动态调整不同的权重来进行新老版本的验证。


灰度发布涉及到的专有名词解释:

灰度期:灰度发布开始到结束期间的这一段时间,称为灰度期。

灰度发布引擎:对于一般的小系统并不需要单独的灰度发布引擎,可以参考A/B测试中做法,在页面javascript或服务器端实现分流的规则即可。但对于大型的互联网应用而言,单独的用于管理用户分流的发布引擎就很有必要了。

用户标识:用于区分用户,辅助数据统计,保证灰度发布过程中用户体验的连贯性(避免用户在新旧版本中跳变,匿名Web应用比较容易有这个问题)。匿名Web应用可采用IP、Cookie等,需登录的应用可直接采用应用的帐号体系。

目标用户选取策略:即选取哪些用户先行体验新版本,是强制升级还是让用户自主选择等。强制升级可考虑的因素很多,包括但不限于地理位置、用户终端特性、用户自身特点等。用户自主选择,让用户自主选择采用stable、beta、unstable channel的版本。在用户有明确预期的情况下自行承担试用风险。

数据反馈:用户数据反馈:在得到用户允许的前提下,收集用户的使用新版本应用的情况。如客户端性能、客户端稳定性、使用次数、使用频率等。用于与旧版本进行对比,决策后续是继续扩大新版本投放范围还是回滚。服务端数据反馈:新版本服务端性能、服务端稳定性等,作用与用户数据反馈类似。

新版本公关运营支持:对于改版级别的大型升级,需要配合公关运营支持,用于及时处理用户在微博、博客等渠道给出的“显式反馈”。对比通过隐式数据反馈得到的结论后,综合考虑应对策略。


实现灰度发布的两种技术方式:

一、在代码中做。一套线上环境,代码中做开关,对于不同的用户走不同的逻辑

二、在接入层做。多套(隔离的)线上环境,接入层针对不同用户转发到不同的环境中

接入层采用nginx,可以基于IP或cookie的方式进行分流,由于我们是商业ERP系统,有用户登录的逻辑,自然选择基于cookie的策略。

就基于cookie的分流策略而言,又有两种实现方案

nginx维护Cookie名单文件,每来一个请求看Cookie是否在名单中,做不同的转发

nginx不维护Cookie名单文件,根据Cookie的特征进行转发

第一种方案的缺点显而易见,每次请求判断是否是灰度用户时间复杂度为O(N);且变更名单,需要操作接入层服务。第二种方案具体的实现策略:

1 业务中维护白名单文件(存放在数据库中)

2 在登陆时,如果用户在名单中则给用set特定标识的Cookie;退出或Session过期后Cookie失效

3 nginx匹配特定Cookie,做转发

这样,调整灰度的范围,只需要操作数据库即可,无需重启服务。


灰度发布的企业实际案例:

淘宝网灰度发布(转载):

从产品经理的角度来看:淘宝的发布流程一般是这样的,首先产品经理说服老板、老板的老板、开发Leader、开发成员、测试、设计师、BI等等我们要做的这个产品是牛逼而且有价值的。然后确认改版的设计并完成开发。开发后的版本会在内部工程用的服务器上(需要指向特定 URL)可以看到,然后是时间1周~2个月的测试,测试完成验收达到设计目标和发布标准后,会进行内部发布。内部发布后的版本,阿里巴巴内网上淘宝看到的就都是新版本了,这叫做“小淘宝”发布。这个阶段可能持续1天~1个月,内部员工会看到新的页面并吐槽或发现bug并提交修改。

然后根据产品的不同,会有一个逐步上线切换的过程,比如先切5%全网流量,这个时候可以收集到真实的用户数据了,这个阶段性相当于AB test,通过AB我们知道产品的表现是否达到了设计时吹的牛逼。如果牛逼能够圆上,并且没有出bug,那么就会逐步加码流量直到50%-100%。淘宝有非常完善的工具链可以让产品经理实时地看到不同版本bucket下的PV UV 引导成交等指标性数据。

不同产品的AB控制是不同的,有的是在web服务器层,有的是接口层,算法产品则更有非常完善自动化的工具链,可以做到新的算法开发通过验收后瞬间发布并进行灰度。灰度数值填写后瞬间生效瞬间看到数据。一天多的情况下可以进行多达10轮AB test并且支持超过10个算法同时跑在线上赛马看哪个稍微不傻逼一点。

总结下来,发布流程是这样的:

产品需求收集和确定-->技术方案出具和分工协调-->开发编码-->内部服务器环境的测试+联调(又名预发布环境)-->小淘宝环境发布,内部员工喷喷喷-->小流量(具体有多小取决于业务影响面)公网测试-->收集数据写反馈-->全量上线。

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。 目前有...
    小程故事多阅读 70,865评论 5 131
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,858评论 25 707
  • 我以为自己一生走遍很多地方,结交了不少朋友,所以以后到每一个地方,都会收到有朋自远方来不亦乐乎的欢迎。 但是,今天...
    154d736abd3e阅读 194评论 1 0
  • 每天随手拍,留住瞬间的美好~加倍美好!我们来啦! 本周主持——边走边忘本周主题——【窗外】 1、水若——路边的美~...
    水若_小水呓梦阅读 251评论 0 4