zoukankan      html  css  js  c++  java
  • 浅析金丝雀发布、滚动发布、蓝绿发布的差别及实践要点、A/B测试的概念及发布的实践要点

    一、单服务器组发布

    1、蛮力发布  ——  简单粗暴,主要靠手工完成

      先将老版本 V1 全部下掉,再将新版本发到机器上去。这种方式会引入服务中断(停机),会直接影响用户的使用体验。

    2、金丝雀发布  ——  在蛮力发布基础上的一种简单改进发布方式,目前仍然是不少成长型技术组织的主流发布方式。

    (1)实践要点:

      1.1、金丝雀发布一般先发 1 台,或者一个小比例,例如 2% 的服务器,主要做流量验证用,也称为金丝雀 (Canary) 测试(国内常称灰度测试)。

      以前旷工开矿下矿洞前,先会放一只金丝雀进去探是否有有毒气体,看金丝雀能否活下来,金丝雀发布由此得名。简单的金丝雀测试一般通过手工测试验证,复杂的金丝雀测试需要比较完善的监控基础设施配合,通过监控指标反馈,观察金丝雀的健康状况,作为后续发布或回退的依据。

      1.2、如果金丝测试通过,则把剩余的 V1 版本全部升级为 V2 版本。如果金丝雀测试失败,则直接回退金丝雀,发布失败。

    (2)优势:用户体验影响小,金丝雀发布过程出现问题只影响少量用户

    (3)不足:发布自动化程度不够,发布期间可引发服务中断

    (4)适用场合:

    • 对新版本功能或性能缺乏足够信心

    • 用户体验要求较高的网站业务场景

    • 缺乏足够的自动化发布工具研发能力

      流量模式:少量金丝雀先接受流量,再全量发布

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

    (1)实践要点:

      3.1、滚动式发布一般先发 1 台,或者一个小比例,如 2% 服务器,主要做流量验证用,类似金丝雀 (Canary) 测试。

      3.2、滚动式发布需要比较复杂的发布工具和智能 LB,支持平滑的版本替换和流量拉入拉出。

      3.3、每次发布时,先将老版本 V1 流量从 LB 上摘除,然后清除老版本,发新版本 V2,再将 LB 流量接入新版本。这样可以尽量保证用户体验不受影响。

      3.4、一次滚动式发布一般由若干个发布批次组成,每批的数量一般是可以配置的(可以通过发布模板定义)。例如第一批 1 台(金丝雀),第二批 10%,第三批 50%,第四批 100%。每个批次之间留观察间隔,通过手工验证或监控反馈确保没有问题再发下一批次,所以总体上滚动式发布过程是比较缓慢的 (其中金丝雀的时间一般会比后续批次更长,比如金丝雀 10 分钟,后续间隔 2 分钟)。

      3.5、回退是发布的逆过程,将新版本流量从 LB 上摘除,清除新版本,发老版本,再将 LB 流量接入老版本。和发布过程一样,回退过程一般也比较慢的。

      3.6、滚动式发布国外术语通常叫 Rolling Update Deployment。

    (2)不足:发布和回退时间比较缓慢、发布工具比较复杂,LB 需要平滑的流量摘除和拉入能力

    二、双服务器组发布

      随着云计算和虚拟化技术的成熟,特别是容器等轻量级虚拟化技术的引入,计算资源受限和申请缓慢问题已经逐步解决,可以做到弹性按需分配。为一次发布分配两组服务器,一组运行现有的 V1 老版本,一组运行待上线的 V2 新版本,再通过 LB 切换流量方式完成发布,这就是所谓的双服务器组发布方式。

    1、蓝绿发布  ——  蓝绿发布仅适用于双服务器组发布,可以认为是对蛮力发布的一种简单优化发布方式

    (1)实践要点

      1.1、V1 版本称为蓝组,V2 版本称为绿组,发布时通过 LB 一次性将流量从蓝组直接切换到绿组,不经过金丝雀和滚动发布,蓝绿发布由此得名;

      1.2、出现问题回退也很直接,通过 LB 直接将流量切回蓝组。

      1.3、发布初步成功后,蓝组机器一般不直接回收,而是留一个待观察期,视具体情况观察期的时间可长可短,观察期过后确认发布无问题,则可以回收蓝组机器。

    (2)优势:升级切换和回退速度非常快

    (3)不足:切换是全量的,如果 V2 版本有问题,则对用户体验有直接影响;需要两倍机器资源;

    2、金丝雀发布  —— 对蓝绿部署的一种简单优化,发布时先从绿组拉入 1 台金丝雀,待金丝雀验证通过再发全量。对比蓝绿发布,该发布方式的优势是有一个生产流量的金丝雀验证过程,可以减轻 V2 可能有问题的风险和影响面。

    3、滚动式发布  ——  滚动式发布是对上面的蓝绿和金丝雀发布的进一步优化,按批次增量滚动发布,提供更平滑的用户体验。

    三、A/B 测试

    1、实践要点:

    (1)原来 PC 端和手机端都访问老版本 V1 服务(也称 A 组或控制组),当 V2 新版本(也称 B 组或实验组)发布以后,为了验证 V2 的功能正确性,同时也为了避免 V2 有问题时影响所有用户,先通过 LB 将手机端的流量切换到 V2 版本,经过一段时间的 A/B 比对测试和观察(主要通过用户和监控反馈),确保 V2 正常,则通过 LB 将全部流量切换到 V2。

    (2)基于 LB 方式实现 A/B 测试,LB 需要能够通过某种条件做流量路由,例如通过 client ip,设备类型,浏览器类型,甚至是定制的 HTTP Header 或查询字符串。

    (3)高级的 A/B 测试需要专门的平台支撑,有一些支持高级 A/B 测试的平台,这类平台可以细粒度到针对某类用户做 A/B 测试,例如针对某个地区的用户,某个年龄段的用户,公司内部用户等等。举了例子,假设一个关键业务的新功能上线,为了降低风险采用 A/B 测试,可以做到先只让公司内部员工能访问到新功能,待新功能验证过,再全量放开给外部用户使用。

      以上来源于这篇文章(https://www.cnblogs.com/apanly/p/8784096.html)的学习笔记。

  • 相关阅读:
    外部排序
    oceanbase tpcc 关键总结
    TPCC测试
    最简单的oracle 19c安装教程
    unix进程环境
    tars以docker方式安装
    异常安全的赋值运算符函数
    linux 定时器setitimer使用
    libevent学习-reactor设计模式及代码示例
    linux中可执行程序搜索动态链接库的顺序
  • 原文地址:https://www.cnblogs.com/goloving/p/15040285.html
Copyright © 2011-2022 走看看