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

前言

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

版本更新策略

功能开关

在应用逻辑里内置功能开关,通过开关的打开关闭来决定执行新旧逻辑,无需路由机制支持,开发人员可以灵活的控制程序的表现。这种方式需要动态配置中心的支持,目前业界已经有比较完善的解决方案,比如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服务则需要实现配套的路由机制了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用DockerCompose配置基于哨兵模式的redis主从架构集群

文章目录 一、注意事项(坑点!!!)二、配置Redis主从架构集群第一步:创建目录文件结构第二步:编写DockerCompose配置文件第三步:编写redis.conf第四步:启动redis主从集群 三…

如何在树莓派安装Nginx并实现固定公网域名访问本地静态站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器,可以用于托管网站或 Web 应用程序。相比其他 Web 服务器,Ngi…

古月·ROS2入门21讲——学习笔记(一)核心概念部分1-14讲

讲解视频地址:1.ROS和ROS2是什么_哔哩哔哩_bilibili 笔记分为上篇核心概念部分和下篇常用工具部分 下篇:古月ROS2入门21讲——学习笔记(二)常用工具部分15-21讲-CSDN博客 目录 第一讲:ROS/ROS2是什么 1. ROS的诞生…

Redis入门到通关之Set实现点赞功能

文章目录 set 数据类型介绍不排序实现排序实现 set 数据类型介绍 Redis中的set类型是一组无序的字符串值。 set通过其独特的数据结构和丰富的命令提供了在存储和处理集合元素方面的一些非常有用的功能。下面列出了主要的set类型命令: SADD key member1 [member2]&a…

Python框架之UnitTest

unittest 是python 的单元测试框架,unittest 单元测试提供了创建测试用例,测试套件以及批量执行的方案, unittest 在安装pyhton 以后就直接自带了,直接import unittest 就可以使用,测试人员用UnitTest来做自动化测试&a…

基于SpringBoot + Vue实现的校车调度管理系统设计与实现+毕业论文(12000字)+答辩PPT​(包运行成功)

介绍 本系统包含管理员、驾驶员两个个角色。 管理员角色:驾驶员信息管理、车辆信息管理、借调车辆管理、工作管理、车辆运营管理、报销申请审核。 驾驶员角色:个人信息查看、工作查看、借调车辆申请、车辆使用申请、报销申请提交。 运行环境 jdk1.8 id…

前端开发攻略---在输入框中输入中文但是还没选中的时候,搜索事件依然存在;中文输入法导致的高频事件。

1、演示 解决前 解决后 2、输入框事件介绍 compositionstart事件在用户开始使用输入法输入时触发。这意味着用户正在进行组合输入,比如在中文输入法中,用户可能正在输入一个多个字符的词语。在这个阶段,输入框的内容可能还没有完全确定&#…

消费增值新模式:让每一分钱都更有价值

亲爱的消费者们,大家好!今天我想和大家探讨一种新颖的消费方式——消费增值,它让您的每一次消费都蕴含了额外的价值,让消费变得更加有意义。 在过往的消费观念里,我们往往只是简单地将钱花出去,购买所需的商…

医院一站式后勤管理系统 processApkUpload.upload 任意文件上传漏洞复现

0x01 产品简介 医院一站式后勤管理系统由南京博纳睿通软件科技有限公司开发的一款基于现代医院后勤管理理念的业务系统,产品结合后勤业务管理特点,通过管理平台将后勤管理业务予以系统化、规范化和流程化,从而形成一套构建于平台之上且成熟完善的后勤管理体系,并可在此体系…

mysql的下载、安装

首先进入官网:MySQL 点击“downloads”进入下载界面 2.往下滑动滚轮,点击“mysql community...(公开版)” 3.往下滑,找到并单击“install for Windows” 4.选择版本:初学者可以使用较低版本,较…

SpringCloud框架 服务拆分和远程调用

数据库隔离避免耦合度过高,不同模块将自己的业务暴露为接口,供其他微服务调用 微服务远程调用技术Rest 在后端实现发送http请求 1.在启动类/配置类里注册RestTemplate启动对象 2.注入Bean对象使用

电商技术揭秘十四:大数据平台的选择与构建

相关系列文章 电商技术揭秘一:电商架构设计与核心技术 电商技术揭秘二:电商平台推荐系统的实现与优化 电商技术揭秘三:电商平台的支付与结算系统 电商技术揭秘四:电商平台的物流管理系统 电商技术揭秘五:电商平台…

一款牛逼的开源建站系统,轻松搭建专属博客网站(文末有福利)

今天给大家介绍一款牛逼的开源建站系统,支持多种方式部署,支持mardown、富文本、在线表格和思维导图等主流功能,轻轻松松帮你建立一个专属的、独一无二的博客网站。 博客功能 博文空间(便于博文组织,权限隔离) Markdown、Html富文本、电子表…

GD32F3系列单片机环境搭建

GD32单片机介绍 使用到开发板 GD32F303C-START 芯片型号:GD32F303CGT6 PinToPin单片机型号:STM32F103 GD32F303CGT6是超低开发预算需求并持续释放Cortex-M4高性能内核的卓越动力,为取代及提升传统的8位和16位产品解决方案,直接进…

Linux标准c库打开创建文件读写文件光标移动

fopen函数“const char *mode”参数选项。 结果:

【Css】table数据为空,以“-“形式展现

解决:class类名 它表示的是在一个名为class类名的元素内部,当该元素为空时,会在该元素的:before伪元素上应用一些样式。 这种写法通常用于在元素内容为空时,添加一些占位符或者提示文字

Hdevelop编辑器常用功能

1、灰度直方图 【阈值分割】——对应算子threshold 通过菜单【可视化】-【工具】-【灰度直方图】打开,打开后选中【变量窗口】的某张图片即可进行灰度直方图分析。 刚打开并选中某张图片: 调节【最小化】和【最大化】的两个竖线,此时图中绿…

【EM算法】算法及注解

EM算法又称期望极大算法,是一种迭代算法,每次迭代由两步组成:E步,求期望(expectation);M步,求极大(maximization)。 算法背景 如果概率模型的变量都是观测变…

第12届蓝桥杯java A组做题记录

A题:相乘 package JAVA12l蓝桥杯; //求2021的逆元public class 相乘 {static int mod (int)1e9 7;public static long qmi(long a,int k,int p){long res 1;while(k > 0){if(k % 2 1) res res * a % p;a a * a % p;k >> 1;}return res;}public stati…