Blue/Green Deployment(蓝绿部署/蓝绿发布)详解

  1. 蓝绿部署的目的:减少发布时的中断时间、能够快速撤回发布。
    通俗来说就是在不停老版本服务情况下,部署新版本然后进行测试,确认OK,将流量切到新版本,然后老版本同时也升级到新版本。

    It’s basically a technique for releasing your application in a
    predictable manner with an goal of reducing any downtime associated
    with a release. It’s a quick way to prime your app before releasing,
    and also quickly roll back if you find issues.

  2. 蓝绿部署的特点:
    蓝绿部署无需停机,并且风险较小。

  3. 蓝绿部署的原理

    蓝绿部署原理很简单,就是通过冗余来解决问题。
    项目最初没有任何系统故没有蓝绿之分。第一套系统开发完成,直接上线,这个过程只有一个系统,也没有蓝绿之分。后来,开发了新版本,要用新版本替换线上的旧版本,在线上的系统之外,搭建了一个使用新版本代码的全新系统。 这时候,一共就有两套系统(蓝绿配置)在运行。
    通常生产环境需要两套系统(蓝绿配置),一组是active的生产环境即对外提供服务的老系统配置(绿配置),一组是inactive的配置(蓝配置)。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。

  4. 蓝绿部署的过程

    4.1 初始状态:

    部署服务版本A的应用,用户访问的时候,所有外部请求的流量都在这个A服务版本即绿色配置(active)上

    4.2 部署服务版本B的应用:

    服务版本B的代码与服务版本A不同(eg:新功能、Bug修复等)。当你想要升级到服务版本B,在即蓝色环境(inactive)中进行操作

    4.3将流量从服务版本A切换到服务版本B。

    4.4监测服务版本B 是否有故障和异常

    当确信对外提供服务的蓝色系统B工作正常,服务版本B成为新的active(绿配置),删除服务版本A上正在使用的资源(例如实例)服务版本A成为新的inactive(蓝配置)用于部署下一个蓝色系统。如果运行出现了问题,可以通过负载均衡器指向快速回滚到之前的绿色环境。

  5. 蓝绿部署的优点

    5.1 在蓝绿部署过程中无需停机,老版本的状态不受影响,应用始终在线,风险较小。

    5.2 可以始终很放心的去部署not active环境,因为并没有修改绿色系统老版本的任何内容,如果出错并不影响生产环境的服务。

    5.3 出现问题,可以在非常短的时间内切换回绿色系统,就完成了回滚。只要老版本的资源不被删除,理论上,可以在任何时间回滚到老版本。

  6. 蓝绿部署的缺点

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

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

    6.3 冗余产生额外维护、配置的成本,以及服务器本身运行的开销。

  7. 蓝绿部署的注意事项

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

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

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

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

DevOps之不中断服务的蓝绿部署相关推荐

  1. 微服务下蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别...

    更多内容关注微信公众号:fullstack888 在有关微服务.DevOps.Cloud-native的迭代过程中,不可避免的需要"上线",上线就需要部署,需要部署就意味着有修改, ...

  2. Kong网关之蓝绿部署和金丝雀发布

    蓝绿部署 使用upstream,可以轻松地为服务编排蓝绿部署. 设置"蓝色"环境,运行地址服务的版本v1: # create an upstream $ curl -X POST ...

  3. 服务更新发布方式------“金丝雀、滚动更新、蓝绿部署”

    在一般情况下,升级服务器端应用,需要将应用源码或程序包上传到服务器,然后停止掉老版本服务,再启动新版本.但是这种简单的发布方式存在两个问题,一方面,在新版本升级过程中,服务是暂时中断的,另一方面,如果 ...

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

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

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

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

  6. 实战演示k8s部署go服务,实现滚动更新、重新创建、蓝绿部署、金丝雀发布

    1 前言 本文主要实战演示k8s部署go服务,实现滚动更新.重新创建.蓝绿部署.金丝雀发布 2 go服务镜像准备 2.1 初始化项目 cd /Users/flying/Dev/Go/go-lesson ...

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

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

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

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

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

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

最新文章

  1. SQLServer之DEFAULT约束
  2. 从员工的离职时间,就能看出离职原因
  3. 牛客 数素数 (20)
  4. BootStrap之前奏响应式布局
  5. 【 CodeForces - 864B】Polycarp and Letters(水题,字符串,有坑)
  6. mysql中的double类型_MySQL中float、double、decimal三个浮点类型的区别与总结!
  7. 什么叫做石英表_什么是石英表 石英表是什么意思
  8. 漫画:什么是 “模因” ?
  9. bzoj1588 营业额统计
  10. 数据结构基础——城市链表
  11. 学习笔记-OS - Exploits
  12. 数据用什么挖?数据挖掘常用工具分享
  13. flac格式转mp3
  14. ONF推出第二版Atrium 获OpenDaylight支持
  15. 全新解密域名防红系统源码,支持分站
  16. 数字语音信号处理学习笔记——语音信号的数字模型(1)
  17. P1456 Monkey King 左偏树模板题
  18. exec函数族的基本用法
  19. 标准引领市场:四方光电参编《便携式甲醛检测仪》团体标准
  20. php下拉框css样式,纯CSS实现的下拉菜单

热门文章

  1. S-AES的加密与解密
  2. 2021Java面经:最便宜java培训机构
  3. 光伏mppt扰动观察法仿真,matlab2018a
  4. 京东API—获取京东商品详情
  5. 批量清空数码照片中的相机设备型号、镜头型号、相机快门次数等拍摄数据
  6. 多系统如何共享蓝牙设备?
  7. sqlzoo-day7
  8. 国际网页短信系统平台搭建后台功能篇|移讯云短信系统
  9. cron表达式入门_Sourcehunt:Cron管理,Hackathon入门,PHP-GUI…
  10. String的一些方法