也说说蓝绿、金丝雀和ABTesting | idouba

也说说蓝绿、金丝雀和ABTesting

前言

关于灰度发布描述网上说法非常多,蓝绿、金丝雀、ABTesting分别是啥,怎么搞的都有各自的说法,有些不太一致。笔者基于自己的实践中描述下。本来也就是一种工程上的实践的风格,也不是什么非常严格理论定义,所以要区分的非常清楚也没有必要。其实只要搞清楚发明这几种实践是干什么用的,侧重点分别是什么即可。

蓝绿

蓝绿发布的主要思路是在新版本在另外一套独立的资源上上线,新版本起来后将所有的流量从老版本切到新版本上来。当新版本工作正常,则删除老版本;当新版本工作有问题,则快速能切回到老版本。因此蓝绿发布看上是一种热部署的方式,目的是减少发布过程中的服务停止时间。

可以看到因为两个版本都是可用,其升级切换和回退速度非常快。为了达到这种快速切换复出的代价是要搞冗余的资源,即2倍的原有资源,分别部署新老版本。此外一个问题是全量的切流量,如果新版本有问题,则所有的用户将受到影响。

         

因为蓝绿是基于原有的蛮力发布现将老版本全部停掉,在原机器上安装新版本这种导致用户访问全部中断要改善很多。

一般步骤是:

 部署版本V1,所有请求的流量都到V1上;

 部署版本V2在另外一组资源上;

 所有流量从V1切换到V2。

 如果V2测试正常,就删除V1,并释放V1的资源。如果V2有问题,可以快速切回版本V1.

ABTesting

场景比较明确,就是同时线上两个版本接收流量,比较那个版本更被访问者接收。

当一个版本A在线上被使用,上一个新的灰度版本B,选择一部分试验客户,通过评价用户访问来验证不同版本在可用性、受欢迎程度、等实际表现上。类似于互联网公司同一个产品交给两个AB团队做(腾讯据传微信就是这么干的),最后评价留下一个干掉一个。一般有了一定用户的产品,上一个特性到线上,一般都是非常谨慎,一般都要经过一轮A/B testing。

所以ABTesting里面比较重要的环境是Test前的设计和Test后的评估。即要规划好怎么开始测试,是随机的分一部分流量到灰度版本B上,还是把特定的访问者,如来自某个区域的,某种特征的用户导流到灰度版本上。尤其是后者的决策过程可能是一个非常复杂或者业务特点非常强的过程,怎么能对的毙掉一个版本,留下另外一个版本,所以一般灰度发布都有一个平台在支撑,出来流程上的支撑外,收集数据来支持决策是非常重要的一方面。

如这个经典的图上,通过评价转换率来对AB版本机械能评价。

金丝雀发布

金丝雀发布的特点是系统上原有版本已经可用,有流量在使用。不是一个新的版本导入一部分线上流量过来策略新版本在生产环境的实际表现。以期望在生产环境上尽早发现问题。

类似于这个图上,导入少量流量到这个灰度版本上,像把一个金丝雀塞到瓦斯井里面一样,探测这个新版本是否可用。

所以从形态上看ABTest和金丝雀基本上没有差别,都是两个版本同时在线,引部分流量到一个灰度版本上。但ABTest更侧重于有目的的比较AB两个版本的差异,并进行决策。

灰度发布/金丝雀部署适用的场景:

总结

金丝雀/灰度发布是一种形态,强调两个版本同时存在;对应的是蓝绿发布只有一个版本有流量,另一个没有流量。ABTest强调的是评估两个版本的被访问情况,评估版本的受欢迎程度,然后决策保留哪一个。可以认为ABTest其实是灰度发布中的一种应用场景,可以认为灰度发布描述的更广些,像金丝雀就是上线一个新版本使用实际流程测bug,稳定性、实际环境测匹配度等,类似gamma的测试。就像用金丝雀去一样,把一个新版本拿到实际环境去验证下,然后看是否能满足要求。

附录

最经典的一批描述,大家(包括本文)的图都是引用该文章中。

http://blog.christianposta.com/deploy/blue-green-deployments-a-b-testing-and-canary-releases/

微软这个非互联网公司在10年前提出的互联网思维的ABtesting

https://blogs.msdn.microsoft.com/seliot/2009/12/25/dont-just-listen-to-your-userswatch-them-with-online-experiments/

MartinFowler大神也描述了蓝绿部署,与微服务思路的延伸吗?

https://martinfowler.com/bliki/BlueGreenDeployment.html

infoq上这篇讲金丝雀的讲金丝雀的非常短,但是大家说金丝雀的时候都喜欢把他里面的几个步骤贴出来,但貌似都没有将的很明白。

http://www.infoq.com/cn/news/2013/03/canary-release-improve-quality

https://www.infoq.com/news/2013/03/canary-release-improve-quality

最后

一个广告,使用istio简单配置就可以做kubernetes的灰度发布,参照 https://istio.io/blog/2017/0.1-canary.html如果使用最新的istio的v1alpha3配置流量策略实现灰度发布,参照笔者最近这篇:http://www.idouba.net/istio-traffic-management-v1alpha3-by-example/ ,描述了对isito流量规则的的使用的case就是一个回答发布例子,可以理解为是怎使用istio做灰度发布。

 

原创文章。为了维护文章的版本一致、最新、可追溯,转载请注明: 转载自idouba

本文链接地址: 也说说蓝绿、金丝雀和ABTesting


,

One Response to 也说说蓝绿、金丝雀和ABTesting

发表评论