概述
灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。
-
可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。
-
降低产品升级所影响的用户范围
在前几篇的章节写了spring-cloud-gray的灰度框架介绍,但是为了做一下对比,我们对Discovery有进行了详细的调研,git地址:https://github.com/Nepxion/Discovery,
此框架对Spring Cloud & Spring Cloud Alibaba,Discovery服务注册发现、Ribbon负载均衡、Feign和 RestTemplate调用、Spring Cloud Gateway和Zuul过滤等组件进行了全方位增强的开源解决方案,更贴近企业级需求,更具有企业级的插件引入、开箱即用特征。
原理图
因为他是通过配置中心下发灰度配置,所以不需要额外引入控制台,只需要在应用的业务配置中增加灰度配置即可。
概念说明
蓝绿发布
蓝绿发布 Blue-Green Deployment
- 概念
- 不停机旧版本,部署新版本,通过用户标记将流量在新版本和老版本切换,属无损发布
- 优点
- 新版本升级和老版本回滚迅速。用户可以灵活控制流量走向
- 缺点
- 成本较高,需要部署两套环境(蓝/绿)。新版本出现问题,切换不及时,会造成部分故障
灰度发布
灰度发布 Gray Release(又名金丝雀发布 Canary Release)
- 概念
- 不停机旧版本,部署新版本,低比例流量(例如:5%)切换到新版本,高比例流量(例如:95%)走旧版本,通过监控观察无问题, 逐步扩大范围,最终把所有流量都迁移到新版本上,下线旧版本。属无损发布
- 优点
- 灵活简单,不需要用户标记驱动。安全性高,新版本如果出现问题,只会发生在低比例的流量上
- 缺点
- 流量配比递增的配置修改,带来额外的操作成本。用户覆盖狭窄,低比例流量未必能发现所有问题
滚动发布
- 概念
- 每次只升级一个或多个服务,升级完成监控观察,不断执行这个过程,直到集群中的全部旧版本升级到新版本。停止旧版本的过程 中,无法精确计算旧版本是否已经完成它正在执行的工作,需要靠业务自身去判断。属有损发布
- 优点
- 出现问题影响范围很小,只会发生在若干台正在滚动发布的服务上
- 缺点
- 发布和回滚需要较长的时间周期。按批次停止旧版本,启动新版本,由于旧版本不保留,一旦全部升级完毕后才发现问题,则无法快速回滚,必须重新降级部署
使用场景,图中文字描述很清楚
使用场景,图中文字描述很清楚
使用场景,图中文字描述很清楚
-
性能测试报告
- 准备两台机器部署Spring Cloud应用
- 准备一台机器部署网关(Spring Cloud或者Zuul)
- 准备一台机器部署压测工具
服务 配置 数目 Spring cloud gateway 16c 32G 1 Zuul 1.x 16c 32G 1 Service 4c 8G 2 - 优化方式
- Spring Cloud Gateway,不需要优化
- Zuul 1.x,优化如下:
zuul.host.max-per-route-connections=1000 zuul.host.max-total-connections=1000 zuul.semaphore.max-semaphores=5000
- 基于WRK极限压测,报告如下
压测报告可见对应用资源效果基本在0.3%到0.5%之间,可以忽略不计。
官方文档写的非常详细读者可以参考官方文档。