灰度发布
作者:互联网
灰度发布
- 新版本上线时,无论是出于产品稳定性还是用户接受程度等方面因素的考虑,直接以新代旧都充满风险;
- 于是,通行做法是新老版本同时在线,且一开始仅分出较小比例的流量至新版本,待确认新版本没问题后再逐级加大流量切换;
灰度发布常见场景
- 灰度发布是迭代的软件产品在生产环境安全上线的一种重要手段,对于Envoy来说,灰度发布仅是流量治理的一种典型应用;以下是几种常见的场景
-
金丝雀发布
-
蓝绿发布
-
A/B测试
-
流量镜像
-
Canary Deployment
- 金丝雀部署通过在生产环境运行的服务中引一部分实际流量对一个新版本进行测试,测试新版本的性能和表现,然后从这部分的新版本中快速获取用户反馈
- 特点:通过在线上运行的服务中,新加入少量的新版本的服务,然后从这少量的新版本中快速获得反馈,根据反馈决定最后的交付形态
Blue-Green Deployment
- 蓝绿发布提供了一种零宕机的部署方式,不停用老版本的同时部署新版本进行测试,确认没问题后将流量切到新版本
- 特点:
- 在保留旧版本的同时部署新版本,将两个版本同时在线,新版本和旧版本互相热备
- 通过切换路由权重 (weight) 的方式(非 0 即 100)实现应用的不同版本上线或者下线,如果有问题可以快速地回滚到老版本
A/B Testing
- A/B testing (often referred to as split testing or bucket testing) is a means of comparing two options and analyzing results.
- 从本质上讲,AB测试是一种实验,通过向用户随机显示页面的两个或多个变体,并使用统计分析来确定哪种变体对于给定的转化目标效果更好;
- A/B测试可用于测试各种营销元素,例如设计/视觉元素、导航、表单和宣传用语等;
- A/B测试可以用于测试、比较和分析几乎所有内容
- 最常用于网站以及移动应用程序:将Web或App界面或流程的两个或多个版本,在同一时间维度,分别让两个或多个属性或组成成分相同(相似)的访客群组访问,收集各群组的用户体验数据和业务数据,最后分析评估出最好版本以正式采用
- 主要用于转换率优化,一般在线业务会定期通过A/B测试来优化其目标网页并提高ROI
- A/B测试需要同时在线上部署A和B两个对等版本同时接收用户流量
- 按一定的目标选择策略将一部分用户导向A版本,让另一部分用户使用B版本;
- 分别收集两部分用户的反馈,并根据分析结果确定最终使用的版本;
- A/B测试中分流的设计直接决定了测试结果是否有效
- AB测试是对线上生产环境的测试,在对改进版本所产生效果的好坏不能十分确定时对测试版本的导入流量通常不宜过大,尤其对于那些影响范围较大的改版(如主流程页面的重大调整),影响用户决策的新产品上线和其他具有风险性的功能上线通常采用先从小流量测试开始,然后逐步放大测试流量的方法
- 但是,测试版本的流量如果太小又可能造成随机结果的引入,试验结果失去统计意义
灰度策略
灰度策略说明
- 需要在生产环境发布一个新的待上线版本时,需要事先添加一个灰度版本,而后将原有的生产环境的默认版本的流量引流一部分至此灰度版本,配置的引流机制即为灰度策略;
- 经过评估稳定后,即可配置此灰度版本接管所有流量,并下线老版本;
- 常用的策略类型大体可分为“基于请求内容发布”和“基于流量比例发布”两种类型;
基于请求内容发布
- 基于请求内容发布:配置相应的请求内容规则,满足相应规则服务流量会路由到灰度版本;例如对 于http请求,通过匹配特定的Cookie标头值完成引流
- Cookie内容:
- 完全匹配:当且仅当表达式完全符合此情况时,流量才会走到这个版本;
- 正则匹配:此处需要您使用正则表达式来匹配相应的规则;
- 自定义Header:
- 完全匹配:当且仅当表达式完全符合此情况时,流量才会走到这个版本;
- 正则匹配:此处需要您使用正则表达式来匹配相应的规则;
- 可以自定义请求头的key和value,value支持完全匹配和正则匹配;
- Cookie内容:
基于流量比例发布
- 基于流量比例发布:对灰度版本配置期望的流量权重,将服务流量以指定权重比例引流到灰度版本;例如10%的流量分配为新版本,90%的流量保持在老版本;
- 所有版本的权重之和为100;
- 这种灰度策略也可以称为AB测试;
灰度发布的实施方式
基于负载均衡器进行灰度发布
-
在服务入口的支持流量策略的负载均衡器上配置流量分布机制
-
仅支持对入口服务进行灰度,无法支撑后端服务需求
基于Kubernetes进行灰度发布
-
根据新旧版本应用所在的Pod数量比例进行流量分配
-
不断滚动更新旧版本Pod到新版本
-
先增后减、先减后增、又增又减;
-
-
服务入口通常是Service或Ingress;
基于服务网格进行灰度发布
-
对于Envoy或Istio来说,灰度发布仅是流量治理机制的一种典型应用
-
通过控制平面,将流量配置策略分发至对目标服务的请求发起方的envoy sidecar上即可
-
支持基于请求内容的流量分配机制,例如浏览器类型、cookie等;
-
服务访问入口通常是一个单独部署的Envoy Gateway;
灰度发布的实施过程
构建承载实例
-
滚动更新,分批进行:
-
先下线部分实例,更新后上线;
-
先更新上线部分实例,后下线对应比例的老版本实例并进行版本更新;
-
-
蓝绿部署:
-
额外准备全量的新版本实例;
-
-
A/B测试:
-
滚动更新机制或蓝绿部署机制的特殊应用;
-
配置流量策略
-
配合实例更新机制调整流量策略
-
下线并排空旧版本实例的流量;
-
上线并分配流量到新版本实例;
-
慢启动;
-
-
标签:上线,版本,流量,发布,灰度,测试 来源: https://www.cnblogs.com/wangguishe/p/16645722.html