灰度发布、蓝绿部署、金丝雀都是啥?( 二 )



金丝雀发布的特点:
通过在线上运行的服务中,新加入少量的新版本的服务,然后从这少量的新版本中快速获得反馈,根据反馈决定最后的交付形态 。
下图为华为云的金丝雀发布界面:

灰度发布、蓝绿部署、金丝雀都是啥?

文章插图
 

灰度发布、蓝绿部署、金丝雀都是啥?

文章插图
 
步骤一:将流量从待部署节点移出,更新该节点服务到待发布状态,将该节点称为金丝雀节点;
步骤二:根据不同策略,将流量引入金丝雀节点 。策略可以根据情况指定,比如随机样本策略(随机引入)、狗粮策略(就是内部用户或员工先尝鲜)、分区策略(不同区域用户使用不同版本)、用户特征策略(这种比较复杂,需要根据用户个人资料和特征进行分流,类似于千人千面);
步骤三:金丝雀节点验证通过后,选取更多的节点称为金丝雀节点,重复步骤一和步骤二,直到所有节点全部更新
金丝雀部署和蓝绿有点像,但是它更加规避风险 。你可以阶段性的进行,而不用一次性从蓝色版本切换到绿色版本 。
采用金丝雀部署,你可以在生产环境的基础设施中小范围的部署新的应用代码 。一旦应用签署发布,只有少数用户被路由到它 。最大限度的降低影响 。如果没有错误发生,新版本可以逐渐推广到整个基础设施 。下图示范了金丝雀部署:
灰度发布、蓝绿部署、金丝雀都是啥?

文章插图
 
金丝雀和蓝绿的对比名称 特点 优势 劣势 蓝绿部署 同时存在两个集群,两个集群中只有一个集群真正提供服务,另外一个集群测试、验证或待命 服务文档,版本回退简单,适用于各种场景的升级,大版本不兼容升级的或迭代兼容升级 浪费硬件资源,需要同时有两个集群,如果集群比较大,比如有1000个节点,这种方式几乎不可用 金丝雀部署 逐点部署,逐步替换线上服务 小步快跑,快速迭代 只能适用于兼容迭代的方式,如果是大版本不兼容的场景,就没办法使用这种方式了
灰度发布灰度发布是迭代的软件产品在生产环境安全上线的一种重要手段 。
灰度发布,也叫金丝雀发布 。是指在黑与白之间,能够平滑过渡的一种发布方式 。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来 。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,而我们平常所说的金丝雀部署也就是灰度发布的一种方式 。
灰度发布、蓝绿部署、金丝雀都是啥?

文章插图
 
A/B TestA/B测试和蓝绿发布、滚动发布以及金丝雀发布,完全是两回事 。
蓝绿发布、滚动发布和金丝雀是发布策略,目标是确保新上线的系统稳定,关注的是新系统的BUG、隐患 。
A/B测试是效果测试,同一时间有多个版本的服务对外服务,这些服务都是经过足够测试,达到了上线标准的服务,有差异但是没有新旧之分(它们上线时可能采用了蓝绿部署的方式) 。
A/B测试关注的是不同版本的服务的实际效果,譬如说转化率、订单情况等 。
A/B测试时,线上同时运行多个版本的服务,这些服务通常会有一些体验上的差异,譬如说页面样式、颜色、操作流程不同 。相关人员通过分析各个版本服务的实际效果,选出效果最好的版本 。
灰度发布、蓝绿部署、金丝雀都是啥?

文章插图
 
实现kubernetes官方的金丝雀发布方式
https://kubernetes.io/zh/docs/concepts/cluster-administration/manage-deployment/#canary-deployments
Deployment滚动更新策略实现金丝雀发布
利用Deployment的滚动更新策略maxSurge和maxUnavailable设置最大可超期望的节点数和最大不可用节点数可实现简单的金丝雀发布 。
rollingUpdate.maxSurge最大可超期望的节点数,百分比 10% 或者绝对数值 5
rollingUpdate.maxUnavailable最大不可用节点数,百分比或者绝对数值
apiVersion: extensions/v1beta1kind: Deploymentmetadata:name: demo-deploymentnamespace: defaultspec:replicas: 10selector:matchLabels:name: hello-deploymentstrategy:type: RollingUpdaterollingUpdate:maxSurge: 10%maxUnavailable: 0template:metadata:labels:name: demo-deploymentspec:containers:- name: webserverimage: Nginx:1.14ports:- containerPort:80


推荐阅读