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

这篇具有很好参考价值的文章主要介绍了微服务部署:蓝绿发布、滚动发布、灰度发布、金丝雀发布。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在项目迭代的过程中,不可避免需要上线。上线对应着部署,或者重新部署;部署对应着修改,修改则意味着风险。

1.蓝绿发布(Blue/Green Deployment)

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

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

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

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

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

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

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

  • 如版本V2测试正常,就删除版本V1正在使用的资源(例如实例),从此正式用版本V2。

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

④小结

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

⑤蓝绿发布的注意事项

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

⑥优势和不足

  • 优势
    升级切换和回退速度非常快。
  • 不足
    切换是全量的,如果V2版本有问题,则对用户体验有直接影响。需要两倍机器资源。

⑦适用场合

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

2.灰度发布

①灰度发布定义

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

灰度发布结构图

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

②A/B Testing

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

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

A/B 测试与蓝绿发布的区别在于, A/B 测试目的在于通过科学的实验设计、采样样本代表性、流量分割与小流量测试等方式来获得具有代表性的实验结论,并确信该结论在推广到全部流量可信;蓝绿发布的目的是安全稳定地发布新版本应用,并在必要时回滚。
蓝绿发布和金丝雀是发布策略,目标是确保新上线的系统稳定,关注的是新系统的BUG、隐患。
A/B测试是效果测试,同一时间有多个版本的服务对外服务,这些服务都是经过足够测试,达到了上线标准的服务,有差异但是没有新旧之分(它们上线时可能采用了蓝绿发布的方式)。

③金丝雀发布(Canary Deployment)

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

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

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

  • 准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件。
  • 从负载均衡列表中移除掉「金丝雀」服务器。
  • 升级「金丝雀」应用(排掉原有流量并进行部署)。
  • 对应用进行自动化测试。
  • 将「金丝雀」服务器重新添加到负载均衡列表中(连通性和健康检查)。
  • 如果「金丝雀」在线使用测试成功,升级剩余的其他服务器(否则就回滚)。

除此之外灰度发布还可以设置路由权重,动态调整不同的权重来进行新老版本的验证,例如Istio中就可以实现权重来进行新老版本的验证发布。

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

④优势和不足

  • 优势
    用户体验影响小,灰度发布过程出现问题只影响少量用户。
  • 不足
    发布自动化程度不够,发布期间可引发服务中断。

3.滚动发布(Rolling Update Deployment)

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

①定义

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

②特点

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

③部署过程

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

④优势和不足

  • 优势
    用户体验影响小,体验较平滑。
  • 不足
    -- 发布和回退时间比较缓慢。
    -- 发布工具比较复杂,LB 需要平滑的流量摘除和拉入能力。

4.功能开关发布

利用代码中的功能开关(Feature Flag/Toggle/Switch)来控制发布逻辑,一般不需要复杂的发布工具和智能 LB 配合,是一种相对比较低成本和简单的发布方式。这种方式也是支持现代 DevOps 理念,研发人员可以灵活定制和自助完成的发布方式。功能开关的原理如下图所示:

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

①部署过程

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

②优势和不足

  • 优势
    升级切换和回退速度非常快。
    相对于复杂的发布工具,实施比较简单,成本相对低廉。
    研发能够灵活定制发布逻辑,支持 DevOps 自助发布。
  • 不足
    切换是全量的,如果 V2 版本有问题,则对用户体验有直接影响。
    对代码有侵入,代码逻辑会变复杂,需要定期清理老版本逻辑,维护成本变高。

参考:https://cloud.tencent.com/developer/article/1449209文章来源地址https://www.toymoban.com/news/detail-454512.html

到了这里,关于微服务部署:蓝绿发布、滚动发布、灰度发布、金丝雀发布的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝/绿部署 VS 金丝雀部署

    在生产环境中更新和配置应用程序通常是件令人望而生畏的事。面对如此多的可用选项,应如何选择最适合你的用例的部署策略? 部署策略用于升级或配置正在运行的应用程序。在下文中,我们将讨论三种部署策略: 重建部署 :在部署新版本之前,终止当前版本。 蓝/绿部

    2024年02月06日
    浏览(36)
  • K8S Nginx Ingress实现金丝雀发布

    通过给 Ingress 资源指定 Nginx Ingress 所支持的 annotation 可实现金丝雀发布。 需给服务创建2个 Ingress,其中 1个常规 Ingress , 另1个为带  nginx.ingress.kubernetes.io/canary: \\\"true\\\"  固定的 annotation 的 Ingress,称为 Canary Ingress。 Canary Ingress 一般代表新版本的服务,结合另外针对流量切分策

    2024年02月11日
    浏览(44)
  • 【K8s】¹版本回退升级&金丝雀发布

    为了更好的解决服务编排的问题, 我们可以使用Deployment控制器。这种控制器不直接管理pod,他通过ReplicaSet来管理pod。 目录 1.使用yaml文件形式,创建deployment 2.扩缩容 3.镜像更新 4.版本回退 5.金丝雀发布 金丝雀发布的优点 金丝雀发布的缺点 Deployment主要功能: 支持ReplicaSet的

    2024年02月03日
    浏览(41)
  • 自动化金丝雀部署:Flagger全面解读webhook(含源码)

    内容导读: 上文通过下面的配置就实现了 验收测试 和 压力测试 ,对此有以下疑问: metadata定义脚本和类型,说明接口能执行shell,那它是怎么实现的? type未设置是怎样的执行逻辑?type有哪些值,各有什么作用? 本文将通过源码来解答以上问题 本文采用 粗读 源码方式,

    2024年04月11日
    浏览(56)
  • Kubernetes 服务发布方式(蓝绿发布、灰度发布和滚动发布)

    应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境,同时要保证系统不间断提供服务。而最为常见三种发布方式分别为: 蓝绿发布 , 灰度发布 和 滚动发布 。 三种发布方式的最终目的都是为了减小或避免对应用项目更新时,对客户使用的影

    2024年02月14日
    浏览(34)
  • 【kubernetes】关于k8s集群的资源发布方式(灰度/滚动发布)

    目录 一、常见的发布方式 二、详解kubectl陈述式方式做灰度发布(金丝雀发布) 步骤一:先基于deployment控制器创建pod,然后发布 步骤二:基于命令行灰度发布 步骤三:测试等到版本稳定以后,再完成继续发布 三、滚动发布详解 蓝绿发布:两套环境交替升级,旧版本保留一定

    2024年04月23日
    浏览(47)
  • 使用k8s 配置 RollingUpdate 滚动更新实现应用的灰度发布

    方案实现方式: RollingUpdate 滚动更新机制 当某个服务需要升级时,传统的做法是,先将要更新的服务下线,业务停止后再更新版本和配置,然后重新启动服务。 如果业务集群规模较大时,这个工作就变成了一个挑战,而且全部停止了服务,再逐步升级的方式会导致服务较长

    2024年01月24日
    浏览(42)
  • 得物SRE视角下的蓝绿发布

    发布变更是影响稳定性的一个重大因素,为了发布异常时能快速回滚,增加发布期间的稳定性,也为了解决多服务部署时互相依赖而导致的发布时间增长等问题,得物在今年引入一种新的发布模式--蓝绿发布。这种发布模式带来了稳定性和效率的提升,这里我们以SRE的视角来

    2024年01月16日
    浏览(43)
  • 什么是灰度发布?灰度发布几种类型

    灰度发布是指在 黑和白(0和1)之间,能够平滑过渡的一种发布方式。 AB test就是一种灰度发布方式,指为产品已发布A版本,在发布B版本时,在同一时间维度, 让一部分用户继续用A版本,一部分用户开始用B版本,如果用户对B版本没有什么反对意见,那么逐步扩大范围,把所有

    2024年02月02日
    浏览(36)
  • 【kubernetes】Argo Rollouts -- k8s下的自动化蓝绿部署

    在现代软件开发和交付中,确保应用程序的平稳更新和发布对于用户体验和业务连续性至关重要。蓝绿部署是一种备受推崇的部署策略,它允许开发团队在不影响用户的情况下,将新版本的应用程序引入生产环境。 蓝绿部署的核心思想在于维护两个独立的环境:蓝环境和绿环

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包