美文网首页OpsDevDevops
蓝绿部署、灰度发布、滚动发布

蓝绿部署、灰度发布、滚动发布

作者: 凯撒公猿 | 来源:发表于2019-05-30 12:01 被阅读12次

蓝绿部署

image.png

简单来说就是两套完整的集群,版本更新的时候:
1,路由没有介入的集群, 进行 code update
2,更新完成后,进行测试
3,测试验证OK后,通过路由切换到新版本集群,上线完成。

缺点

  1. 资源利用率太低
  2. 中小企业基本不会使用这种方式。成本太高

灰度发布/金丝雀发布

image.png

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。灰度发布是增量发布的一种类型,灰度发布是在原有版本可用的情况下,同时部署一个新版本应用作为“金丝雀”(金丝雀对瓦斯极敏感,矿井工人携带金丝雀,以便及时发发现危险),测试新版本的性能和表现,以保障整体系统稳定的情况下,尽早发现、调整问题。

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

  1. 准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件。
  2. 从负载均衡列表中移除掉“金丝雀”服务器。
  3. 升级“金丝雀”应用(排掉原有流量并进行部署)。
  4. 对应用进行自动化测试。
  5. 将“金丝雀”服务器重新添加到负载均衡列表中(连通性和健康检查)。
  6. 如果“金丝雀”在线使用测试成功,升级剩余的其他服务器。(否则就回滚)
    灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

灰度发布/金丝雀部署适用的场景:

  1. 不停止老版本,额外搞一套新版本,不同版本应用共存。
  2. 灰度发布中,常常按照用户设置路由权重,例如90%的用户维持使用老版本,10%的用户尝鲜新版本。
  3. 经常与A/B测试一起使用,用于测试选择多种方案。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。

滚动发布(rolling update)

滚动发布,一般是取出一个或者多个服务器停止服务,执行更新,并重新将其投入使用。周而复始,直到集群中所有的实例都更新成新版本。这种部署方式相对于蓝绿部署,更加节约资源——它不需要运行两个集群、两倍的实例数。我们可以部分部署,例如每次只取出集群的20%进行升级。

这种方式也有很多缺点,例如:
(1) 没有一个确定OK的环境。使用蓝绿部署,我们能够清晰地知道老版本是OK的,而使用滚动发布,我们无法确定。
(2) 修改了现有的环境。
(3) 如果需要回滚,很困难。举个例子,在某一次发布中,我们需要更新100个实例,每次更新10个实例,每次部署需要5分钟。当滚动发布到第80个实例时,发现了问题,需要回滚。此时,脾气不好的程序猿很可能想掀桌子,因为回滚是一个痛苦,并且漫长的过程。
(4) 有的时候,我们还可能对系统进行动态伸缩,如果部署期间,系统自动扩容/缩容了,我们还需判断到底哪个节点使用的是哪个代码。尽管有一些自动化的运维工具,但是依然令人心惊胆战。
并不是说滚动发布不好,滚动发布也有它非常合适的场景。

这里说了这么多,滚动发布的缺点哦,但是如果使用docker、kubernetes
进行容器化操作,就可以避免环境上的问题,回滚也是自动化、动态伸缩也可以
这里面涉及了kubernetes很多不过多介绍
想了解的可以看下下面这个
https://kubernetes.feisky.xyz/ji-chu-ru-men/201

相关文章

网友评论

    本文标题:蓝绿部署、灰度发布、滚动发布

    本文链接:https://www.haomeiwen.com/subject/rxjmtctx.html