灰度发布 java_当我们说做灰度发布的时候我们在做什么

article/2025/11/5 8:18:39

现在对于稳定性的要求越来越高,同时在维护的应用中有一个正在进行迁移,需要采取一些措施来实现平稳升级和迁移。采用灰度发布是一个可行的方案。

什么是灰度发布

百度百科上的解释是这样的

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

从上面的解释,我们不难看出,灰度发布包括三个要点:

分别部署A,B两个版本

选择测试用户并逐渐切流

将测试用户切到B版本,不能影响到政策用户对A版本的使用

灰度发布主要的作用也显而易见:

降低发布带来的影响。即使在日常和预发环境进行充分测试,但也没人能保证线上一定是好的。测试环境和线上毕竟不是完全一样,测试也不可能覆盖所有地方

通过新老版本对比,验证新版本带来的效果。

怎么做灰度发布

在开始介绍灰度发布之前,我们先看一下没有灰度的发布流程是怎么样的:

直接替换部署

如果变更是兼容的:

通常的发布方式是底层服务先进行发布,然后上层应用跟着进行发布。前端CDN比较特殊,会在web层之前进行非覆盖式发布(CDN 本质是一个OSS文件,每次发布CDN版本+1,并保留之前的版本)。web层带着最新的CDN版本在最后发布

f952dc24a5b78db7b9d0cc656888cb56.png

一般应用通常会引入配置服务器来管理一些配置项,可以实现不重新发布应用的情况下做一些变更。比如切换CDN版本号来实现前端发布

e9cae373d47ca0c7604f3b57afdaa157.png

滚动部署和蓝绿部署

现在应用基本都会有多台机器和负载均衡。发布方式则会变成每次发布一部分机器,从负载均衡上去掉并更新,更新完成之后负载均衡重新接入这部分机器。这就是滚动部署。

蓝绿部署也是类似。区别在于,先升级一部分,然后通过负载均衡把流量导入到新服务,最后升级另一部机器并重新接入负载均衡。

00ad2f9cba2061bc82ad326e614ae30c.png

不兼容变更

上面讨论的都是兼容的变更,但有时候我们会需要做一些 breaking change ,这个时候就要前后端同时发布,否则会有一段时间服务不可用。如果是用最原始的部署方式,web层带着最新的前端代码(或CDN版本号)一起发布就好了。但是在有了配置服务器之后,虽然多数场景为我们提供了便利,但对这种场景却不是很友好。前端发布通过配置服务器的方式独立于后端的发布,两次发布会有短暂的服务不可用的时间

实现不兼容变更的平滑发布,常见做法是引入版本号,一部分机器升级到 v2 版本,/v1/api 和 /v2/api 共存。前端应用使用新版本 /v2/api 的接口。在发布完成之后视情况去掉 v1 版本相关的代码。

灰度发布的分类

结合上面灰度发布的定义和在不做灰度发布时的部署方式,对于怎么做灰度发布基本能想象它的脉络。核心就在于先升级部分机器并根据一定条件把部分用户引导到新服务。

在介绍具体做法前,先整体的分一下类:从灰度的方式划分,可以分为物理灰度和逻辑灰度。从灰度的范围又可以分为功能级别灰度和应用级别灰度。

从灰度方式划分

物理灰度做法比较简单,其实就是根据机器维度进行灰度。和上文提到的直接部署一样,机器部署应用之后,流量均匀的打到新老版本上。好处是这种方式很简单,不需要做额外的事情。缺点上面也提到了,对于不兼容的变更不适用

ef340a1592859078b03893441c62269b.png

逻辑灰度相比物理灰度,变化的点只有把均匀的流量变成根据一定逻辑切换流量。

ddb1624949d9915ab41a1d7d8706279e.png

逻辑灰度可以更精确的控制流量,如果出现问题,回滚也方便,流量切走就是了。对于有诉求要做更进一步的AB测试同学,更是必须要做的事。但这种方式在灰度结束之后,往往需要清除灰度相关的代码

if(灰度条件成立){

灰度服务

}else{

稳定服务

}

复制代码

如果灰度的服务涉及到多个功能点,类似的if else就会多了起来。如果灰度的条件要处理一些用户信息,代码会更多(比如对某人群进行灰度,会额外增加人群判断的逻辑)。在结束之后删除这些代码并发布也是一件麻烦事,如果留到下次需求再去掉,人的惰性,不求有功但求无过的心理,维护人员调整等等原因都可能会增加项目维护的难度。为了缓解这个问题,我们可以把灰度的逻辑单独抽出来:

39b0498063cf9cf6edff7639314f702f.png

这样一来,灰度结束的时候就只用删掉 if else 而没有灰度的逻辑。

还有另一种更加棘手的情况。在灰度的过程中,有另一个 feature 需要发布的话怎么处理,是赶紧结束上一个的灰度,全量发布还是一起发上去同时灰度?feature 还好处理,如果出现了线上问题,急需 hotfix 呢。这些都是需要思考的问题

从灰度范围划分

功能级别的灰度很好理解,就是对单个功能进行灰度。和上面提到的方式一致。可能遇到的麻烦点也是可能存在多个功能同时需要灰度,并且灰度标签不一致。通过提取灰度条件SDK 的方式可以缓解

应用级别的灰度服务端可以通过 v1,v2这种版本号标识即可。前端会相对特殊,因为前端是依赖于服务端的,虽然同时存在多个前端版本很容易(无非是多个CDN版本共存)。但出于同一次发布和同一次灰度关联,"今日事今日毕" 的原则,在发布流程上前端会多一个 betaVersion 版本,区别于正式的 version 版本。先发布 betaVersion,并切流验证,验证无误之后发布正式版本,切流完成。

c0feb9785293f2f50283779713923529.png

总结

讲了这么多,相信大家对于灰度发布怎么做已经很清晰了。我们再最后总结一下,灰度的流程大概可以分为:

制定灰度策略 -> 筛选用户 -> 部署系统 -> 观察灰度情况 -> 增大/降低灰度比例 -> 灰度结束 -> 删除灰度代码

灰度发布有诸多好处,但也不是没有成本。但如果我们能够因地制宜的选择灰度发布的方式,可以充分享受灰度的好处而将成本降到最低

参考文章:

常见应用发布方式浅析:www.yunxiaobai.net/archives/99…

灰度发布:灰度很简单,发布很复杂:www.woshipm.com/pmd/573429.…

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[当我们说做灰度发布的时候我们在做什么]http://www.zyiz.net/tech/detail-132892.html


http://chatgpt.dhexx.cn/article/RP0caq7Y.shtml

相关文章

版本升级之灰度发布

在项目迭代的过程中,不可避免需要“上线”。上线对应着部署,或者重新部署;部署对应着修改,修改则意味着风险。应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境,同时要保证系统…

产品灰度发布

一、什么是灰度发布(灰度测试) 如果软件要在不久的将来推出一个全新的功能,或者做一次比较重大的改版的话,要先进行一个小范围的尝试工作,然后再慢慢放量,直到这个全新的功能覆盖到所有的系统用户&…

灰度发布

1、什么是灰度发布,有哪些好处? 答:灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。 在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用…

灰度发布究竟是啥

概述 目前产品优化迭代的方式,通常是直接将某版本上线发布给全部用户,一旦遇到线上事故(或BUG),对用户的影响极大,解决问题周期较长,甚至有时不得不回滚到前一版本,严重影响了用户体…

项目灰度发布功能设计

平台项目迭代发布过程中,有一些功能发布时会产生较大的影响,一旦出现问题,会影响用户使用体验,降低产品信誉。为了解决这一问题,在重要功能发布时需要引入灰度发布功能,借助一小部分用户在生产环境进行功能…

【华为云技术分享】从零搭建一个灰度发布环境

DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师。 官方网站:devui.design Ng组件库:ng-devui(欢迎Star) 引言 灰度发布&#x…

什么是灰度发布

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来。…

准确率(accuracy),精确率(Precision),召回率(Recall)和综合评价指标(F1-Measure )

自然语言处理(ML),机器学习(NLP),信息检索(IR)等领域,评估(evaluation)是一个必要的工作,而其评价指标往往有如下几点:准确率(accuracy),精确率(Precision),召回率(Recall)和F1-Measure。 本文将简单介绍其中几个概念。中文中这几个评价指标翻译各有不同,所以一般情…

多分类评价指标:准确率、精确率、召回率、F1值

准确率、精确率、召回率、F1值 定义: 准确率(Accuracy):正确分类的样本个数占总样本个数, A (TP TN) / N 精确率(Precision)(查准率):预测正确的正例数据占预测为正例数据的比…

准确率(Accuracy) VS 精确率(Precision) VS 召回率(Recall)

准确率(Accuracy) VS 精确率(Precision) VS 召回率(Recall) 在信息检索中, 准确率通常用于评价结果的质量, 而召回率用来评价结果的完整性。 我们的目标是训练一个模型,它可以将这个二维空间中的新数据点分成红色和蓝色两类。 数据有两种状态:测试集数据和预测结…

真正率、假正率、真负率

True Positive (真正, TP)被模型预测为正的正样本; True Negative(真负 , TN)被模型预测为负的负样本 ; False Positive (假正, FP)被模型预测为正的负样本; False Negat…

关于召回率和准确率的理解

最近一直在做相关推荐方面的研究与应用工作,召回率与准确率这两个概念偶尔会遇到, 知道意思,但是有时候要很清晰地向同学介绍则有点转不过弯来。 召回率和准确率是数据挖掘中预测、互联网中的搜索引擎等经常涉及的两个概念和指标。 召回率&am…

分类器性能指标错误率、正确率、召回率

前言 在使用机器学习的方法解决分类问题时,我们通常需要一个指标来衡量模型的性能,以下介绍一些常用的性能指标,在实际应用中可以依照应用需求采用相应的指标。 错误率 错误率是使用最普遍、最简单同时又是最粗糙的分类指标。其计算方法为…

分类模型的评估标准(精确率召回率准确率)

对模型进行评估时,可以选择很多种指标,但不同的指标可能得到不同的结果,如何选择合适的指标,需要取决于任务需求。 针对二元分类结果,常用的评估指标有如下三个:查准率(Precision)、…

准确率、精确率、召回率、F1-measure

文章目录 准确率(Accuracy)精确率(precision)召回率(recall)F1-measure值学习理解网站 -p’(Predicted)n’(Predicted)p(Actual)True PositiveFalse Negtiven(Actual)False PositiveTrue Negtive 准确率(Accuracy) A No.Samples Predicted Correctly Total No.of Samples T …

评价指标(一)精确率,召回率,F1-score

1. 精确率-Precision、召回率Recall 先来讲一下精确率(Precision)和准确率(Recall),首先要明确一点,精确率不等于准确率(Accuracy),两者是不同的,后面也会讲到准确率。在信息检索里,精确率和召…

错误接受率 (FAR), 错误拒绝率(FRR), 等错误率(EER)

不管是声纹识别和图像识别,以及指纹识别,在评价模型时总要用到这三个指标。下边说下这三个指标的含义。 1、错误接受率 (FAR-False Acceptance Rate) FAR nontarget_is_target / ( target_is_target nontarget_is_target ) 另一种比较容易理解的表示方…

Redis进阶:布隆过滤器(Bloom Filter)及误判率数学推导

1 缘起 有一次偶然间听到有同事在说某个项目中使用了布隆过滤器, 哎呦,我去,我竟然不知道啥是布隆过滤器, 这我哪能忍?其实,也可以忍,但是,可能有的面试官不能忍!&#…

机器学习中准确率、精确率、召回率、误报率、漏报率、F1-Score、APmAP、AUC、MAE、MAPE、MSE、RMSE、R-Squared等指标的定义和说明

在机器学习和深度学习用于异常检测(Anomaly detection)、电子商务(E-commerce)、信息检索(Information retrieval, IR)等领域任务(Task)中,有很多的指标来判断机器学习和深度学习效果的好坏。这些指标有相互权衡的,有相互背向的,所以往往需要根据实际的任务和场景来…

讨教大学|六西格玛之属性值数据一致性分析

相信大家在日常的工作中肯定会遇到这样一种情况:产品的质量特性属于外观特性,即 需要靠人工判断产品是不是符合标准。当遇到客户投诉,或者内部报废率比较高的时候,经 常会遇到客户和领导的挑战: 如何保证员工清楚的知…