一文搞懂蓝绿发布、灰度发布和滚动发布

一文搞懂蓝绿发布、灰度发布和滚动发布

 

应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境,同时要保证系统不间断提供服务。

长期以来,业务升级渐渐形成了几个发布策略:蓝绿发布、灰度发布和滚动发布,目的是尽可能避免因发布导致的流量丢失或服务不可用问题。

一、 蓝绿发布

项目逻辑上分为AB组,在项目系统时,首先把A组从负载均衡中摘除,进行新版本的部署。B组仍然继续提供服务。  

 

当A组升级完毕,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署。A组重新提供服务。  

 

 

最后,B组也升级完成,负载均衡重新接入B组,此时,AB组版本都已经升级完成,并且都对外提供服务。

特点

  • 如果出问题,影响范围较大;

  • 发布策略简单;

  • 用户无感知,平滑过渡;

  • 升级/回滚速度快。

缺点

  • 需要准备正常业务使用资源的两倍以上服务器,防止升级期间单组无法承载业务突发;

  • 短时间内浪费一定资源成本;

  • 基础设施无改动,增大升级稳定性。

 

蓝绿发布在早期物理服务器时代,还是比较昂贵的,由于云计算普及,成本也大大降低。

二、 灰度发布

灰度发布只升级部分服务,即让一部分用户继续用老版本,一部分用户开始用新版本,如果用户对新版本没什么意见,那么逐步扩大范围,把所有用户都迁移到新版本上面来。

特点

  • 保证整体系统稳定性,在初始灰度的时候就可以发现、调整问题,影响范围可控;

  • 新功能逐步评估性能,稳定性和健康状况,如果出问题影响范围很小,相对用户体验也少;

  • 用户无感知,平滑过渡。

缺点

  • 自动化要求高

部署过程

  • 从LB摘掉灰度服务器,升级成功后再加入LB;

  • 少量用户流量到新版本;

  • 如果灰度服务器测试成功,升级剩余服务器。

 

灰度发布是通过切换线上并存版本之间的路由权重,逐步从一个版本切换为另一个版本的过程。

三、 滚动发布

滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级新版本。 

 

  • 红色:正在更新的实例

  • 蓝色:更新完成并加入集群的实例

  • 绿色:正在运行的实例

特点

  • 用户无感知,平滑过渡;

  • 节约资源。

缺点

  • 部署时间慢,取决于每阶段更新时间;

  • 发布策略较复杂;

  • 无法确定OK的环境,不易回滚。

部署过程

  • 先升级1个副本,主要做部署验证;

  • 每次升级副本,自动从LB上摘掉,升级成功后自动加入集群;

  • 事先需要有自动更新策略,分为若干次,每次数量/百分比可配置;

  • 回滚是发布的逆过程,先从LB摘掉新版本,再升级老版本,这个过程一般时间比较长;

  • 自动化要求高。

小结

综上所述,三种方式均可以做到平滑式升级,在升级过程中服务仍然保持服务的连续性,升级对外界是无感知的。那生产上选择哪种部署方法最合适呢?这取决于哪种方法最适合你的业务和技术需求。如果你们运维自动化能力储备不够,肯定是越简单越好,建议蓝绿发布,如果业务对用户依赖很强,建议灰度发布。如果是K8S平台,滚动更新是现成的方案,建议先直接使用。

  • 蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚。

  • 灰度发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版本。

  • 滚动发布:按批次停止老版本实例,启动新版本实例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NVelocity标签设置缓存的解决方案

意外的问题总会让人措手不及,今天与大家分享的就是NVelocity设置缓存的问题,之前刚google了一下发现没什么太好的解决方案,希望在这能为需要的朋友找出满意的答案,上一篇blog刚说了NVelocity的用法,这就不在重复了&…

实数历史无穷小能否带领我们直接走向今日科学之辉煌?

本篇文章朋友在深圳吃饭的时候突然想到的...这段时间就有想写几篇关于实数历史的博客,所以回家到之后就奋笔疾书的写出来发布了 历史不能重演,这是毫无疑问的。数学是一门基础学科,影响到本日科学技术的方方面面,可以说&#xff0…

java成员方法的一般格式为_Java基本知识(四)

一、二维数组1、定义方式m:代表当前二维数组中有多少个一维数组;n:代表每个一维数组的长度(1)数据类型[][] 数组名new 数据类型[m][n](2)数据类型[][] 数组名new 数据类型[m][ ],只给定m个一维数组,每个一维数组长度动…

免费的定时任务托管 clock.sh

自己有很多定时任务要跑,所以之前搞了一个定时运行的系统。 在 V2EX 看到很多有类似需求的朋友: https://www.v2ex.com/t/252810https://www.v2ex.com/t/448726https://www.v2ex.com/t/579740https://www.v2ex.com/t/241229https://hk.v2ex.com/t/1134…

Android Webservices 返回多行多列数据(Dataset)

对于之前从事.net或者java开发人员,习惯了从后台获取网格数据(多行多列DataTable),但转行从事android开发,难免会不习惯 Android调用Webservice时,如果返回值是一个boolean或者string值时可以通过下面方式接…

Spring.Net简单IOC应用

本文简单的介绍一下Spring.net的配置和IOC应用。 目录:  一、引用资源.  二、配置文件配置.  三、文件调用.  四、本实例代码下载(vs-2010). 一、引用资源(所需spring的dll) Spring.Core.dll Spring.Web.dll C…

vCenter Server Appliance(VCSA )6.7部署指南

VCSA 6.7版本于2018年4月17日提供下载,同时发布的还有ESXi 6.7,根据官方文档,6.7版本升级主要为了发布vSAN 6.7版本。 第1步,下载VMware-VCSA-all-6.7.0-8217866文件,用虚拟光驱挂载或者解压运行,选择“安…

学习的回顾--数组的有关内容

1、数组的定义以及简单的内容 C#中数组是引用类型,C#定义整型数组方式是:int [] intArray {1,2,3};或int [] intArray new int[10]; C#中的数组可以是一维的也可以是多维的,同样也支持矩阵和参差不齐的数…

mysql5.6.35安装_mysql5.6.35 二进制快速安装

说明:mysql安装在/data/mysql-5.6.35目录下;如果安装在/usr/local/mysql/目录下,则两个sed不许执行,因为默认是/usr/local/目录下;1.下载cd /data/tar -zxf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gzmv mysql-5.6.35-linux-gli…

XML 通用操作

Xml格式&#xff1a; <?xml version"1.0" encoding"utf-8"?> <remotes> <remote ip"ipval">nameAndPwd</remote> </remotes> 通用读写删类&#xff1a; using System; using System.Data; using System.…

Ansible无敌详细入门教程

Ansible 是什么 ? ansible架构图 ansible特性 模块化&#xff1a;调用特定的模块&#xff0c;完成特定的任务&#xff1b; 基于Python语言研发&#xff0c;由Paramiko, PyYAML和Jinja2三个核心库实现&#xff1b; 部署简单&#xff1a;agentless&#xff1b; 支持自定义模…

Nginx学习笔记(五) 源码分析内存模块内存对齐

Nginx源码分析&内存模块 今天总结了下C语言的内存分配问题&#xff0c;那么就看看Nginx的内存分配相关模型的具体实现。还有内存对齐的内容~~不懂的可以看看~~ src/os/unix/Ngx_alloc.h&Ngx_alloc.c 先上源码&#xff1a; /** Copyright (C) Igor Sysoev* Copyright (C…

reactor p java_Java反应式框架Reactor中的Mono和Flux

1. 前言最近写关于响应式编程的东西有点多&#xff0c;很多同学反映对Flux和Mono这两个Reactor中的概念有点懵逼。但是目前Java响应式编程中我们对这两个对象的接触又最多&#xff0c;诸如Spring WebFlux、RSocket、R2DBC。我开始也对这两个对象头疼&#xff0c;所以今天我们就…

Visual Studio 20xx试用版升级为正式版(WIN7同样有效)图解、附带序列号

Visual Studio 2005|2008 试用版升级为正式版&#xff08;WIN7同样有效&#xff09;。 目录 一、步骤图解 二、win7破解工具下载 三、序列号 一、步骤图解 1.控制面板 > 程序和功能 > Visual Studio 2005|2008 启动、修复程序。如图&#xff1a; 2.填写序列号&#xff0…

java方法调用的格式_Java基础(一)---方法的调用

接上一篇方法的自定义&#xff0c;此篇简介一下如何去调用一个方法。。。方法的主要目的&#xff1a;实现代码的复用1.方法调用的格式&#xff1a;  方法名(参数);注&#xff1a;如果方法需要参数(即所调用的方法的参数列表中存在参数)&#xff0c;此时必须给参数&#xff0c…

解决go build报错cannot find main module; see ‘go help modules‘

描述&#xff1a; 在学习golang的过程中&#xff0c;在$GOPATH/src/github.com/xxx/hello目录下执行go build和go test都会报下面的错误 go: cannot find main module; see ‘go help modules’ 解决方案&#xff1a; 由于之前设置过GO111MODULEon&#xff0c;所以使用下面…

NHibernate使用之详细图解

本文档适合初级开发者或者是第一次接触NHibernate框架的朋友&#xff0c;其中NHibernate不是最新的版本&#xff0c;但是一个比较经典的版本 NHibernate 2.1.2&#xff0c;其中用红线标注的部分一定要仔细看&#xff0c;这些都是容易忽略和出错的地方&#xff0c;笔者在此给大家…

disabling directory browsing

2019独角兽企业重金招聘Python工程师标准>>> I have seen several recommendation to increase web application security by disabling directory browsing (for example pg 388 in IBM WebSphere Deployment and Advanced Configuration by Barcia, Hines, et al)…

水印生成器第2版[原图质量水印可自定义设置]

简介&#xff1a;水印生成器&#xff0c;原理很简单&#xff0c;一时在网上没有找到打水印的网站&#xff0c;自己便做了一个&#xff0c;效果如下图&#xff0c;可自定义字体大小、字体类型以及颜色。 开发环境&#xff1a;vs 2010 [net 3.5 WindowsForms应用程序] 本文带给…

服务发现与负载均衡traefik ingress

ingress就是从kubernetes集群外访问集群的入口&#xff0c;将用户的URL请求转发到不同的service上。Ingress相当于nginx、apache等负载均衡方向代理服务器&#xff0c;其中还包括规则定义&#xff0c;即URL的路由信息&#xff0c;路由信息得的刷新由 Ingress controller 提供 …