常见的部署类型(停机部署、蓝绿部署、滚动部署、灰度部署、AB测试等)

2023-11-15

目录

一、常见部署类型

二、停机部署

三、蓝绿部署

四、滚动部署

五、灰度部署(金丝雀)

六、AB测试


一、常见部署类型

停机部署(Big Bang / Recreate): 把现有版本的服务停机,然后部署新的版本。

蓝绿部署(Blue/Green /Stage):部署好新版本后,把流量从老服务那边切过来。

滚动部署(Rolling Update / Ramped): 一点一点地升级现有的服务。

灰度部署(Canary):把一部分用户切到新版本上来,然后看一下有没有问题。如果没有问题就继续扩大升级,直到全部升级完成。

AB 测试(A/B Testing):同时上线两个版本,然后做相关的比较。

二、停机部署

停机部署其实是最简单粗暴的方式,就是简单地把现有版本的服务停机,然后部署新的版本。有时候,我们不得不使用这样的方式来部署或升级多个服务。比如,新版本中的服务使用到了和老版本完全不兼容的数据表设计。这个时候,我们对生产有两个变更,一个是数据库,另一个是服务,而且新老版本互不兼容,所以只能使用停机部署的方式。

优势:在部署过程中不会出现新老版本同时在线的情况,所有状态完全一致。

弱势:停机部署主要是为了新版本的一致性问题。这种方式的问题是会停机,对用户的影响很大。所以,一般来说,这种部署方式需要事前挂公告,选择一个用户访问少的时间段来做。

三、蓝绿部署

其在生产线上部署相同数量的新服务,然后当新的服务测试确认 OK 后,把流量切到新的服务这边来。蓝绿部署比停机部署好的地方是,它无需停机。

这种一般都有多套环境,然后可以支持切换。

优势:优点是没有停机,实时发布和升级,也避免有新旧版本同时在线的问题

弱势:这种部署的问题就是有点浪费,因为需要使用双倍的资源(不过,这只是在物理机时代,在云计算时代没事,因为虚拟机部署完就可以释放了),

四、滚动部署

滚动部署策略是指通过逐个替换应用的所有实例,来缓慢发布应用的一个新版本。通常过程如下:在负载调度后有个版本 A 的应用实例池,一个版本 B 的实例部署成功,可以响应请求时,该实例被加入到池中。然后,版本 A 的一个实例从池中删除并下线。

这种部署方式直接对现有的服务进行升级,虽然便于操作,而且在缓慢地更新的过程中,对于有状态的服务也是比较友好的,状态可以在更新中慢慢重建起来。但是,这种部署的问题也是比较多的。

  存在问题:

  • 在发布过程中,会出现新老两个版本同时在线的情况,同一用户的请求可能在新老版中切换而导致问题。

  • 在整个过程中,生产环境处于一个新老更替的中间状态,如果有问题要回滚就有点麻烦了。

  • 如果在升级过程中,需要做别的一些运维工作,我们还要判断哪些结点是老版本的,哪些结点是新版本的。这太痛苦了。

  • 因为新老版本的代码同时在线,所以其依赖的服务需要同时处理两个版本的请求,这可能会带来兼容性问题。

  • 无法让流量在新老版本中切换。

五、灰度部署(金丝雀)

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

灰度发布形式一,采用控制比例流量的方式进行切换。比如50%比例导流到旧程序,50%导流到新程序。

灰度发布形式二,通过控制使用方,让一部分人使用新系统,一部分人使用旧系统,然后逐渐放开,直到扩大到所有人。

改部署方式大多数用于缺少足够测试,或者缺少可靠测试,或者对新版本的稳定性缺乏信心的情况下。把一部分用户切到新版上来,然后看一下有没有问题。如果没有问题就继续扩大升级,直到全部升级完成。

六、AB测试

AB 测试是同时上线两个版本,然后做相关的比较。它是用来测试应用功能表现的方法,例如可用性、受欢迎程度、可见性等。

蓝绿部署是为了不停机,灰度部署是对新版本的质量没信心。而 AB 测试是对新版的功能没信心。注意,一个是质量,一个是功能。

AB测试需要在生产线上发布两个版本,拉一部分用户过来当小白鼠,然后通过科学的观测得出来相关的结论。AB 测试旨在通过科学的实验设计、采样样本代表性、流量分割与小流量测试等方式来获得具有代表性的实验结论,并确信该结论在推广到全部流量时可信

我们可以看到 AB 测试,其包含了灰度发布的功能。也就是说,我们的观测如果只是观测有没有 bug,那就是灰度发布了。当然,如果我们复杂一点,要观测用户的一些数据指标,这完全也可能做成自动化的,如果新版本数据好,就自动化地切一点流量过来,如果不行,就换一批用户(样本)再试试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常见的部署类型(停机部署、蓝绿部署、滚动部署、灰度部署、AB测试等) 的相关文章

随机推荐

  • TCP三次握手如果使用二次握手代替则会出现的问题

    简述 第一次握手 发送SYN报文 传达信息 你好 我想建立连接 第二次握手 回传SYN ACK报文 传达信息 好的 可以建立链接 第三次握手 回传ACK报文 传到信息 好的 我知道了 那我们连接 然后就建立连接了 在发送报文之前各方都要确认
  • Java基础——Math类、Random类、System类

    目录 1 Math类 2 Random类 3 System类 1 Math类 Math 类包含用于执行基本数学运算的方法 如初等指数 对数 平方根和三角函数 成员变量 public static final double E 自然底数 pu
  • java设计模式——代理模式(Proxy Pattern)

    概述 在某些情况下 一个客户不想或者不能直接引用一个对 象 此时可以通过一个称之为 代理 的第三者来实现 间接引用 代理对象可以在客户端和目标对象之间起到 中介的作用 并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外
  • 在vscode中创建vue自定义模板

    首先找到用户代码片段的位置 https img blog csdnimg cn 20201105094443610 png pic center 在输入框中输入vue 然后选择vue json或vue 打开之后是这样的 这些注释就是介绍怎么
  • SQL拼接存在的误区

    这两天修复一个SQL拼接的问题 给自己挖了个坑 对于指定的字符串作为查询条件时 当在SQL语句中使用单引号包裹查询条件时 需要注意以下几点 1 SQL注入攻击 如果接受外部输入的值直接拼接到SQL语句中 在查询条件中包含特殊字符如单引号或双
  • Java内部类总结

    Java内部类其实在J2EE编程中使用较少 不过在窗口应用编程中特别常见 主要用来事件的处理 其实 做非GUI编程 内部类完全可以不用 内部类的声明 访问控制等于外部类有所不同 要灵活使用内部类来编写程序 还是有相当难度的 Java发明了这
  • Web后台快速开发框架

    Web后台快速开发框架 Coldairarrow 目录 目录 第1章 目录 1 第2章 简介 3 第3章 基础准备 4 3 1 开发环境要求 4 3 2 基础数据库构建 4 3 3 运行 5 第4章 详细教程 6 4 1 代码架构 6 4
  • PC: 市场寒冬剖析

    市场调研机构Canalys数据显示 今年一季度 中国市场整体PC出货量同比下降24 至890万台 已是连续第五个季度下跌 今年截至618结束 都没有一家主要的PC厂商愿意发战报 PC市场怎样走出寒冬 谈谈你的理解和看法 PC 一 2022年
  • Rxjava学习(一)简单分析Rxjava调用流程

    本篇以Rxjava最简短的调用流程为例来分析 下面是要分析的实例代码 Observable create new ObservableOnSubscribe
  • 1140 石子游戏 II

    题目描述 亚历克斯和李继续他们的石子游戏 许多堆石子 排成一行 每堆都有正整数颗石子 piles i 游戏以谁手中的石子最多来决出胜负 亚历克斯和李轮流进行 亚历克斯先开始 最初 M 1 在每个玩家的回合中 该玩家可以拿走剩下的 前 X 堆
  • C++中传送函数指针

    随时随地阅读更多技术实战干货 获取项目源码 学习资料 请关注源代码社区公众号 ydmsq666 函数指针是一种非常好的类型 因此 可以编写一个函数 它的一个参数是函数指针 然后 在 外部 函数使用其函数指针参数时 就间接地调用在调用函数时对
  • vue路由

    路由 理解 一个路由 route 就是一组映射关系 key value 多个路由需要路由器 router 进行管理 前端路由 key是路径 value是组件 路由标签
  • 基于共享内存 实现Python 和c++ 传输图片

    需求 c 将图片写入共享内存 python读取 将c 写的共享内存的操作封装为一个so库 c 和python共同调用这个库 便于双方的操作 省去信号量的管理操作 一 c 写入端 int main int argc char argv Sha
  • GDB的使用方法

    GDB的使用方法 一 GDB的静态调试启动方法 1 当需要在命令行通过gdb来启动可执行程序的时候 可使用一下命令 gdb lt 可执行程序名 gt 这个时候gdb会加载可执行程序的符号表和堆栈 并为启动程序作好准备 接下来 需要设置可执行
  • Knight Moves_dfs_2018_3_10

    A friend of you is doing research on the Traveling Knight Problem TKP where you are to find the shortest closed tour of
  • Golang 中实现注解功能的思路分析

    文章目录 注解的作用 一些实现注解的开源 Golang 工程 Golang 中实现注解的基本思路 第一步 源码词法分析 第二步 代码生成 第三步 自动执行 番外 Golang 中一种代替注解的方案 注解的作用 提到注解 需要短暂的说明其前世
  • 开源协议(OSS License)详解

    表1 各种协议代表软件 BSD 也称修正BSD FreeBSD NetBSD OpenBSD MPL Firefox Thunderbird GPL Linuxkernel GIMP LGPL GTK OpenOffice org 表2 许
  • Win10上配置Paddle的PARL运行环境

    安装是根据B站百度强化学习视频中的方法 在Windows10环境上配置PARL 由于版本不匹配问题掉过坑 耽误了些时间 在此记录下 避免后续入坑 配置过程中从CSDN上也找到了一些有参考意义的文章 一并记录 方便学习 推荐好文强化学习PAR
  • 【1.9w字】彻底搞懂HTTP知识的面试题,建议精读收藏

    我很早之前写过一篇关于 HTTP 和 HTTPS 的文章 但对于 HTTPS 介绍还不够详细 只讲了比较基础的部分 所以这次我们再来深入一下 HTTPS 用实战抓包的方式 带大家再来窥探一次 HTTPS 如何理解 URI URI 全称为 U
  • 常见的部署类型(停机部署、蓝绿部署、滚动部署、灰度部署、AB测试等)

    目录 一 常见部署类型 二 停机部署 三 蓝绿部署 四 滚动部署 五 灰度部署 金丝雀 六 AB测试 一 常见部署类型 停机部署 Big Bang Recreate 把现有版本的服务停机 然后部署新的版本 蓝绿部署 Blue Green S