运维发布系统详谈

蓝绿发布
概念:
蓝绿部署是不停老版本,部署新版本然后进行测试。确认OK后将流量切到新版本,然后老版本同时也升级到新版本

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

部署过程

部署版本 1 的应用(初始的状态)
所有外部请求的流量都打到这个版本上。

部署版本 2 的应用
版本 2 的代码与版本 1 不同(新功能、Bug修复等)。

将流量从版本 1 切换到版本 2。

如版本 2 测试正常,就删除版本 1 正在使用的资源(例如实例),从此正式用版本 2。
小结

从过程不难发现,在部署的过程中,我们的应用始终在线。并且新版本上线的过程中,并没有修改老版本的任何内容,在部署期间,老版本的状态不受影响,这样风险很小。并且只要老版本的资源不被删除,理论上,我们可以在任何时间回滚到老版本。

蓝绿发布的注意事项

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

可能会出现需要同时处理微服务架构应用和传统架构应用的情况,如果在蓝绿部署中协调不好这两者,还是有可能会导致服务停止。
需要提前考虑数据库与应用部署同步迁移/回滚的问题。
蓝绿部署需要有基础设施支持。
在非隔离基础架构( VM 、 Docker 等)上执行蓝绿部署,蓝色环境和绿色环境有被摧毁的风险。

优势和不足

优势
升级切换和回退速度非常快。

不足
切换是全量的,如果 V2 版本有问题,则对用户体验有直接影响。
需要两倍机器资源。

适用场合

对用户体验有一定容忍度的场景。
机器资源有富余或者可以按需分配(AWS 云,或自建容器云)

灰度发布

定义

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB Test 就是一种灰度发布方式,让一部分用户继续用 A,一部分用户开始用 B,如果用户对 B 没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到 B 上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

灰度发布结构图

A/B Testing

A/B 测试是用来测试应用功能表现的方法,例如可用性、受欢迎程度、可见性等等。 A/B 测试通常用在应用的前端上,不过当然需要后端来支持。

A/B 测试与蓝绿部署的区别在于, A/B 测试目的在于通过科学的实验设计、采样样本代表性、流量分割与小流量测试等方式来获得具有代表性的实验结论,并确信该结论在推广到全部流量可信;蓝绿部署的目的是安全稳定地发布新版本应用,并在必要时回滚。

  1. 金丝雀发布

我们平常所说的金丝雀部署也是灰度发布的一种方式,在原有版本可用的情况下,同时部署一个新版本应用作为「金丝雀」服务器来测试新版本的性能和表现,以保障整体系统稳定的情况下,尽早发现、调整问题。

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

灰度发布/金丝雀发布由以下几个步骤组成:

准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件。
从负载均衡列表中移除掉「金丝雀」服务器。
升级「金丝雀」应用(排掉原有流量并进行部署)。
对应用进行自动化测试。
将「金丝雀」服务器重新添加到负载均衡列表中(连通性和健康检查)。
如果「金丝雀」在线使用测试成功,升级剩余的其他服务器(否则就回滚)。
除此之外灰度发布还可以设置路由权重,动态调整不同的权重来进行新老版本的验证。

  1. 优势和不足

优势
用户体验影响小,灰度发布过程出现问题只影响少量用户。

不足
发布自动化程度不够,发布期间可引发服务中断。

滚动发布

在金丝雀发布基础上的进一步优化改进,是一种自动化程度较高的发布方式,用户体验比较平滑,是目前成熟型技术组织所采用的主流发布方式。

  1. 定义

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

  1. 特点

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

  1. 部署过程

滚动式发布一般先发 1 台,或者一个小比例,如 2% 服务器,主要做流量验证用,类似金丝雀 (Canary) 测试。
滚动式发布需要比较复杂的发布工具和智能 LB,支持平滑的版本替换和流量拉入拉出。
每次发布时,先将老版本 V1 流量从 LB 上摘除,然后清除老版本,发新版本 V2,再将 LB 流量接入新版本。这样可以尽量保证用户体验不受影响。
一次滚动式发布一般由若干个发布批次组成,每批的数量一般是可以配置的(可以通过发布模板定义)。例如第一批 1 台(金丝雀),第二批 10%,第三批 50%,第四批 100%。每个批次之间留观察间隔,通过手工验证或监控反馈确保没有问题再发下一批次,所以总体上滚动式发布过程是比较缓慢的 (其中金丝雀的时间一般会比后续批次更长,比如金丝雀 10 分钟,后续间隔 2 分钟)。
回退是发布的逆过程,将新版本流量从 LB 上摘除,清除新版本,发老版本,再将 LB 流量接入老版本。和发布过程一样,回退过程一般也比较慢的。

  1. 优势和不足

优势
用户体验影响小,体验较平滑。

不足
发布和回退时间比较缓慢。
发布工具比较复杂,LB 需要平滑的流量摘除和拉入能力。

上述都是偏传统的发布方式,能覆盖大部分应用发布场景。针对一些关键新功能的上线发布,或者一些特定的场景,还有一些特殊的发布方式。

功能开关发布

  1. 部署过程

功能开关发布需要一个配置中心或者开关中心这样的服务支持,例如携程的 Apollo 配置中心或者开源的 FF4J,这些都支持开关发布。业界还有专门的功能开关 SaaS 服务,例如 LaunchDarkly。通过配置中心,运维或研发人员可以在运行期动态配置功能开关的值。当然,功能开关发布只是配置中心的一种使用场景,配置中心还能支持其它很多动态配置场景。
功能开关服务一般提供客户端 SDK,方便开发人员集成。在运行期,客户端 SDK 会同步最新的开关值,技术实现有推方式 (push),也有拉方式 (pull),或者推拉结合方式。
新功能(V2 new feature)和老功能(V1 old feature)住在同一套代码中,新功能隐藏在开关后面,如果开关没有打开,则走老代码逻辑,如果开关打开,则走新代码逻辑。技术实现上可以理解为一个简单的 if/else 逻辑。
应用上线后,开关先不打开,然后运维或研发人员通过开关中心打开新功能,经过流量验证新功能没有问题,则发布完成;如果有问题,则随时可以通过开关中心切回老功能逻辑。

  1. 优势和不足

优势
升级切换和回退速度非常快。
相对于复杂的发布工具,实施比较简单,成本相对低廉。
研发能够灵活定制发布逻辑,支持 DevOps 自助发布。

不足
切换是全量的,如果 V2 版本有问题,则对用户体验有直接影响。
对代码有侵入,代码逻辑会变复杂,需要定期清理老版本逻辑,维护成本变高。

其他发布下次记录
系统运维工程师 李超

原文地址:http://blog.51cto.com/13120271/2156132

时间: 2024-10-28 21:58:12

运维发布系统详谈的相关文章

运维知识系统和分类

运维分类: 机房运维(负责设备上下架.巡检.报修.硬件监控) 基础设施运维(系统初始化.网络维护) 基础服务运维(内部DNS.负载均衡.系统监控.资产管理.运维平台)包含运维开发 系统运维(架构层面的分布式缓存.分布式文件系统.日志收集.环境规划(测试.开发.生产).架构设计.性能优化) 安全运维(整体的安全方案.规范.漏洞监测.安全防护等) 应用运维(业务熟悉.服务部署.业务部署.版本管理.灰度发布.应用监控) 监控运维(7*24运维值班.故障处理) 转自:https://www.unixho

ylbtech-KeFuYunWei(服务运维考核系统)-数据库设计

ylbtech-DatabaseDesgin:ylbtech-KeFuYunWei(服务运维考核系统)-数据库设计 DatabaseName:KEFUYUNWEI Model:Admin 用户后台管理数据设计 Type:管理软件 Url: 1.A,数据库关系图(Database Diagram) 返回顶部 1.B,数据库设计脚本(Database Design Script)返回顶部 use master go -- =======================================

Open-falcon运维监控系统——微信接口二次开发

1.Open-falcon运维监控系统简介 OpenFalcon是一款由小米运维团队从互联网公司的需求出发, 根据多年的运维经验,结合市面上使用的一些运维监控系统的使用经验和反馈,开发的一套企业级.高可用.可扩展的开源监控解决方案.简单了使用一下Open-falcon运维监控,结合使用过的zabbix,cacti,nagios来说,觉得有以下几个优点: 支持用户主动push,可以结合一些业务需求采集数据,同时也支持用户自定义的插件. 支持策略模板,模板继承和覆盖,多种告警方式,支持callbac

互联网模式的企业如何运维IT系统(一)

难.难.难,不少人都摇头,确实因为实际困难太多,不确定因素太多,用户访问的高峰期不好预测,用户的访问偏好要事后才能分析,突发新闻或事件或帖子让峰值突然出现,企业的资源设备有限,各软硬件的疲劳期不好预测,每个业务系统都对维护有高要求,有时只能顾一部分,遇到突发事件,各领导电话和指示不断等等,确实是一件不好干的活,今年刚过去的春节抢红包这个热点顺利通过,应该为这些节假日坚守岗位的运维人致敬,他们到底是怎么做的呢,看看事件整个过程:2015年微信红包,除夕摇一摇总次数110亿次,峰值1400万次/秒,

运维及系统架构的两大主题

1数据保护 项目经验 全网数据备份解决方案 数据库数据 图片资源等 程序 运维配置文件 其他相关的 数据库数据 主从(物理故障) 实时同步 半同步插件 事务提交 百度案例 M1-S1(不提供服务 专做备份 实时同步brbd 半同步插件 事务提交) S2 图片资源等 1每晚全量备份 1T 增量 01.rsync 小文件比对时间很长 02.brbd浪费资源 备节点不可用 03.按时间增量 201404 201405 04.更新资源写LOG  就增量了  一边写LOG  另一边通过RSYNC同步具体的

一套准备开源的运维部署系统

利用空余时间,前前后后花了20多天的时候写了这套系统,因为之前在前公司一个人写了一套轻量级的部署系统(主要是方便开发部署代码),解放运维劳动力.所以在原来底层功能上新加了一些功能,然后换了前端模板,之前的前端模板虽然也是bootstrap拼接的,但是感觉太丑了.下面是部署系统部分功能截图. 用户管理系统: 简单CMDB系统: Ansible部署模块: 代码部署: 全局配置: 计划任务:

运维监控系统 PIGOSS BSM 为银行运维监控提供全力保障

IT运维服务在银行信息化建设和运行中的核心地位,而定量.实时的交易数据.事件和性能指标成为判断信息系统安全运行状态的主要依据.因此,进行银行业IT运维监控指标体系研究与构建,建立IT统一运维监控指标体系至关重要. 从信息系统期理论出发,信息系统大致分为规划与设计.开发与测试(或购买).实施.运维管理与持续改进五个阶段.而前三个阶段从时间角度看,只占整个周期的20%,其余时间基本上是对其进行运行维护.这就决定了IT运维服务在银行信息化建设和运行中的核心地位,而定量.实时的交易数据.事件和性能指标成

运维流程系统

一 图论概述 1 图的分类 1 无向图 图 graph由顶点和边组成,顶点的又穷非空集合为V,边的集合为E,记做G(V,E)顶点vertex,数据元素的集合,顶点的集合,又穷非空,边edge,数据元素关系的集合,顶点关系的集合,可以为空,边分为有向和无向两种 无向边记做(A,B),或者(B,A),使用小括号 无向图,记做undirected Graph 无向边的边构成的图,G=(V,E),V={A,B,C,D},E={(A,B),(A,C),(B,C),(B,D),(C,D)} 2 有向图 有向

互联网模式的企业如何运维IT系统(二)

从上面例子可以看出互联网企业的运维特点: 1.IT运维与IT运营不可分,是以创意或服务为导向,以运营为基础的运维: 2.需要团队或复合型人才: 3.强调资源有限原则下的优化与维护: 4.强调准备与预案: 5.强调快速诊断与解决问题: 6.分清层级,强调必要时候的重点保障. 互联网企业多数不像传统企业那样IT需求.软件开发.IT运维可以是三波人,互联网企业更像集团化作战,希望是一个完整的方式,从创意策划.到开发.运营和运维一条龙服务,当然也可以有第三方服务,但统一指挥,他的运维工作还是在"科学化.