首页 > 其他分享 >什么是灰度发布

什么是灰度发布

时间:2023-04-02 12:11:44浏览次数:33  
标签:服务 金丝雀 什么 用户 发布 灰度 版本

什么是灰度发布

1. 一般发布

一般我们发布新应用,需要经过以下几个步骤:

  • 上传新的程序包到服务器
  • 停止旧版本服务
  • 启动新版本服务

这种发布方式,会存在两个问题:

  1. 新版本升级发布过程中,服务是中断的,无法向外提供服务
  2. 如果新版本发布后有bug,升级失败,回滚会比较麻烦,容易造成更长时间的服务不可用

为了解决这些问题,所以提出了多种发布策略。

2. 蓝绿部署

蓝绿部署指的就是,同时运行两个版本的应用。如下图。

蓝绿部署时,v1旧版本服务不会被停止,而是直接部署一套新版本服务v2。等v2运行起来没有问题之后,再把服务提供从v1切换到v2。

但是蓝绿部署的缺点在于,升级过程中需要部署两套程序,对硬件的要求就是需求的两倍。比如日常运行需要5台服务器,蓝绿部署就需要10台服务器。

3. 滚动发布

如下图。

滚动发布可以解决蓝绿部署造成的硬件要求倍增问题。

滚动发布也就是说,在服务升级过程中,并不是一下子启动所有版本,而是先启动一台v2新服务,再停止一台v1旧服务,然后再启动v2,停止v1,直到所有服务都升级完成。

也就是,利用滚动发布,日常运行需要5台的服务器,升级过程中只需要6台服务器就足够了,比蓝绿部署对硬件的要求低了很多。

但是滚动发布也有问题。开始滚动发布后,流量会直接流向已经启动的新服务,但是这个时候新服务不一定是可用的,也就是说,在升级过程中整个系统处于一种不稳定的状态,且如果在途中发现了问题,难以定位是新服务还是旧服务的问题。

所以可以看出,滚动发布需要实现流量控制功能。

4. 灰度发布

灰度发布(金丝雀发布),起源是,矿井工人发现,金丝雀对瓦斯气体很敏感,矿工会在下井之前,先放一只金丝雀到井中,如果金丝雀不叫了,就代表瓦斯浓度高。

4.1. A/B测试

A/B测试是一种将网页或应用程序的两个版本相互比较以确定哪个版本的性能更好的方法。

它类似于初中生物说的对照试验。对用户分组,每个组使用一个方案(方案应遵从单变量前提),在相同的时间维度上去观察用户的反应(体现在业务数据和用户体验数据上)。

需要注意的是各个用户群组的组成成分应当尽量相似,譬如新老用户很有可能表现出较大的偏好差异。最后根据假设检验的结果,判断哪些版本较之原版有统计意义上的差异,并根据效应量选出其中表现最好的版本。

4.2. 灰度机制

很多公司在一开始做产品定义时,要么确定它是黑的,要么确定它是白的。但是其实互联网的产品定义是由用户决定的,在一开始不定义它是黑还是白,有一个灰度周期。在这个灰度周期里,用用户的口碑来决定它是生是死是黑是白。

4.3. 灰度发布定义

灰度发布,又称金丝雀发布,起源是矿井工人发现金丝雀对瓦斯气体很敏感,所以矿工在下井之前,会先放一只金丝雀到井中,如果金丝雀不叫了,就代表瓦斯浓度高。

灰度发布是指在黑与白之间能够平滑过渡的一种发布方式,在其上可以进行A/B测试,也就是让一部分用户继续使用产品特性A,另一部分用户使用产品特性B,如果用户们对B没有反对意见,便主键扩大使用范围,把所有用户都迁移到B上,如下图。

灰度发布可以保证整体系统的稳定性,且在初始灰度时可发现问题,调整问题,降低影响。

4.4. 灰度发布具体流程

  • 灰度发布开始后,先启动一个新版本应用,但并不切流量,而是让测试人员先对新版本进行线上测试。启动的这个新版本应用,就是金丝雀。
  • 如果测试没有问题,则将少量用户导入新版本上,对新版本做运行状态观察,收集各种运行时数据,对照新旧版本数据对比,这就是所谓的A/B测试。
  • 确认新版本运行良好,逐步将流量导入新版本。期间可以不断调整新旧两个版本运行的服务器数量,让新版本承受越来越大的流量压力,直到全部切换到新版本,此时可以关闭剩下的老版本服务,完成灰度发布。

在灰度发布过程中,如果发现新版本问题,就应该立即将流量切回到老版本,这样将负面影响控制在最小范围内。

4.5. 优点

  • 灵活选择测试用户参与产品测试
  • 避免停止服务给用户带来的不便
  • 具有容灾能力:降低全量发布引起的服务器崩溃风险,逐步发布产品,逐步控制服务器压力
  • 规避一定的发布风险,降低产品迭代升级所影响的范围
  • 迅速获得用户的反馈意见,完善产品功能,提升产品质量

标签:服务,金丝雀,什么,用户,发布,灰度,版本
From: https://www.cnblogs.com/knqiufan/p/17280227.html

相关文章

  • 《程序是怎样跑起来的》读书笔记1——对程序员来说CPU是什么
    一丶什么是程序程序是指令和数组的组合体,如:print("你好世界"),其中print是指令,你好世界是数据。CPU能直接识别和执行的只有机器语言,使用C,java这种高级语言编写的程序需要编译转换后才可以运行。二丶CPU的内部结构CPU即中央处理器,相当于计算机的大脑,内部由许多晶体管构成,负责解......
  • 跨屏零代码saas建站平台2023.4.2发布更新
    跨屏零代码saas建站平台2023.4.2发布更新,主要更新了官网的UI,使其更加的简约,我们花了3年时间开发了这款零代码saas建站平台,然后正式运营以后,一直在致力于做简化工作,也就是化繁为简,不仅局限于官网的模板ui简化,以及用户的后台简化,注册登录、发布操作流程的简化,以及模板的简化。跨屏平......
  • 面试突击:MVCC 和间隙锁有什么区别?
    MVCC和间隙锁是两种完全不同的机制,但它们的目的都是相同的,都是用来保证数据库并发访问的,我们先来看二者的定义。MVCC定义MVCC是多版本并发控制(Multi-VersionConcurrencyControl)的缩写,是一种并发控制的方法。在MVCC中,每个读操作会看到一个固定版本的数据库记录,即使在并发环境......
  • 什么是积分(用定积分求面积)
    什么是积分(用定积分求面积)_哔哩哔哩_bilibili ......
  • 闭包是什么?
    闭包的定义:当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。我们来看以下代码,functionfoo(){vara=2;functionbar(){console.log(a);}returnbar;}varbaz=foo();baz()//2 bar()......
  • 什么是 Spring Batch?
    SpringBootBatch提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处理作业可以高度可扩......
  • Spring MVC是什么
    SpringMVC是Spring提供的一个基于MVC设计模式的轻量级Web开发框架,本质上相当于Servlet。SpringMVC是结构最清晰的Servlet+JSP+JavaBean的实现,是一个典型的教科书式的MVC构架,不像Struts等其它框架都是变种或者不是完全基于MVC系统的框架。SpringMVC角色划分清......
  • Spring MVC是什么
    SpringMVC是Spring提供的一个基于MVC设计模式的轻量级Web开发框架,本质上相当于Servlet。SpringMVC是结构最清晰的Servlet+JSP+JavaBean的实现,是一个典型的教科书式的MVC构架,不像Struts等其它框架都是变种或者不是完全基于MVC系统的框架。SpringMVC角色划分清......
  • 什么是 Spring Batch?
    SpringBootBatch提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处理作业可以高度可扩......
  • 什么是 Spring Batch?
    SpringBootBatch提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处理作业可以高度可扩......