点击关注公众号,回复“1024”获取2TB学习资源!

在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。目前有很多部署发布的技术, 这儿将常见的做一个总结。

上面所说难免有些抽象, 举一个情景例子, 加入你是微博项目负责人员, 现在新版本较原来的老版本有很大的改变, 这设计到服务架构、前端UI等等, 经过测试功能没有障碍, 那么这时候如何让用户切换到新的版本呢?

显而易见, 第一次发布的应用是没有所谓的这个问题的, 这种如何发布的思考只会出现在后面的版本迭代中。

蓝绿发布

蓝绿部署中,一共有两套系统:一套是正在提供服务系统(也就是上面说的旧版),标记为“绿色”;另一套是准备发布的系统,标记为“蓝色”。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。正在对外提供服务的老系统是绿色系统,新部署的系统是蓝色系统。

蓝色系统不对外提供服务,用来做啥?

用来做发布前测试,测试过程中发现任何问题,可以直接在蓝色系统上修改,不干扰用户正在使用的系统。

蓝色系统经过反复的测试、修改、验证,确定达到上线标准之后,直接将用户切换到蓝色系统, 切换后的一段时间内,依旧是蓝绿两套系统并存,但是用户访问的已经是蓝色系统。这段时间内观察蓝色系统(新系统)工作状态,如果出现问题,直接切换回绿色系统。

当确信对外提供服务的蓝色系统工作正常,不对外提供服务的绿色系统已经不再需要的时候,蓝色系统正式成为对外提供服务系统,成为新的绿色系统。原先的绿色系统可以销毁,将资源释放出来,用于部署下一个蓝色系统。

蓝绿发布特点
  • 蓝绿部署的目的是减少发布时的中断时间、能够快速撤回发布。

  • 两套系统没有耦合的时候才能百分百保证不干扰

蓝绿发布注意事项

蓝绿部署只是上线策略中的一种,它不是可以应对所有情况的万能方案。蓝绿部署能够简单快捷实施的前提假设是目标系统是非常内聚的,如果目标系统相当复杂,那么如何切换、两套系统的数据是否需要以及如何同步等,都需要仔细考虑。

当你切换到蓝色环境时,需要妥当处理未完成的业务和新的业务。如果你的数据库后端无法处理,会是一个比较麻烦的问题;

  • 可能会出现需要同时处理“微服务架构应用”和“传统架构应用”的情况,如果在蓝绿部署中协调不好这两者,还是有可能会导致服务停止。

  • 需要提前考虑数据库与应用部署同步迁移 /回滚的问题。

  • 蓝绿部署需要有基础设施支持。

  • 在非隔离基础架构( VM 、 Docker 等)上执行蓝绿部署,蓝色环境和绿色环境有被摧毁的风险。

滚动发布

一般是取出一个或者多个服务器停止服务,执行更新,并重新将其投入使用。周而复始,直到集群中所有的实例都更新成新版本。

发布流程:

相对于蓝绿发布需要一套完备的机器不同, 滚动发布只需要一台机器(这儿这是为了理解, 实际可能是多台), 我们只需要将部分功能部署在这台机器上, 然后去替换正在运行的机器, 如上图, 将更新后的功能部署在Server1 上, 然后Server1去替换正在运行的Server, 替换下来的物理机又可以继续部署Server2的新版本, 然后去替换正在工作的Server2 , 以此类推, 直到替换完所有的服务器, 至此 ,服务更新完成。

滚动发布特点
  • 这种部署方式相对于蓝绿部署,更加节约资源——它不需要运行两个集群、两倍的实例数。我们可以部分部署,例如每次只取出集群的20%进行升级。

  • 回滚困难

滚动发布注意事项
  • 滚动发布没有一个确定可行的环境。使用蓝绿部署,我们能够清晰地知道老版本是可行的,而使用滚动发布,我们无法确定。

  • 修改了现有的环境。

  • 回滚困难。举个例子,在某一次发布中,我们需要更新100个实例,每次更新10个实例,每次部署需要5分钟。当滚动发布到第80个实例时,发现了问题,需要回滚,这个回滚却是一个痛苦,并且漫长的过程。

  • 有的时候,我们还可能对系统进行动态伸缩,如果部署期间,系统自动扩容/缩容了,我们还需判断到底哪个节点使用的是哪个代码。尽管有一些自动化的运维工具,但是依然令人心惊胆战。

  • 因为是逐步更新,那么我们在上线代码的时候,就会短暂出现新老版本不一致的情况,如果对上线要求较高的场景,那么就需要考虑如何做好兼容的问题。

灰度发布

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

具体到服务器上, 实际操作中还可以做更多控制,譬如说,给最初更新的10台服务器设置较低的权重、控制发送给这10台服务器的请求数,然后逐渐提高权重、增加请求数。一种平滑过渡的思路, 这个控制叫做“流量切分”。

17世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;而当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为“瓦斯检测指标”,以便在危险状况下紧急撤离。

过程
  • 准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件。

  • 将“金丝雀”服务器部署进服务器中, 测试。

  • 从负载均衡列表中移除掉“金丝雀”服务器。

  • 升级“金丝雀”应用(排掉原有流量并进行部署)。

  • 对应用进行自动化测试。

  • 将“金丝雀”服务器重新添加到负载均衡列表中(连通性和健康检查)。

  • 如果“金丝雀”在线使用测试成功,升级剩余的其他服务器。(否则就回滚)

A/B测试

A/B测试和蓝绿发布、滚动发布以及金丝雀发布,完全是两回事。

蓝绿发布、滚动发布和金丝雀是发布策略,目标是确保新上线的系统稳定,关注的是新系统的BUG、隐患。

A/B测试是效果测试,同一时间有多个版本的服务对外服务,这些服务都是经过足够测试,达到了上线标准的服务,有差异但是没有新旧之分(它们上线时可能采用了蓝绿部署的方式)。

A/B测试关注的是不同版本的服务的实际效果,譬如说转化率、订单情况等。

A/B测试时,线上同时运行多个版本的服务,这些服务通常会有一些体验上的差异,譬如说页面样式、颜色、操作流程不同。相关人员通过分析各个版本服务的实际效果,选出效果最好的版本。

作者:等不到的口琴 

链接:cnblogs.com/Courage129/p/14498788.html

推荐阅读 点击标题可跳转

MySQL 这样写 UPDATE 语句?恭喜你,被开除了!

成功恢复 Linux 系统中已删除的文件

Win11 被 Linux 社区炮轰!背叛了用户、不要安装

雷军做程序员时写的博客,很强大!

Nginx+keepalived高可用,防盗链及动静分离配置

一入职,就遇上服务器变矿机!差点滚蛋...

Prometheus+Grafana 打造高逼格监控平台!

Linux 命令 su 和 sudo 的区别

手把手教你实现一个抽奖系统(Java版)

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。

随手在看、转发是最大的支持!

微服务部署之蓝绿发布、滚动发布、灰度发布区别与特点相关推荐

  1. 微服务部署:蓝绿部署、滚动部署、灰度发布等部署方案对比与总结

    在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险. 目前有很多用于部署的技术,有的简单,有的复杂:有的得停机,有的不需要停机 ...

  2. 微服务部署:蓝绿部署、滚动部署、灰度发布

    在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险. 目前有很多用于部署的技术,有的简单,有的复杂:有的得停机,有的不需要停机 ...

  3. 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布

    在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险. 目前有很多用于部署的技术,有的简单,有的复杂:有的得停机,有的不需要停机 ...

  4. 微服务部署:蓝绿部署、滚动部署、灰度部署(金丝雀部署)、功能开关发布

    简介 产品或项目不可能一步到位,一次性推向用户,故而有版本的存在.在app版本更新或者项目迭代的过程中,不可避免需要发布.发布就是部署:部署就是修改:修改则意味着风险. 目前有很多用于部署的技术,本文 ...

  5. 微服务部署:蓝绿发布、滚动发布、灰度发布、金丝雀发布

    在项目迭代的过程中,不可避免需要上线.上线对应着部署,或者重新部署:部署对应着修改,修改则意味着风险. 1.蓝绿发布(Blue/Green Deployment) ①定义 蓝绿部署是不停老版本,部署新 ...

  6. 微服务部署:蓝绿部署、滚动部署、灰度部署(金丝雀部署)

    简介 产品或者项目不可能一步到位,一次性推向用户,故而有版本的存在.在app版本更新或者项目迭代的过程中,不可避免需要发布.发布就是部署/重新部署:部署就是修改:修改则意味着风险. 目前有很多用于部署 ...

  7. 阿里云Kuberneters微服务部署案例

    3. 如何安装Docker Desktop for Mac 如何安装Docker Desktop for Mac 4. SpringCloud微服务应用 SpringCloud微服务应用 5. Kub ...

  8. Kubernetes_部署_k8s的四种部署策略(滚动更新、重新创建、金丝雀部署、蓝绿部署)

    文章目录 一.前言 二.滚动更新 2.1 滚动更新 2.2 实践 2.2.1 新建两个springboot项目,生成两个镜像 2.2.2 kubectl apply启动 2.2.3 将版本修改为v2. ...

  9. git灰度发布版本_灰度发布/蓝绿发布_部署到Kubernetes_选择部署方式_用户指南_CodePipeline - 阿里云...

    蓝绿发布 蓝绿部署是不停老版本,部署新版本然后进行测试,确认OK后将流量逐步切到新版本.蓝绿部署无需停机,并且风险较小. 示例 本例是一个 nginx 应用,包含一个 deployment. serv ...

  10. 使用阿里云容器服务Kubernetes实现蓝绿发布功能

    背景 在发布应用时,经常需要先上线一个新版本,用较小的流量去测试一下该新版本的可用性.但是Kubernetes的ingress resource 并没有实现流量控制与切分的功能,导致针对同一个域名下的 ...

最新文章

  1. vivado----fpga硬件调试 (三)----mark_debug
  2. JDK源码学习-基础
  3. python安装pyqt5第三方_搭建pyqt5开发环境(python3+pycharm2019+pyqt5)
  4. 30个Python极简代码,10分钟get常用技巧!
  5. new关键字对类成员的阻断
  6. 【转】Mysql行转换为列
  7. python中re怎么念_Python中re(正则表达式)模块学习
  8. LINUX设备驱动模型之class
  9. 如何获得鼠标选中的值
  10. 根据IP地址查询物理位置(IP地址定位库)并且查询当前地址的天气信息(中国气象网)
  11. 使用dig命令解析域名
  12. 换头软件测试,抖音女大十八变换脸测试
  13. FileUpload类别FileUpload1.FileName和FileUpload1.PostedFile.FileName差异
  14. 正则表达式 REGEX-Regular Expression
  15. 图普科技李麟|当新零售遇上人工智能
  16. 根据显卡版本升级更新cuda
  17. 数值计算方法绪论笔记(误差,有效数字)
  18. HTML表单控件之特殊控件
  19. BZOJ 1115: [POI2009]石子游戏Kam
  20. 王佩丰Excel24讲_第2讲:excel单元格格式设置

热门文章

  1. 华为P7安装Linux,华为P7插卡步骤图解 华为P7电信/移动/联通版手机sim卡安装使用教程...
  2. access9磅字体是多_字体大小(几号-几磅)
  3. 【NLP】Transformer框架原理详解-1
  4. c语言变量报存在bss段,浅谈c语言代码段 数据段 bss段
  5. 自然语言处理总复习(五)—— 词义消歧
  6. GPS定位准确度CEP、RMS
  7. SAN海量存储解决方案
  8. 林炳文Evankaka原创作品之mybatis的增删改查简单操作
  9. 定价过程的16个字段
  10. 如何打造超大规模的智慧交通仿真环境?核心精华都在这里 | 51TECH