如何做到低风险的部署与发布?(下)丨IDCF

灰度发布

灰度发布是在金丝雀发布基础上进行延伸,不是将发布分成两批,而是将发布分成不同的阶段/批次发布,每个阶段/批次的用户数量逐级增加。如果新版本在当前阶段没有发现问题,就再扩展用户数量进入下一个阶段,直至扩展到全部用户。

灰度发布,可以结合滚动部署一起使用,通过分批部署,部署即发布,来让部分客群可见。结合特性开关、流量切换等技术,可以做到更复杂灵活的灰度设置。

以华为云DevCloud灰度发布的实践为例,整个DevCloud的产品中采取的灰度发布特点主要有三个方面:

  • 根据用户画像,精准分层用户,灰度逐步递进,全部保证能够检测到所有的用户分群。

  • 结合了多种灰度策略,如特性开关、AB测试、在线验收测试、友好用户测试等模式。

  • 精准把控灰度批次比例,借助SLB服务,严格按照1%、9%、45%、45%,谨慎比例逐步放大灰度群体。

功能开关

功能开关利用代码中的开关(FeatureFlag/Toggle/Switch)来控制发布逻辑,一般不需要复杂的发布工具和智能LB 配合,是一种相对比较低成本和简单的发布方式。这种方式也是支持现代DevOps 理念,研发人员可以灵活定制和自助完成的发布方式。应用上线后开关先不打开,然后运维、研发或业务人员通过开关中心打开新功能,经过流量验证新功能没有问题后,则发布完成,如果有问题,随时可以通过开关中心切回老功能逻辑。

采用功能开关方式的优势是升级切换和回退速度非常快,相对于复杂的发布工具,实施比较简单,成本相对低廉,研发能够灵活定制发布逻辑,支持DevOps 自助发布。而劣势是切换是全量的,如果V2 版本有问题,则对用户体验有直接影响;另外对代码有侵入,代码逻辑会变复杂,需要定期清理老版本逻辑,维护成本变高。

功能开关的适用场合包括:对用户体验有一定容忍度的场景;已有配置中心或开关中心服务;暂不具备研发复杂发布工具能力等。

从实现角度,功能开关方式需要一个配置中心或者开关中心这样的一个服务支持,通过配置中心运维或研发人员可以在运行期间动态配置功能开关的值。功能开关发布只是配置中心的一种使用场景,配置中心还能支持其他动态配置场景,功能开关服务一般提供客户端的SDK方便开发人员集成,在运行期客户的SDK会同步最新的开关值。技术实现有推方式也有拉方式或者推拉结合方式,新功能和老功能住在同一代码中,新功能隐藏在开关后面,如果开关没有打开,则走老代码逻辑,如果开关打开则走新代码逻辑,技术实践上可以理解为一个简单的if else逻辑。

功能开关允许你持续地交付新发布,这些版本可以包含未完成的新功能——但这些不会影响应用程序,因为这些新功能还处于关闭状态。只有当这些功能可以发布并且成功地通过了所有所需的测试后,生产环境中的开关才会打开(即打开这个功能)。

功能开关是DevOps实践中非常重要的实践之一,我们将单起章节专门进行介绍。

A/B测试

简单来说,A/B测试是针对用户的需要,提供两个版本的功能,一部分用户能看到版本A,一部分用户能看到版本B,经过对比实验,得出哪个版本更优的测试过程。

A/B测试是用来测试应用功能表现的方法,例如可用性、受欢迎程度、可见性等等。A/B测试目的在于通过科学的实验设计、采样样本代表性、流量分割与小流量测试等方式来获得具有代表性的实验结论,并确信该结论在推广到全部流量可信。

A/B测试的优势是用户体验影响小,可以使用生产流量测试,可以做到针对某类特定目标用户进行测试。但A/B测试搭建复杂度相对高,有一定技术门槛,需要具备一定的A/B 测试平台研发能力

A/B测试示例如图所示,假设原来的PC 端和手机端都访问老版本V1 服务(也称A 组或控制组),当V2 新版本(也称B 组或实验组)发布以后,为了验证V2 的功能正确性,同时也为了避免V2 有问题时影响所有用户,先通过LB 将手机端的流量切换到V2 版本,经过一段时间的A/B 比对测试和观察(主要通过用户和监控反馈),确保V2 正常,则通过LB 将全部流量切换到V2。

基于LB 方式实现 A/B测试,LB 需要能够通过某种条件做流量路由,例如通过Client IP,设备类型,浏览器类型,甚至是定制的HTTP Header 或查询字符串。

通过功能开关的方式和AB测试有点相似,但功能开关一般是无状态和全量的,无法做到针对某类特定用户进行测试。而AB测试一般是有状态的,能够根据事物和用户级别的状态,可以实现针对某类特定用户进行测试。

虽然 A/B 测试名字中只包含 A、B ,但并不是说它只能用于比较两个版本的好坏,事实上,完全可以设计两个以上版本进行测试,即A/B/n测试。

暗启动 Dark Launch

暗启动原意是指将新版本部署到生产环境后,对用户无感。所以暗启动意味着暗部署。当然,暗启动终极目的还是为了发布,对原有暗启动含义扩展之后,就会先让小部分用户感知新功能,再逐渐扩大感知到新功能的用户范围,那么暗启动就代表发布。

马丁·福勒(Martin Fowler)提到,暗启动针对的是后端行为,后端系统部署在生产环境之后,现有用户使用前端界面的时候,新部署的后端功能被调用,但是用户并没有感知,可以对新功能的性能进行监控。也就是说用户和系统的交互逻辑保持不变,用户在界面上没有地方选择新部署的功能,也就是对用户不可见。

暗启动的暗(Dark)代表用户无感知,也就是新版本的功能已经被部署到生产环境,但是用户无感知。例如百度的搜索框输入提升推荐,可以在客户界面不发送改变的情况下,对算法进行数据采集和训练,再与客户实际点击的链接结果集进行比对,便于更好的优化,在未来才正式推出输入时推荐的功能。

暗启动将部署与发布解耦,功能部署之后,对用户而言无感,这样可以获得部分真实用户的反馈,测试缺陷,评估基础设施性能、系统的额外负载和性能影响等。暗启动还可以启用重新实现的功能的并行运行。旧代码和新代码都可以调用并检查它们的结果以查看新算法是否有变化,但只有一个答案返回到界面。暗启动也可以选定公司内部员工作为用户,这样内部员工可以先吃自己的狗粮,对新功能进行测试,而真实用户并未真正使用新功能。这一场景事实上与灰度发布类似。

参考资料

  • https://martinfowler.com/bliki/ Martin Fowler的博客

  • 一文看懂持续部署按需发布!DevOps部署和发布方法大全 —— 赵卫

  • 《DevOps实践指南》

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

everything的高效使用方法

目录 前言1 everything的简单介绍2 常用搜索3 语法搜索4 正则表达式搜索5 服务器功能 前言 本文介绍everything软件的高效使用方法,everything是一款在系统中快速搜索文件的软件,能够帮助人们快速定位需要查找的文件。首先介绍everything软件的作用和使…

自学人工智能该从哪里开始准备?

随着人工智能技术的飞速发展,越来越多的人对学习人工智能产生了浓厚的兴趣。然而,对于许多初学者来说,不知道如何开始自学人工智能。今天,我将向大家介绍一些自学人工智能的步骤,帮助大家更好地入门这个领域。 第一步&…

基于SSM的奖助学金管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

【MATLAB】史上最全的9种频谱分析算法全家桶

有意向获取代码,请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有9种频谱分析算法,绝对不亏,知识付费是现今时代的趋势,而且都是我精心制作的教程,有问题可随时反馈~也可单独获取某一算法的代码&#xff08…

基于SSM的焦作旅游协会管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

应用程序生成器:App Builder 2023

DecSoft应用程序生成器 专为小屏幕设备设计,但也可以(无需更改)部署在平板电脑等较大设备中。 如果您想创建现代桌面和移动应用程序,那么您来对地方了!DecSoft App Builder 是一个专业的可视化开发环境,用于…

【LeetCode刷题笔记】链表

141. 环形链表 解题思路: 1. 哈希表 , 最容易想到的方法是遍历所有节点,每次遍历到一个节点时,判断该节点此前是否被访问过。 2. 快慢指针 「Floyd 判圈算法」(又称龟兔赛跑算法)快慢指针从 head 开始走, 慢指针每次只移动1步 ,而 快指针每次移动2步 。 如果在移动的过程…

常用的OLED透明显示屏款式,有几种?

作为OLED透明屏的制造工程师,尼伽小编对这一领域的发展和技术进步有着丰富的经验和深入的理解。在本文中,我将为大家介绍一些关于OLED透明显示屏款式的知识,并探讨其在未来的应用前景。 OLED透明显示屏作为新一代的显示技术,其独特…

实人认证API的出现,让电子化身份验证更加可靠

前言 随着信息技术的快速发展和数字化转型的加速,各种电子化应用正在走进人们的生活中,电子化身份验证也成为了日益普遍的需求。从现在生活中各种App、网站、电商平台等需要身份认证的场景来看,身份验证的确是十分重要的一环。但是&#xff…

监控电脑的软件叫什么丨科普小知识

监控电脑的软件叫电脑监控软件。 电脑监控软件是一种可以监控电脑使用情况的软件,通常具有记录屏幕活动、网站访问、聊天记录等功能。 应用场景 1、企业内部管理:企业管理者可以通过监控电脑软件来监视员工的工作活动,以确保员工遵守公司政…

基于Pyflwdir实现流域的提取(参照官网例子)

本文参照官网例子实现流域的提取,官方GitHub地址如下pyflwdir: 该工具包目前仅支持D8和LDD两种算法,在效率上具有较好的应用性,我用省级的DEM(30米)数据作为测试,输出效率可以满足一般作业需要。 环境env…

微信怎么发状态?简单教程,一学就会!

微信是一个非常实用的社交应用,不仅提供了基础的聊天功能,还推出了很多其他有趣的功能。比如微信个人状态,这个功能可以让用户随时随地分享自己的心情和动态。那么,微信怎么发状态呢?本文将为大家介绍有关微信发状态的…

三十分钟学会SCALA

SCALA Scala 是一种运行在 JVM上的函数式的面向对象语言。 Scala 是兼容的:兼容 Java,可以访问庞大的 Java 类库;Scala 是精简的:Scala 表达能力强,一行代码抵得上多行 Java 代码,开发速度快。可以让程序…

【快速解决】实验四 对话框 《Android程序设计》实验报告

目录 前言 实验要求 实验四 对话框 正文开始 第一步建立项目 第二步选择empty views activity点击next ​编辑 第三步起名字,点击finish 第四步对 activity _main.xml文件操作进行布局 第五步,建立两个新文件,建立方法如下 SecondA…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑多重不确定性和潜在博弈的楼宇群电能优化调度策略》

这个标题涉及到楼宇群电能的优化调度策略,并强调了两个重要的方面:多重不确定性和潜在博弈。 楼宇群电能优化调度策略: 这指的是在一个涉及多个楼宇(建筑物)的群体中,对电能的使用进行优化调度的策略。这可…

矩阵代数概论

矩阵代数 共轭转置 对于矩阵 A [ a i j ] A[a_{ij}] A[aij​],共轭矩阵被定义为 A ‾ [ a ‾ i j ] \overline{A}[\overline{a}_{ij}] A[aij​],所以 A A A的共轭转置 A ‾ T A T ‾ \overline{A}^T\overline{A^T} ATAT,其中 A ‾ T \ov…

【Flink】核心概念:并行度与算子链

并行度(Parallelism) 当要处理的数据量非常大时,我们可以把一个算子操作,“复制”多份到多个节点,数据来了之后就可以到其中任意一个执行。这样一来,一个算子任务就被拆分成了多个并行的“子任务”&#x…

单图像3D重建AI算法综述【2023】

计算机视觉是人工智能的一个快速发展的领域,特别是在 3D 领域。 本概述将考虑一个应用任务:2D 和 3D 环境之间的转换。 在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编…

python趣味编程-5分钟实现一个蛇梯游戏(含源码、步骤讲解)

蛇梯游戏是用Python编程语言开发的,它是一个桌面应用程序。 这个Python蛇梯游戏可以免费下载开源代码,它是为想要学习Python的初学者创建的。 该项目系统使用了 Pygame 和 Random 模块。 Pygame 是一组跨平台的 Python 模块,专为编写视频游戏而设计。 此游戏包含 Python …

《洛谷深入浅出基础篇》P5266 学籍管理——map的应用

上链接:P5266 【深基17.例6】学籍管理 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P5266#submit 题干: 题目描述 您要设计一个学籍管理系统,最开始学籍数据是空的,然后该系统能够支持下面的…