2023-06-27 14:51:17 35阅读
why:为什么要进行灰度发布?
ans: 互联网服务变动频繁,需要实现新老版本的平滑过度,减小新版本可能引入的bug对系统带来的负影响;并降低对测试的依赖,实现对部分用户、逻辑的局部测试,以便业务决策与技术回滚。
how: 如何进行灰度发布?
ans:将新版本发布到集群中少数实例上,并路由小部分流量到该小集群中,经过较长时间观察,确定无服务崩溃、监控告警以及客户投诉的情况下,滚动发布扩大灰度范围,最终将所有用户流量切换到新版本。
what:一个灰度系统是由哪些部分组成的?
ans:从功能上看,各灰度系统都要包含:灰度策略设置、流量打标、流量路由3种能力。
本文关注在不同需求场景下,灰度系统具体落地的技术设计。
1.灰度系统基本组成:
从系统结构上看,一个典型的灰度系统需要实现:1.可以供业务/开发人员进行配置的灰度策略设置模块;2. 并把配置后的策略下发到loadbalance、gateway以及rpc通信的服务注册中心;3. 打标后的流量下发到各流量转发中间件,按照既定策略进行层层转发;4. 对应新/老系统数据统一回收到监控系统进行灰度效果比对;
2.灰度配置策略:
配置策略属性:
配置下发策略:
配置策略逻辑可以实现在:
3.各种服务架构下的流量打标与分发
首先是网络上公开的单体服务灰度案例,基本围绕接入层负载均衡组件进行配置和处理,常见的方案有:
总结网络上公开的tencent cloud北极星灰度系统,阿里MSE灰度,有赞灰度系统,以及weibo路由标签系统,可以总结出:要实现微服务灰度,需结合具体的微服务框架实现,方案比对表如下:
公司名 |
系统名 |
适用服务架构 |
灰度方案 |
支持灰度策略 |
灰度核心组件 |
应用场景 |
阿里云 |
ALB灰度 |
单体服务 |
nginx+lua分流 |
7层协议http header/cookie/服务器组 |
ALB负载均衡 |
仅在服务入口处进行流量分发的场景 |
阿里云 |
基于ASM灰度 |
k8s为基础设施 |
kubectl使用RollingUpdate策略 |
ASM网关标签 |
Iostio+yaml文件 |
基于阿里云k8s部署的微服务集群 |
阿里云 |
基于MSE灰度 |
应用层微服务架构(可选dubbo/spring cloud) |
路由标识 |
自定义流量标识tag |
服务发现组件 |
使用应用层微服务架构的集群 |
Ucloud |
serviceMesh灰度系统 |
基于serviceMesh的微服务 |
Istio+Envoy边车 |
账号、http、grpc协议 |
服务发现组件 |
使用serviceMesh运维的微服务集群 |
|
alchemy |
单体服务 |
nginx+lua+redis |
7层协议header/cookie/params |
7层负载均衡 |
仅在服务入口处进行流量分发的场景 |
如何设计可靠的灰度方案
深入剖析全链路灰度内幕
使用ALB实现灰度发布
基于ASM实现全链路灰度发布
微服务引擎MSE
灰度发布GrayRelease/Dark launch详解
2023-06-27 14:51:17 35阅读
why:为什么要进行灰度发布?
ans: 互联网服务变动频繁,需要实现新老版本的平滑过度,减小新版本可能引入的bug对系统带来的负影响;并降低对测试的依赖,实现对部分用户、逻辑的局部测试,以便业务决策与技术回滚。
how: 如何进行灰度发布?
ans:将新版本发布到集群中少数实例上,并路由小部分流量到该小集群中,经过较长时间观察,确定无服务崩溃、监控告警以及客户投诉的情况下,滚动发布扩大灰度范围,最终将所有用户流量切换到新版本。
what:一个灰度系统是由哪些部分组成的?
ans:从功能上看,各灰度系统都要包含:灰度策略设置、流量打标、流量路由3种能力。
本文关注在不同需求场景下,灰度系统具体落地的技术设计。
1.灰度系统基本组成:
从系统结构上看,一个典型的灰度系统需要实现:1.可以供业务/开发人员进行配置的灰度策略设置模块;2. 并把配置后的策略下发到loadbalance、gateway以及rpc通信的服务注册中心;3. 打标后的流量下发到各流量转发中间件,按照既定策略进行层层转发;4. 对应新/老系统数据统一回收到监控系统进行灰度效果比对;
2.灰度配置策略:
配置策略属性:
配置下发策略:
配置策略逻辑可以实现在:
3.各种服务架构下的流量打标与分发
首先是网络上公开的单体服务灰度案例,基本围绕接入层负载均衡组件进行配置和处理,常见的方案有:
总结网络上公开的tencent cloud北极星灰度系统,阿里MSE灰度,有赞灰度系统,以及weibo路由标签系统,可以总结出:要实现微服务灰度,需结合具体的微服务框架实现,方案比对表如下:
公司名 |
系统名 |
适用服务架构 |
灰度方案 |
支持灰度策略 |
灰度核心组件 |
应用场景 |
阿里云 |
ALB灰度 |
单体服务 |
nginx+lua分流 |
7层协议http header/cookie/服务器组 |
ALB负载均衡 |
仅在服务入口处进行流量分发的场景 |
阿里云 |
基于ASM灰度 |
k8s为基础设施 |
kubectl使用RollingUpdate策略 |
ASM网关标签 |
Iostio+yaml文件 |
基于阿里云k8s部署的微服务集群 |
阿里云 |
基于MSE灰度 |
应用层微服务架构(可选dubbo/spring cloud) |
路由标识 |
自定义流量标识tag |
服务发现组件 |
使用应用层微服务架构的集群 |
Ucloud |
serviceMesh灰度系统 |
基于serviceMesh的微服务 |
Istio+Envoy边车 |
账号、http、grpc协议 |
服务发现组件 |
使用serviceMesh运维的微服务集群 |
|
alchemy |
单体服务 |
nginx+lua+redis |
7层协议header/cookie/params |
7层负载均衡 |
仅在服务入口处进行流量分发的场景 |
如何设计可靠的灰度方案
深入剖析全链路灰度内幕
使用ALB实现灰度发布
基于ASM实现全链路灰度发布
微服务引擎MSE
灰度发布GrayRelease/Dark launch详解