DevOps发布策略简介

简介: DevOps追求更短的迭代周期、更高频的发布。但发布的次数越多,引入故障的可能性就越大。更多的故障将会降低服务的可用性,进而影响到客户体验。所以,为了保证服务质量,守好发布这个最后一道关,阿里逐步发展出了适应DevOps要求的发布策略。

image.png

作者 | 沉银
来源 | 阿里技术公众号

前言

DevOps追求更短的迭代周期、更高频的发布。但发布的次数越多,引入故障的可能性就越大。更多的故障将会降低服务的可用性,进而影响到客户体验。所以,为了保证服务质量,守好发布这个最后一道关,阿里逐步发展出了适应DevOps要求的发布策略。

在开始讲述阿里的实践之前,我们先简单介绍下几种常见发布策略,以及它们适用的场景和优缺点。

一 常见发布策略

1 停机发布

停机发布会在发布以前关闭服务,停止用户访问,然后一次性的升级所有服务。这种发布策略的发布频率往往比较低,且需要在发布之前做好充足的测试。

停机发布的特点有:

  • 所有需要升级的组件被整合到一次发布中
  • 一个项目中的大部分应用都会被更新
  • 发布之前的研发流程和测试流程往往需要花很长的时间
  • 发布时如果出现问题, 修复和回滚的成本很高
  • 完成一次停机发布, 需要花费很久的时间, 且需要很多团队在一起才能完成
  • 往往需要客户端和服务器端同步升级

停机发布并不适合互联网公司,因为两次发布的间隔很久,从功能特性提出到进入市场的时间太长,对市场反应不敏感,会在充分竞争的市场里处于下风。每次发布因为要停机,也会带来经济损失。

优势:

  1. 简单,不太需要考虑新旧版本共存时的兼容性问题

劣势:

  1. 发布过程中,服务不可用
  2. 只能在业务低峰期 (往往是夜间)发布,并且需要很多团队在一起工作
  3. 出现故障后很难回滚

适合场景:

  1. 开发测试环境
  2. 非关键应用,用户影响面小
  3. 兼容性比较难管控的场景

2 金丝雀发布

金丝雀发布这个术语源自20世纪初期,当时英国的煤矿工人在下井采矿之前,会把笼养的金丝雀携带到矿井中,如果矿井中一氧化碳等有毒气体的浓度过高,在影响矿工之前,金丝雀相比人类表现的更加敏感快速,金丝雀中毒之后,煤矿工人就知道该立刻撤离。金丝雀发布是在将整个软件的新版本发布给所有用户之前,先发布给部分用户,用真实的客户流量来测试,以保证软件不会出现严重问题,降低发布风险。

在实践中,金丝雀发布一般会先发布到一个小比例的机器,比如 2% 的服务器做流量验证,然后从中快速获得反馈,根据反馈决定是扩大发布还是回滚。金丝雀发布通常会结合监控系统,通过监控指标,观察金丝雀机器的健康状况。如果金丝雀测试通过,则把剩余的机器全部升级成新版本,否则回滚代码。

image.png

优势:

  1. 对用户体验影响较小,在金丝雀发布过程中,只有少量用户会受影响
  2. 发布安全能够得到保障

劣势:

  1. 金丝雀的机器数量比较少, 有一些问题并不能够暴露出来

适用场景:

  1. 监控比较完备且与发布系统集成

3 灰度/滚动发布

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

灰度发布可以减小发布风险,是一种零宕机时间的发布策略。它通过切换线上并存版本之间的路由权重,逐步从一个版本切换为另一个版本。整个发布过程会持续比较长的时间, 在这段时间内,新旧代码共存,所以在开发过程中,需要考虑版本之间的兼容性,新旧代码共存不能影响功能可用性和用户体验。当新版本代码出现问题时,灰度发布能够比较快的回滚到老版本的代码上。

结合特性开关等技术,灰度发布可以实现更复杂灵活的发布策略。

image.png

优势:

  1. 用户体验影响比较小, 不需要停机发布
  2. 能够控制发布风险

劣势:

  1. 发布时间会比较长
  2. 需要复杂的发布系统和负载均衡器
  3. 需要考虑新旧版本共存时的兼容性

适用场景:

  1. 适合可用性较高的生产环境发布

4 蓝绿发布

蓝绿部署是指有两个完全相同的、互相独立的生产环境,一个叫做“蓝环境”,一个叫做“绿环境”。其中,绿环境是用户正在使用的生产环境。当要部署一个新版本的时候,先把这个新版本部署到蓝环境中,然后在蓝环境中运行冒烟测试,以检查新版本是否正常工作。如果测试通过,发布系统更新路由配置,将用户流量从绿环境导向蓝环境,蓝环境就变成了生产环境。这种切换通常在一秒钟之内就能搞定。如果出了问题,把路由切回到绿环境上,再在蓝环境中调试,找到问题的原因。因此,蓝绿部署可以做到仅仅一次切换,立刻就向所有用户推出新版本,新功能对所有用户立刻生效可见。

image.png

优势:

  1. 升级切换和回退速度非常快
  2. 零停机时间

不足:

  1. 一次性的全量切换,如果发布出现问题, 会对用户产生比较大的影响
  2. 需要两倍的机器资源
  3. 需要中间件和应用自身支持热备集群的流量切换

适用场景:

  1. 机器资源比较富余或者按需分配 (背靠云厂商)

5 A/B 测试

A/B 测试和灰度发布非常像,可以从发布的目的上进行区分。AB测试侧重的是根据A版本和B版本的差异进行决策,最终选择一个版本进行部署。和灰度发布相比,AB测试更倾向于去决策,和金丝雀发布相比,AB测试在权重和流量的切换上更灵活。

举个例子,某功能有两个实现版本 A 和 B,通过细粒度的流量控制,把 50% 的用户总是引导到 A 实现上,把剩下的 50% 用户总是引导到 B 实现上,通过比较 A 实现和 B 实现的转化率,最终选择转化率较高的 A 实现作为功能的最终版本。

image.png

优势:

  1. 快速实验能力
  2. 用户体验影响小
  3. 可以使用生产环境流量做测试
  4. 可以针对某些特定用户做测试

不足:

  1. 需要较为复杂的业务流量识别和控制能力
  2. 需要考虑较为复杂的新旧版本兼容性问题

适用场景:

  1. 用来做业务探索和创新测试
  2. 需要对多个方案进行决策

6 流量隔离环境发布

在上述的发布策略中,发布的单位都是应用,但是一个功能模块往往是由多个应用组合在一起提供的服务,即使当前发布的应用出现了异常,这个异常也未必体现在当前应用中,在复杂的情况下,异常会延迟到它的下游应用才体现出来,如何发现此类问题并且不影响用户体验是非常重要的。此外,我们有时候还希望新版本的代码上线以后,只影响到一小部分用户。而传统的灰度发布,因为无法识别业务流量,所以即使某个应用只有一台机器出现了问题,也可能会影响到所有的用户。

如下图左侧的灰度发布,App1 的所有机器都有一定概率会路由到出现问题的红色 App2 机器上。而右侧的隔离环境发布中,新版本的代码会先发布在全链路隔离环境中,即使发布中出现问题,也只会影响少量用户。

image.png

优势:

  1. 能够发现一些复杂的, 涉及到多应用的问题
  2. 出现故障时, 只会影响很小一部分用户

不足:

  1. 需要对流量隔离环境进行独立监控
  2. 系统设计复杂, 需要中间件和链路上的所有应用能够识别业务流量

适用场景:

  1. 较为核心的生产业务场景

二 阿里巴巴发布最佳实践

我们将按照发布的过程来介绍阿里巴巴发布的最佳实践。

1 发布计划

发布前要对待发布功能模块做充分验证,同时要思考假如本次发布引入故障该如何止血。所以在发布之前写出本次发布的计划清单是非常重要的,一个典型的发布计划如下:

  • 本次发布参与人

    • 开发人
    • 测试人
    • 代码 Review 人
  • 发布内容
  • 测试过程
  • 风险描述
  • 线上验证方案
  • 线上出现问题的止血方案
  • 发布步骤

    • 分 x 批发布
    • 前 x 批发布后暂停 x 小时

2 不同环境使用不同的发布策略

前面介绍的几种发布策略都有各自的优缺点,要根据自己的场景特点和需求选择合适的发布策略。

一般来说,测试环境是用来做初步功能测试,所以会频繁的更新代码和发布,如果采用灰度发布的方式且发布的批次设置的比较大,则开发效率会大打折扣。这个时候单机或多机的单批次停机发布其实是一个不做的选择。

对于预发环境,不仅要考虑自己测试的需要,还要考虑上下游其他开发者的测试需求,所以单批次停机发布就不再合适,可以设置两批发布。

对于线上环境,可以先发布隔离流量环境,再多批次发布线上环境。

3 发布中关注监控报警

仅靠发布策略是无法避免故障的发生的,在发布中和发布后仔细的观察应用的监控数据非常重要。应用的核心指标监控数据,比如 QPS、RT、成功率和报错数,能够帮助用户尽可能早的发现故障。此外,在生产环境中,如果批次数量设置的比较小,每批发布机器数量比较少,那么即使某些监控指标出现了问题,因为数据量比较小,可能会被淹没在整体的监控数据中,所以配置已发布机器的独立监控也是非常重要的。

4 金丝雀发布和无人值守

阿里内部绝大部分应用会在多机房/单元部署,可能存在一种场景,同一份代码和配置在某些机房/单元正常,在其他的的单元/机房下就会出现故障,所以有必要在分批发布的时候,把所有机房/单元的组合都在第一批发布时出现,这样问题可以及早暴露。此外研发人员往往会重点关注前几批发布,如果后面批次才出现问题,研发人员可能无法快速响应。

image.png

单元化是为了解决容灾和扩展性问题,上图是阿里巴巴的单元化部署架构。

此外,应用的监控项一般都很多,在发布周期比较长的情况下,不能要求研发人员时刻专注每一个监控项,需要一定的智能化方案帮助研发找出那些需要重点关注的监控项。

为了解决上面两个问题,阿里设计并实现了自己的金丝雀发布策略。金丝雀发布从应用的每个机房/单元下抽取 10% 的机器放到首批,无人值守智能监控系统会对这部分机器设置独立的监控,对于每个监控项,无人值守会对比已发布和未发布机器的监控指标数据,同时对比发布前和发布后的监控数据,如果发现异常,会推送给研发人员做进一步的判断。

这种金丝雀发布策略可以帮助研发尽可能早的发现问题, 并且减少研发人员的工作量,提高研发效率。

5 持续集成和发布

合理的选择发布策略,按照上面所述的最佳实践来发布,发布的风险可以被控制在很小的范围内,甚至比停机发布的风险还要小。实际上,发布周期短,每次发布仅包含少量代码是一个很好的发布实践。因为部署间隔时间长,将会导致每次的部署包含更多的代码变更,结果就是出现更多缺陷和宕机的风险。这种情况下,人们为了降低发布风险,会倾向于增加更多的评审,事实上这除了大大增加部署时间外,对降低发布风险的影响微乎其微。这是一个越来越差的增强回路,我们需要通过高频的持续部署,来颠覆这个恶性循环。

三 总结

敏捷开发能够缩短产品走向市场的时间,让消费者更快地获得想要的功能,也能让产品团队更快地拿到消费者的反馈并据此对产品做出迭代。为了解决敏捷开发下频繁发布带来的发布风险,本文介绍了多种发布策略,包括各个发布策略的优缺点、适用场景,在不同场景下综合应用这些模式可以在更快速地交付高质量的产品。

原文链接
本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

data的值 如何初始化vue_Vue原理解析(九):搞懂computed和watch原理,减少使用场景思考时间...

之前的章节,我们按照流程介绍了vue的初始化、虚拟Dom生成、虚拟Dom转为真实Dom、深入理解响应式以及diff算法等这些核心概念,对它内部的实现做了分析,这些都是偏底层的原理。接下来我们将介绍日常开发中经常使用的API的原理,进一步…

存储引擎 boltdb 的设计奥秘?

作者 | 奇伢来源 | 奇伢云存储etcd 的存储etcd v3 是使用的持久化存储来存储它的 kv 数据,etcd 存储的是非常核心的元数据信息,所以最重要的是稳定。使用的是 boltdb 。下面说道说道这个 boltdb 。boltdb 是什么?boltdb 是一个非常出名的存储…

ftl转PDF服务器上中文不显示,解决Linux中swftools转换中文pdf时出现乱码问题

前段时间安装了swftools可以将pdf转换为swf文件,然后配合一个FlexPaper,就可以做成和百度图文库类似的东东了.但是今天,我们开发的同事告诉我说pwd转换的这个会有乱码问题,我看了一下果然是乱码了.果断打开百度,看了一下主要是由于没有相应的字体文件,所以才造成乱码的而且在使…

提升你的职场竞争力——“低代码开发师”来了!

简介: 最近,钉钉发布了低代码开发师能力图谱,引发业界的广泛关注 。现在低代码开发师(初级)认证已经启动。 最近,钉钉发布了低代码开发师能力图谱,引发业界的广泛关注 。 所谓的低代码开发其实…

mapreduce复制连接的代码_我的 Hive 为什么跑不起来/跑得慢?看看是不是少了这几行代码?...

《饮食男女》开头说:“人生不能像做菜,把所有的料都准备好了才下锅。”但做大数据挖掘不一样,MapReduce 不同于人生,一定要把准备工作做好了,才能顺利运行后面的步骤。如果你的 HiveQL 代码没毛病,却一运行…

数字化转型的路上,手握一张地图,但路还得自己走

简介: 本文作者来自于中国人寿保险股份有限公司研发中心,对企业数字化转型、云原生实践有比较资深的经验。以下内容整理自作者对最新出版的《阿里云云原生架构实践》的读后感。 作者|肖晟 ​ 本文作者来自于中国人寿保险股份有限公司研发中…

tp 数据库查询排序_怎么进行数据库分库分表?

一,数据切分关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对…

服务器响应为4.7.0,454 4.7.0 临时身份验证失败 - Exchange | Microsoft Docs

454 4.7.0 Exchange Server2021/4/9适用于:Exchange Server 2019, Exchange Server 2016 Standard Edition, Exchange Server 2016 Enterprise Edition, Exchange Server 2013 Standard Edition, Exchange Server 2013 Enterprise, Exchange Server 2010 Standard, Exchange Se…

流利说统一可观察性平台实践

简介: 流利说利用日志服务SLS构建统一可观察性平台最佳实践 在线教育行业现状 随着 90 年代互联网的引入,在线教育产品也依托于互联网诞生。随着互联网技术的发展,在线教育产品也开 始了出现新的模式。在线教育从最初单纯的文字形式&#xf…

“CSDN 2021年度IT技术影响力之星评选”正式开启报名!

2021年,数字化转型正磅礴兴起,大批传统企业正在拥抱数字化,云计算、大数据、AI、5G应用能力正在变成企业的核心竞争力;核心技术正在崛起,在操作系统、数据库,依靠开源的力量,众多开发者背后的行…

java log4j logback jcl_Java 日志二三事

前言Java 拥有功能和性能都非常强大的日志库,但另一方面,Java 日志库依赖看起来丰富的让人眼花缭乱。相信大家或多或少都有这样的疑问,Log4j,SLF4J,Logback,Log4j2 这些日志框架我该如何选择?它…

一文了解EPaxos核心协议流程

简介: EPaxos(Egalitarian Paxos)作为工业界备受瞩目的下一代分布式一致性算法,具有广阔的应用前景。但纵观业内,至今仍未出现一个EPaxos的工程实现,甚至都没看到一篇能把EPaxos讲得通俗一点的文章。EPaxos…

xpspeak安装教程_查漏补缺:教你正确操作 XPS 分峰软件 XPSPEAK

一、引言X射线光电子能谱(XPS):利用X射线辐射样品,使原子或分子的内层电子或价电子受激发射出来,光子激发出来的电子称为光电子,利用能量分析器分析光电子的能量,作出光电子能谱图,横坐标一般为结合能&…

低代码发展系列专访之五:低代码的最大价值点是“技术平民化”吗?

话题:低代码专访编辑 | LLBin前言:2019年开始,低代码爆火。有人认为它是第四代编程语言,有人认为它是开发模式的颠覆,也有人认为是企业管理模式的变革……有很多声音,社区讨论很热烈。CSDN随后展开低代码平…

云原生不仅颠覆了技术栈,背后的每个岗位也在悄然发生改变

简介: 随着云原生理念与云原生技术的不断完善和发展,越来越多的行业开始落地实践云原生技术,这对不同岗位的技术从业者产生了不同程度的影响。不管是对 IT 主管还是对一线开发人员和运维人员来说,从业务逻辑到技术选型&#xff0c…

梦幻跨服购买需要登录服务器未响应,梦幻西游8月4日定期维护公告:跨服购买限制放宽...

核心提示:法宝”系统新增“多套法宝切换”功能。亲爱的玩家朋友:为保证服务器的运行稳定和服务质量,《梦幻西游2》所有服务器将于2015年8月4日上午8:00停机,进行每周例行的维护工作。预计维护时间为上午8:00~9:45。如果…

element 方法返回的boolean被当成字符串了_JavaScript 原生对象、属性、方法、事件、事件参数...

/*** 事件参考 https://developer.mozilla.org/zh-CN/docs/Web/Events* Event <- UIEvent <- MouseEvent* //** Event https://developer.mozilla.org/zh-CN/docs/Web/API/Event#DOM_Event_interface* detail: 1* sourceCapabilities: InputDeviceCapabilities {fires…

深度技术揭秘 | 大促狂欢背后,如何有效评估并规划数据库计算资源?

简介&#xff1a; 经过“双11”、“618”这类互联网促销活动的验证&#xff0c;越来越多的互联网公司采用不定期营销活动来刺激消费&#xff0c;达到提升营收能力的目标。然而&#xff0c;在每一次业务狂欢的背后&#xff0c;如何科学地为促销活动准备相应的计算资源就变成了困…

学画画软件app推荐_今日推荐:拍照摄影APP之稀缺软件篇

你也许热衷拍摄或喜欢摄影&#xff0c;那么日常的拍摄主要的工具离不开手机&#xff0c;好的拍照摄影APP当然也必不可少。一个好的拍照软件更加重要&#xff0c;有时候市面上常用的拍照软件不能满足你特殊的拍摄手法&#xff0c;经常需要重新编辑或修改才能达到效果&#xff0c…

五大数据库理念,读懂亚马逊云科技的数据库布局

1970 年&#xff0c;关系型数据库之父 E.F.Codd 发表《用于大型共享数据库的关系数据模型》论文&#xff0c;正式拉开数据库技术发展序幕。以 Oracle、DB2、SQL Server 为代表的三大商业数据库产品独占鳌头&#xff0c;随后涌现出 MySQL、PostgreSQL 等为代表的开源数据库 &…