不容闪失的灰度发布简介

简介: 不容闪失的灰度发布简介

1 线上项目灰度发布的重大意义


6cf443c14864475296e488315813fc27.png

上面这个软件相信大家一定不陌生,很多人和我一样一定还欠他钱!支付宝经历了十多年,从未停止更新过,app从最初简单设计到现在的扁平化设计,一直在更新,但奇怪的是它从未停过服务,而且越用越顺畅。不停服务就实现软件更新,这是怎么做到的呢?这个问题也是线上项目需要迫切解决的问题。除了支付宝,还有QQ、微信、抖音、头条等各大app,都是不停服务更新软件,他们用的都是什么黑科技呢?学习了灰度发布,也能让你的软件一样不停机优雅的更新。


2 项目发布问题剖析

项目发布的时候,普通程序员理解,大概是安装个Tomcat发布一下,域名解析一下保障项目能正常提供服务就可以了。但这种操作在真正打大型互联网公司中是一个都不值得拿出来说的基本过程,真正大型互联网公司发布一个稳定项目有很多因素考虑。


对于运维工程司而言,每次项目发布都是有风险,比如发布步骤遗漏、发布流程不规范、一些隐藏的BUG等都有可能导致线上的服务不稳定,如果项目对应库版本升级了,很有可能造成项目无法运行的后果。


对于产品经理而言, 在产品设计上他们都有各自不同的观点,都有各自的设计方案(A方案、B方案),如果每个方案都很优秀,该如何抉择?谁官大发布谁的?谁拍桌子拍的狠听谁的?都不是,应该由用户选择,针对不同用户进行试点使用,让部分特定用户使用A方案,部分用户使用B方案,其他用户仍然使用之前稳定的方案,最终哪套方案受欢迎就发布指定版本。


3 解决方案

3.1 蓝绿部署

5cb58c8433014b28bd414f2ec10a0ea7.png

所谓蓝绿部署,是指同时运行两个版本的应用,如上图所示,蓝绿部署的时候,并不停止掉老版本,而是直接部署一套新版本,等新版本运行起来后,再将流量切换到新版本上。但是蓝绿部署要求在升级过程中,同时运行两套程序,对硬件的要求就是日常所需的二倍,比如日常运行时,需要10台服务器支撑业务,那么使用蓝绿部署,你就需要购置二十台服务器。


3.2 滚动发布

372c0f52905c47238c79495fccc3c442.png

所谓滚动升级,就是在升级过程中,并不一下子启动所有新版本,是先启动一台新版本,再停止一台老版本,然后再启动一台新版本,再停止一台老版本,直到升级完成,这样的话,如果日常需要10台服务器,那么升级过程中也就只需要11台就行了。

但是滚动升级有一个问题,在开始滚动升级后,流量会直接流向已经启动起来的新版本,但是这个时候,新版本是不一定可用的,比如需要进一步的测试才能确认。那么在滚动升级期间,整个系统就处于非常不稳定的状态,如果发现了问题,也比较难以确定是新版本还是老版本造成的问题。为了解决这个问题,我们需要为滚动升级实现流量控制能力。


3.3 灰度发布

a16f95620b124c60bc1f9a3c36b59ce7.png

灰度发布也叫金丝雀发布,起源是,矿井工人发现,金丝雀对瓦斯气体很敏感,矿工会在下井之前,先放一只金丝雀到井中,如果金丝雀不叫了,就代表瓦斯浓度高。在灰度发布开始后,先启动一个新版本应用,但是并不直接将流量切过来,而是测试人员对新版本进行线上测试,启动的这个新版本应用,就是我们的金丝雀。如果没有问题,那么可以将少量的用户流量导入到新版本上,然后再对新版本做运行状态观察,收集各种运行时数据,如果此时对新旧版本做各种数据对比,就是所谓的A/B测试。


当确认新版本运行良好后,再逐步将更多的流量导入到新版本上,在此期间,还可以不断地调整新旧两个版本的运行的服务器副本数量,以使得新版本能够承受越来越大的流量压力。直到将100%的流量都切换到新版本上,最后关闭剩下的老版本服务,完成灰度发布。如果在灰度发布过程中(灰度期)发现了新版本有问题,就应该立即将流量切回老版本上,这样,就会将负面影响控制在最小范围内。


3.4 灰度发布方法

灰度发布用户群体通知的方法比较多,可以有这些方式:

产品Q群、产品微信群:向固定群体发送产品更新链接,指定群体能使用新版本。

内部用户:通知公司内部用户测试试用。

app自升级:可以根据时间段,用户版本,升级请求数量,实际升级。

灰度发布分类:

1)web页面灰度:按照ip或者用户id切流啊。具有随机性,可以控制比例。

2)服务端灰度:考验主系分能力了,可以做逻辑切换开关,按照义务相关属性逐渐切流。

3)客户端灰度:一般按照用户逐渐推送包,主要是PC端(WIN,MAC)、移动端(安卓,OS)内部大规模内测。

目录
相关文章
|
2月前
|
Kubernetes 监控 测试技术
k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
|
4月前
|
Kubernetes 监控 测试技术
在K8S中,如何实现上线发布流程(灰度发布)?
在K8S中,如何实现上线发布流程(灰度发布)?
|
4月前
|
Kubernetes 监控 Java
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
641 0
|
4月前
|
Kubernetes 监控 测试技术
运维.云技术学习.基于应用服务网格的灰度发布(上:理论基础篇)
运维.云技术学习.基于应用服务网格的灰度发布(上:理论基础篇)
84 0
|
7月前
|
测试技术 Nacos 开发工具
灰度发布:揭秘背后的原理与实践浅见
揭秘灰度发布背后的原理与实践浅见
419 2
|
JSON 监控 安全
分享一例有意思的灰度设计缺陷,浅谈灰度方案的设计
灰度很重要,灰度的策略也需要结合实际情况进行灵活的调整,本文跟大家分享了一个前些时间发现的灰度设计bug。
|
缓存 Kubernetes 负载均衡
K8s有损发布问题探究
应用发布过程往往出现流量有损,本次文章内容通过提出问题、问题分析和解决方案,EDAS在面对上述问题时,提供了无侵入式的解决方案,无需更改程序代码或参数配置,在EDAS控制台即可实现应用无损上下线。
1073 11
K8s有损发布问题探究
|
Dubbo 安全 Java
聚焦稳定性,Dubbo 发版规划公布
Apache Dubbo 是一款微服务框架,为大规模微服务实践提供高性能 RPC 通信、流量治理、可观测性等解决方案, 涵盖 Java、Golang 等多种语言 SDK 实现。
聚焦稳定性,Dubbo 发版规划公布
|
缓存 Kubernetes 容灾
应用发布新版本如何保障业务流量无损(一)| 学习笔记
快速学习应用发布新版本如何保障业务流量无损
应用发布新版本如何保障业务流量无损(一)| 学习笔记
|
开发框架 运维 Kubernetes
应用发布新版本如何保障业务流量无损(二)| 学习笔记
快速学习应用发布新版本如何保障业务流量无损
应用发布新版本如何保障业务流量无损(二)| 学习笔记