干货 | 云原生时代的灰度发布有几种“姿势”?

news2025/1/20 10:45:34

随着企业数字化转型进程不断发展,云原生时代的来临,企业应用越来越多,不得不面对应用程序升级的巨大挑战。传统的停机发布方式,新旧版本应用切换少则停机30分钟,多则停机10小时以上,愈发无法满足业务端的需求。

“业务无感知”的发布策略成为应用运维团队的不二选择,尽可能降低发布对业务的影响。“业务无感知”的发布策略有滚动发布、蓝绿发布、灰度发布

本文将从什么是灰度发布,发布类型,灰度发布自动化实践三个维度来展开。

01

灰度发布的概念

灰度发布,又名金丝雀发布,即在产品发布时,先让一小部分用户体验产品新版本的特性,这一小部分用户的用户范围可以是内部用户、测试用户和非核心用户,但主要用户还是继续使用产品旧版本。

新版本发布完成之后,验证业务及用户反馈是否正常,一切正常之后再逐步扩大新版本覆盖范围:20%、50%、70%,每发布一次就进行业务验证、观察用户反馈。最后用新版本覆盖所有用户,完成一次灰度发布。

灰度发布的最大优势是将新版本使用范围控制在小范围内,如果新版本出现问题,能够极大降低问题影响范围,避免影响所有用户,造成严重的生产故障,引发大范围的投诉,从而影响到公司业务和品牌。

02

发布类型

滚动发布

滚动发布,是指一个应用有多个主机副本,将其分成多个批次。首先升级第一个批次,之后依次升级其他批次,直到所有批次升级完成。每个批次升级前,需要在LB中移除对应主机的流量转发,升级完成后,再恢复对应主机的流量转发。

将应用分成多个批次,升级前后的LB操作工作量比较大,对应用运维人员来说操作麻烦,手工操作出错的概率较大,嘉为蓝鲸应用发布中心,通过自动化流程实现应用的滚动发布。

同时,嘉为蓝鲸应用发布中心支持随机分批和自定义分批两种方式的滚动发布。选择分批方式后,在批次内可以选择串行和并行的执行方式

蓝绿发布

蓝绿发布,是指应用分为两个版本,发布时将旧版本所有流量直接切换到新版本上。新版本部署时,按照旧版本的规格完全独立部署一套,部署完成之后,进行简单测试验证,正常之后将旧版本的流量直接导到新版本上。

灰度发布

灰度发布,是指应用分为两个版本,发布时将旧版本的流量,分阶段10%、30%、80%、100%切换到新版本上。每阶段切换后,任务需要暂停,应用运维人员可以检查程序是否正常,监控日志是否正常,同步业务方检查业务指标是否正常。确认一切正常之后,执行下一部分发布动作。

03

灰度发布自动化实践

场景一:基于F5设备进行蓝绿发布的场景

用户通过F5设备控制业务流量,将业务流量转发到后端真实应用服务上。为了保证升级时用户能够正常访问,需要进行蓝绿发布。

在进行蓝绿发布时,分成三个发布步骤:

  • 先部署新版本应用,此时新版本应用没有业务流量;

  • 然后执行F5命令进行流量切换,用户访问流量切到新版本应用服务上;

  • 最后进行业务逻辑验证,查看业务流量确认业务正常,则蓝绿发布完成, 如果业务异常,快速执行回滚任务,进行流量回切。

通过标准运维自动化执行切换F5流量的命名,如下:

开启 F5 member:

curl -sk -u user:pwd -H "Content-Type: application/json" -X PUT -d '{"enabled":true}' https://${F5_IP}/mgmt/tm/gtm/pool/a/~Common~pool_api_test/members/~Common~server_${F5_IP}:~Common~vs_api_test_1?ver={app_host_ip}

关闭 F5 member:

curl -sk -u user:pwd -H "Content-Type: application/json" -X PUT -d '{"disabled":true}' https://{F5_IP}/mgmt/tm/gtm/pool/a/~Common~pool_api_test/members/~Common~server_{F5_IP}:~Common~vs_api_test_1?ver={app_host_ip}

备注:{F5_IP}:为F5设备IP,{app_host_ip}:为F5后端的服务主机IP

关键参数通过变量传入,该标准运维流程可以被多个业务系统复用,无需每个业务系统单独编排。

场景二:基于Nginx进行灰度发布的场

用户通过Nginx代理或者负载均衡设备来控制业务流量的转发,为了提高应用升级的稳定性,升级后先让部分用户体验新版本,通过标准运维脚本命令切换Nginx中流量转发策略,将小部分随机用户流量转发到新版本服务上。

确认新版本功能正常后,逐步扩大新版本覆盖的用户范围。避免在蓝绿发布中,新版本异常会影响到所有用户访问的问题。

大部分用户访问业务正常,验证了新版本的稳定性,再让新版本覆盖所有用户,完成基于Nginx的灰度发布。

具体标准运维任务参考:

场景三:容器应用灰度发布的场景

容器应用在升级时,为了保证业务无感知,应用运维人员也需要考虑灰度发布方案,将一次完成的发布流程,拆分成多个发布流程,降低每一次应用发布的影响范围。

容器发布场景,应用一般通过ingress-nginx或者istio控制流量分发,每次发布更新ingress中的权重参数,实现不同流量比例的切换。

在这个场景中,先部署新应用的deploy和service,然后部署ingress,切20%流量到新应用,此时发布任务暂停,业务人员进行应用检查和验证。验证业务正常之后,再切换40%、70%、100%应用到新应用上,完成容器应用场景的灰度发布。

场景四:容器应用多地域灰度发布的场景

业务应用在全国多个省市都有部署,在进行升级时,分地域进行灰度升级。

先升级华东地域应用,华东地域内串行发布,确保业务能够正常稳定发布成功;然后依次升级华中地域、华南地域、华北地域、西南地域、港澳台地域,地域内并行发布执行。

场景五:K8s集群版本灰度升级的场景

K8s不支持跨大版本进行升级,如果考虑一个个小版本的升级会非常麻烦,每次小版本升级对应用运维人员来说都是非常大的挑战。因此一个自动化、业务无感知的K8s集群版本灰度升级是非常关键的。

业务端通过APISIX或者Istio控制业务流量。首先自动化部署v1.24版本的K8s集群,然后在v1.24版本集群中部署容器应用,通过APISIX灰度迁移少部分业务流量,验证业务的可用性和稳定性,慢慢将所有应用灰度迁移到新版本集群。所有应用迁移完成后,将v1.16版本K8s集群下线资源回收。

灰度发布方案,只是嘉为蓝鲸应用发布中心产品支持的一个企业级发布场景,其他场景还包含:紧急部署、持续部署、大规模变更、应用上线等场景,还支持与DevOps、ITSM集成实现研运一体化、工单驱动变更等功能。详细产品功能架构如下:

嘉为蓝鲸应用发布中心核心优势如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java入门及环境配置

java三大版本 JavaSE: 标准版(桌面程序,控制台开发........) JavaEE: 嵌入式开发(手机,小家电.....) JavaEE: E企业级开发(web端,服务器开发...) JDK、JRE、JVM: Java安装开发环境&a…

信息化时代企业数据防泄露工作该怎么做

场景描述 信息化时代发展迅速,数据防泄露一词也频繁的出现在我们身边。无论企业或政府单位,无纸化办公场景越来越多,数据泄露的时间也层出不穷。例如:世界最大职业中介网站Monster遭到黑客大规模攻击,黑客窃取在网站注…

计算机毕设Python+Vue药品销售平台(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

模板二(基础算法)

目录 快速排序 归并排序 二分 整数二分 浮点数二分 前缀和 一维前缀和 二维前缀和 差分 一维差分 二维差分 双指针 位运算 离散化 区间合并 快速排序 方法一:定义两个新数组,a[ ],b[ ],每次将大于x的放到a中,小于x的放到b中&…

【矩阵论】6.范数理论——范数估计——许尔估计谱估计

6.3 许尔估计 任意方阵 A(aij)nnA(a_{ij})_{n\times n}A(aij​)nn​ ,全体根 λ(A){λ1,⋯,λn}\lambda(A)\{\lambda_1,\cdots,\lambda_n\}λ(A){λ1​,⋯,λn​} ,满足 ∣λ1∣2⋯∣λn∣2≤∑∣aij∣2\vert \lambda_1\vert^2\cdots\vert \lambda_n\ve…

数据存储格式

文章目录数据存储格式1 行列存储比较2 ORC文件格式2.1 文件级2.1.1 Post scripts2.1.2 File Footer2.1.3 File MetaData2.2 Stripe级2.2.1 Stripe Footer2.2.2 Row Data2.2.3 Index Data3 Parquet文件格式3.1 Header3.2 Data3.2.1 Row Group3.2.2 Column Chunk3.2.3 Page3.3 Fo…

正则表达式判断数字

判断 正负整数,正负小数 表达式: ^[-]?([0]{1,1}|[1-9]{1,1}[0-9]*?)[.]?[\\d]{1,}$ import java.util.Scanner; import java.util.regex.Pattern; public static void main(String[] args) { Pattern pattern Pattern.compile("^[-]?([0]{1,1}|[1-9]{1,1}…

3dtiles数据解析

1.解析json文件 2.解析b3dm模型 (1)b3dm模型文件时二进制文件,其中包含glTF文件: 当使用tiny_gltf库解析glTF时,需要减去(28byte featuretable的byte batchTable的byte ): bool TinyGLTF::ExtractGltfFromMemory(Model *model,std::string…

JVM - 内存区域划分 类加载机制 垃圾回收机制

目录 1. 内存区域划分 2. 类加载 2.1 双亲委派模型 3. 垃圾回收机制 (GC) 3.1 如何判断一个对象是否为 "垃圾" 3.1 可达性分析 3.2 垃圾回收算法 1. 内存区域划分 JVM 作本质上是一个 Java 进程, 它启动的时候, 就会从操作系统申请一大块内存, 并且把这一大块…

CSS学习(七):盒子模型,圆角边框,盒子阴影和文字阴影

原文链接:CSS学习(七):盒子模型,圆角边框,盒子阴影和文字阴影 1. 盒子模型 页面布局要学习三大核心:盒子模型,浮动和定位。学习好盒子模型能非常好的帮助我们页面布局。 1.1 看透…

肽基脯氨酰异构酶底物:1926163-51-0,WFY-pSer-PR-AMC

WFYpSPR-AMC, Pin1底物类似显色底物H- trp - phi - tir - ser (PO₃H₂)-Pro-Arg-pNA。 磷酸肽在生命过程中发挥重要作用,磷酸化的位置在多肽上的Tyr、Ser,Thr,。目前磷酸肽合成一般都采用磷酸化氨基酸,目前使用的都是单苄基磷酸化…

Kafka Producer - 分区机制实战

Kafka Producer - 分区机制实战 上一篇介绍了kafka Producer 生产者发送数据的程序代码,以及对生产者分区机制的相关介绍,今天继续深入的了解下分区机制的原理、测试验证、自定义分区。 在学习之前先在本地机器搭建一个单机版的双节点集群环境&#xf…

80.【Spring5】

Spring《解耦》(一)、Spring 简介1.历史:2.Spring 目的3.Spring 引入4.优点5.Spring 七大模块组成:6.扩展(约定大于配置)(二)、IOC理论推导(Inversion of Contro)1.以前的三层分级2.现在对三层架构的更新3.什么是IOC(三)、HelloSpring1.怎么使用Spring?…

技术分享 | 缓存穿透 - Redis Module 之布隆过滤器

作者:贲绍华 爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一、场景案例 假…

设计模式-抽象工厂模式

1、什么是抽象工厂模式 抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。抽象工厂模式是工厂方法模式的…

Tiny ImageNet 数据集分享

ImageNet官网上的数据集,动辄就100G,真的是太大了。 有需要Tiny Image Net 数据集的小伙伴可以点击这个下载链接: http://cs231n.stanford.edu/tiny-imagenet-200.zip数据集简介: Tiny ImageNet Challenge 来源于斯坦福 CS231N …

uwb无线定位系统的原理和介绍

uwb无线定位系统是在 uwb平台上部署的定位基站,通过发射无线信号,将 uwb定位系统部署在需要安装的位置,同时结合定位基站所支持工作环境条件(如:温度、湿度、光照等)和定位算法,实现在不同的地理…

使用elesticsearch-7.10.0版本连接elasticsearch-head

背景: 由于esasticsearch-5.5.1中没有登录,登出的安全校验,在安全测评时,经常被检查到高危漏洞,因此项目经常要升级到es7版本。 问题一:jdk版本不满足要求,提示如下 future versions of Elasti…

Js实现轮盘抽奖功能,一招帮你解决选择困难症

不知道今天自己该吃什么,一招帮你解决选择困难症。 通过htmlcssjs实现一个轮盘抽奖功能。我们可以将平时吃的饭菜输入到代码中,每到纠结的时候只需点开抽一次就可以了。 实现步骤 html代码: 整体实现的结构是一个大的圆形,分成…

热门项目披露:成都双流板桥轨道城市发展有限公司100%股权转让

热门项目披露:成都双流板桥轨道城市发展有限公司100%股权转让;该项目由 西南联合产权交易所 发布,于2022年12月9日被塔米狗平台收录。 项目方 成都双流板桥轨道城市发展有限公司, 成立于 2021年9月7日 , 注册资金 100…