灰度部署、滚动部署与蓝绿部署

2024-04-13 15:52
文章标签 部署 滚动 灰度 蓝绿

本文主要是介绍灰度部署、滚动部署与蓝绿部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

最近在进行单元化建设方面的的工作,其中涉及服务分组和蓝绿发布相关的概念,在这里总结一下了解到的相关知识。

版本更新策略

功能开关

在应用逻辑里内置功能开关,通过开关的打开关闭来决定执行新旧逻辑,无需路由机制支持,开发人员可以灵活的控制程序的表现。这种方式需要动态配置中心的支持,目前业界已经有比较完善的解决方案,比如Apollo、spring cloud config等等。具体的方式类似这样:

if Config.SwitchOn {//new logic
} else {//old logic
}

功能开关的方式虽然简单直观,但是随着版本的更新需要经常清理过期配置,维护成本比较高。

灰度部署/金丝雀部署

灰度部署是指先更新一小部分服务器比如2%,然后对应用进行测试验证。如果验证通过,则继续更新剩余部分的服务器,否则进行回滚。灰度部署的好处就是影响面小,出现问题时只会影响很小一部分用户,适合对新功能信心不足或是对服务可用性要求比较高的场景。
在这里插入图片描述

滚动部署

滚动部署更像是灰度部署的增强版,当新版本经过灰度验证通过之后,我们逐渐增大灰度部署的范围,直到全部的服务器都更行到新版本。在部署过程中需要支持平滑切换,即先把服务器从负载均衡列表中摘除;此外滚动发布通常是分批次的,比如第一批10%,第二批30%,第三批100%等等。
滚动部署相比灰度部署,需要自动化部署工具以及完善的路由机制支持,这样才能保证用户体验足够平滑;此外滚动部署比起灰度部署的发布和回滚时间也会更长。
在这里插入图片描述

蓝绿部署

蓝绿部署技术是指同时维护两套相同的生产环境,我们可以称之为蓝色环境和绿色环境,而只有一个颜色的环境负责提供完整的服务,另一个环境则完全空闲。当我们需要部署新版本的服务时,我们先在空闲的环境进行部署和验证,当验证完毕后,通过操作路由将客户端流量切换至新版本的环境,而原先的环境则变为空闲环境,依次循环交替。
在这里插入图片描述
要实现蓝绿部署,需要几个额外支持:

  1. 完善的、操作成本低的路由控制机制,运维人员可以动态地进行流量切换
  2. 冗余资源,任意时刻其中一个环境的资源是闲置的。当然我们可以把闲置的环境作为预发验证环境,或者把删除一部分空闲环境的资源,等下次发布时再扩充资源

蓝绿部署的好处:

  1. 可以降低停机时间,我们的生产环境几乎没有停机时间,切换在很短的时间内即可完成
  2. 可以快速回滚,当新功能不符合预期是我们只需要将流量切换回上一个版本的环境即可
  3. 可以提高灾备能力,当一个环境出现问题时我们可以迅速切换到另一个可用的环境。实际上每次发布都相当于进行了一次灾备切换

蓝绿部署的不足:

  1. 资源利用率不足,因为一般的资源是闲置的
  2. 当流量切换完毕之后,可能在后端仍有业务逻辑没有处理完毕,需要额外的机制保证。你可以在设计时就保证两个环境可以同时处理事务,这样就不需要考虑这个问题了;也可以在切换流量前先将服务设置为“只读模式”,流量切换完毕再回到“读写模式”等等。
  3. 新旧版本可能会涉及数据库表结构的变化,这时我们需要额外的数据库兼容措施。当切换到新的环境发生问题时,可能会因为新的逻辑导致数据差异。要解决这种问题可以将数据库重构与应用发布分开:先进行数据库重构以保证新旧版本兼容,数据库重构完毕后再进行应用发布。

其他概念

单服务器组合双服务器组

前面提到的蓝绿部署需要两个环境,实际上就相当于双服务器组。二灰度部署和滚动部署也可以用于双服务器组。比如双服务器组中的灰度部署就是在蓝绿环境切换时不是一刀切,而是先切换一小部分到新环境,验证通过后再全量切换到新环境;而滚动部署在双服务器组中就是分批次切换到新环境。

服务器组

在进行服务器组划分时,可以有不同程度的划分:根据数据中心划分,比如A机房为一组、B机房为一组;根据逻辑分组划分,比如A、B机房的一半机器分为一组、剩下的另一半机器分为一组。无论如何分组,请求在服务之间传递时都是需要识别某个机器的分组标识的,比如在注册中心中服务实例的元数据里需要有类似"group=group1"这样的标识,这样客户端或者代理节点在进行路由时才能识别服务端实例所在的分组。

路由机制

前面提到的各种部署策略,实际上都需要不同程度的路由机制支持。对于HTTP服务可以使用代理节点的方式,在域名解析过程中分发到不同的下游节点;RPC服务则需要实现配套的路由机制了。

这篇关于灰度部署、滚动部署与蓝绿部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900569

相关文章

html 滚动条滚动过快会留下边框线的解决方案

《html滚动条滚动过快会留下边框线的解决方案》:本文主要介绍了html滚动条滚动过快会留下边框线的解决方案,解决方法很简单,详细内容请阅读本文,希望能对你有所帮助... 滚动条滚动过快时,会留下边框线但其实大部分时候是这样的,没有多出边框线的滚动条滚动过快时留下边框线的问题通常与滚动条样式和滚动行

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技