DevOps之不中断服务的蓝绿部署
Blue/Green Deployment(蓝绿部署/蓝绿发布)详解
蓝绿部署的目的:减少发布时的中断时间、能够快速撤回发布。
通俗来说就是在不停老版本服务情况下,部署新版本然后进行测试,确认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.蓝绿部署的特点:
蓝绿部署无需停机,并且风险较小。蓝绿部署的原理:
蓝绿部署原理很简单,就是通过冗余来解决问题。
项目最初没有任何系统故没有蓝绿之分。第一套系统开发完成,直接上线,这个过程只有一个系统,也没有蓝绿之分。后来,开发了新版本,要用新版本替换线上的旧版本,在线上的系统之外,搭建了一个使用新版本代码的全新系统。 这时候,一共就有两套系统(蓝绿配置)在运行。
通常生产环境需要两套系统(蓝绿配置),一组是active的生产环境即对外提供服务的老系统配置(绿配置),一组是inactive的配置(蓝配置)。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。蓝绿部署的过程
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.1 在蓝绿部署过程中无需停机,老版本的状态不受影响,应用始终在线,风险较小。
5.2 可以始终很放心的去部署not active环境,因为并没有修改绿色系统老版本的任何内容,如果出错并不影响生产环境的服务。
5.3 出现问题,可以在非常短的时间内切换回绿色系统,就完成了回滚。只要老版本的资源不被删除,理论上,可以在任何时间回滚到老版本。
蓝绿部署的缺点:
6.1 当你切换到蓝色环境时,需要妥当处理未完成的业务和新的业务。如果你的数据库后端无法处理,会是一个比较麻烦的问题;
6.2 可能会出现需要同时处理“微服务架构应用”和“传统架构应用”的情况,如果在蓝绿部署中协调不好这两者,还是有可能会导致服务停止。
6.3 冗余产生额外维护、配置的成本,以及服务器本身运行的开销。
蓝绿部署的注意事项
7.1 需要提前考虑数据库与应用部署同步迁移 /回滚的问题。
7.2 蓝绿部署需要有基础设施支持。
7.3 在非隔离基础架构( VM 、 Docker 等)上执行蓝绿部署,蓝色环境和绿色环境有被摧毁的风险
小结
蓝绿部署只是上线策略中的一种,它不是可以应对所有情况的万能方案。
蓝绿部署能够简单快捷实施的前提假设是目标系统是非常内聚的,如果目标系统相当复杂,那么如何切换、两套系统的数据是否需要以及如何同步等,都需要仔细考虑。
DevOps之不中断服务的蓝绿部署相关推荐
- 微服务下蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别...
更多内容关注微信公众号:fullstack888 在有关微服务.DevOps.Cloud-native的迭代过程中,不可避免的需要"上线",上线就需要部署,需要部署就意味着有修改, ...
- Kong网关之蓝绿部署和金丝雀发布
蓝绿部署 使用upstream,可以轻松地为服务编排蓝绿部署. 设置"蓝色"环境,运行地址服务的版本v1: # create an upstream $ curl -X POST ...
- 服务更新发布方式------“金丝雀、滚动更新、蓝绿部署”
在一般情况下,升级服务器端应用,需要将应用源码或程序包上传到服务器,然后停止掉老版本服务,再启动新版本.但是这种简单的发布方式存在两个问题,一方面,在新版本升级过程中,服务是暂时中断的,另一方面,如果 ...
- 微服务部署:蓝绿部署、滚动部署、灰度部署(金丝雀部署)、功能开关发布
简介 产品或项目不可能一步到位,一次性推向用户,故而有版本的存在.在app版本更新或者项目迭代的过程中,不可避免需要发布.发布就是部署:部署就是修改:修改则意味着风险. 目前有很多用于部署的技术,本文 ...
- 微服务部署:蓝绿部署、滚动部署、灰度部署(金丝雀部署)
简介 产品或者项目不可能一步到位,一次性推向用户,故而有版本的存在.在app版本更新或者项目迭代的过程中,不可避免需要发布.发布就是部署/重新部署:部署就是修改:修改则意味着风险. 目前有很多用于部署 ...
- 实战演示k8s部署go服务,实现滚动更新、重新创建、蓝绿部署、金丝雀发布
1 前言 本文主要实战演示k8s部署go服务,实现滚动更新.重新创建.蓝绿部署.金丝雀发布 2 go服务镜像准备 2.1 初始化项目 cd /Users/flying/Dev/Go/go-lesson ...
- 微服务部署:蓝绿部署、滚动部署、灰度发布等部署方案对比与总结
在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险. 目前有很多用于部署的技术,有的简单,有的复杂:有的得停机,有的不需要停机 ...
- 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险. 目前有很多用于部署的技术,有的简单,有的复杂:有的得停机,有的不需要停机 ...
- 微服务部署:蓝绿部署、滚动部署、灰度发布
在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险. 目前有很多用于部署的技术,有的简单,有的复杂:有的得停机,有的不需要停机 ...
最新文章
- SQLServer之DEFAULT约束
- 从员工的离职时间,就能看出离职原因
- 牛客 数素数 (20)
- BootStrap之前奏响应式布局
- 【 CodeForces - 864B】Polycarp and Letters(水题,字符串,有坑)
- mysql中的double类型_MySQL中float、double、decimal三个浮点类型的区别与总结!
- 什么叫做石英表_什么是石英表 石英表是什么意思
- 漫画:什么是 “模因” ?
- bzoj1588 营业额统计
- 数据结构基础——城市链表
- 学习笔记-OS - Exploits
- 数据用什么挖?数据挖掘常用工具分享
- flac格式转mp3
- ONF推出第二版Atrium 获OpenDaylight支持
- 全新解密域名防红系统源码,支持分站
- 数字语音信号处理学习笔记——语音信号的数字模型(1)
- P1456 Monkey King 左偏树模板题
- exec函数族的基本用法
- 标准引领市场:四方光电参编《便携式甲醛检测仪》团体标准
- php下拉框css样式,纯CSS实现的下拉菜单