随着用户规模逐渐增长、产品的更新频繁,新版的每次上线,各方都要承受极大的压力,一旦产品发布出现事故,可能影响的范围和损失都比较大,为了解决产品发布过程中的风险控制,要有部分的用户参与到新产品中,体验使用观测其真实反馈,如果没有用户的参与,直接面对全量用户,那么风险是可想而知的。

灰度发布

为了控制产品发布过程中的风险、故有了灰度发布,百度百科的解释是这样的:

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式,在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度;灰度期:灰度发布开始到结束期间的这一段时间,称为灰度期。

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

灰度发布是在线上同时存在新旧两个版本,根据不同策略,按需分配部分流量比例到新的版本,支持流量新旧切换、及切换流量比例,也可支持快速回滚,通过观测这部分用户使用新版本的状态状况数据,渐进式完成新版本的全量上线,最大限度地控制新版本发布带来的业务风险,降低故障带来的影响面。

灰度类型

灰度发布的类型,通常情况下可分为前端、客户端、服务端,灰度有个原则就是要能够保证用户请求的完整性,例如:要么该用户的全部请求有新版本提供服务,要么由旧版本提供服务,不可能一会旧版本一会新版本,原因是可能存数据依赖问题。

灰度策略

灰度策略是我们要选择哪些用户体验新版本,比较常用的就是按照人划分,可按照用户ID、用户IP、设备等其他标签多维度策略,来观测使用效果,还有其他的方式例如随机分配流量百分比、渠道等等。

可观测性

通过灰度策略,筛选出合适的用户体验新版本状态,通过可观测性观测各项SLI指标来评判SLO,以及用户满意度,决策是否扩大还是暂停(回滚)灰度策略。如果没有可观测性,如何得知新版本这部分用户的使用状况,那么也无法决策是否继续或暂停,要能够通过数据反馈来支持决策。

流量染色

根据流量协议设置对应的流量染色规则,对指定的流量进行染色标记,并在整个调用链中携带该标记,以便于对染色流量进行跟踪和路由,流量染色的方法可分为逻辑染色、物流染色两种,如下:

  • 逻辑染色:该方式是通过携带灰度因子,通过层层调用传递的方式进行程序逻辑控制。
  • 物理染色:该方式是按照机器的维度分流。

小结

灰度发布可以在灰度期很好进行发布产品过程中的风险控制,降低发布带来的风险,通过小流量的方式进行小范围验证,实现平滑过渡,因此我们要在适当的时候使用灰度发布,灰度发布是非常有用的,但是灰度发布也带来一定的复杂性和成本,这也是需要重视的,不能因实施灰度发布而带来其他稳定性问题。

第二十五篇:稳定性之灰度发布相关推荐

  1. Android UI开发第二十五篇——分享一篇自定义的 Action Bar

    Action Bar是android3.0以后才引入的,主要是替代3.0以前的menu和tittle bar.在3.0之前是不能使用Action Bar功能的.这里引入了自定义的Action Bar, ...

  2. SpringBoot第二十五篇:2小时学会springboot

    一.什么是spring boot Takes an opinionated view of building production-ready Spring applications. Spring ...

  3. EXTJS学习系列提高篇:第二十五篇(转载)作者殷良胜,ext2.2打造全新功能grid系列--右键菜单篇...

    本文介绍如何在grid列表里 在某行上面单击右键弹出菜单的功能 先看看效果图: 如上图所示,具体菜单的功能没有去实现,这里和前几篇的后台都极为类似,有需要后台代码的朋友只需要浏览前几篇即可. 下面仅仅 ...

  4. STM32F429第二十五篇之MCU屏实验详解

    文章目录 前言 硬件 软件 结构体 SRAM_HandleTypeDef Instance(FMC寄存器地址) Extended(拓展寄存器地址) Init(初始化变量) Lock(锁) State( ...

  5. Android之UiAutomator测试框架源码分析(第二十五篇:Gestures的设计与基本实现分析)

    (注意:本文基于UI Automator测试框架版本为2.2.0) Gestures类产生的对象,由UiObject2使用,UiObject2对象在创建时,持有一个Gestrues对象,我们这篇学习G ...

  6. 第二十五篇 -- 学习第三十四天打卡20190726

    学习书籍<剑桥商务英语中级词汇精选>乱序版 Day05 Day30proprietor [prə'praɪətə(r)] n.所有者,经营者例:The proprietor is resp ...

  7. JavaScript 设计模式学习第二十五篇-中介者模式

    中介者模式(Mediator Pattern)又称调停模式,使得各对象不用显式地相互引用,将对象与对象之间紧密的耦合关系变得松散,从而可以独立地改变他们.核心是多个对象之间复杂交互的封装. 根据最少知 ...

  8. 第二十五篇 hashlib模块(* *)

    用于加密相关的操作,Python 3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. 加密复杂程度: SHA1  ...

  9. “约见”面试官系列之常见面试题第二十五篇之对vue-router的理解(建议收藏)

    先整体展示下vue-router使用方式,请牢记一下几步哦! import Vue from 'vue' import VueRouter from 'vue-router' //注册插件 如果是在浏 ...

  10. IntelliJ IDEA快速入门 | 第二十五篇:IntelliJ IDEA快捷键的设置

    在讲完关于IntelliJ IDEA的一些常用设置之后,接下来,我们就来讲一讲IntelliJ IDEA中快捷键的设置,而快捷键是需要在如下Keymap界面中来设置的. 作为一个程序员,应该都知道这一 ...

最新文章

  1. python互斥锁_Python多线程如何使用互斥锁
  2. 多路隔离输出的车载辅助电源设计
  3. 左右躲避障碍-神手ts版本
  4. 二叉树中如何求根节点到任意节点的路径?
  5. 通过options探测服务器信息,OPTIONS 方法在跨域请求(CORS)中的应用
  6. mysql创建generator字段_springmvc+mybatsi-generator生成不了字段注释的解决方案
  7. 浅谈EntityFramework框架的使用
  8. 让Elasticsearch飞起来!百亿级实时查询优化实战
  9. Pandas常用操作总结
  10. mysql @符号_MySQL 数值类型
  11. Hadoop入门扫盲:hadoop发行版介绍与选择
  12. laravel连接oracle6,Laravel 使用 Oracle 数据库
  13. windbg拦截驱动加载
  14. [Unity] 利用Culling Group实现LOD和剔除逻辑
  15. 文件内容批量简体转换繁体
  16. 个人计算机与工作站 服务器有什么区别,工作站与服务器有什么区别?
  17. 小人数字时钟安卓版本APP
  18. 时钟周期是干什么的?底层原理是什么?
  19. java_枚举类型(支付方式枚举)
  20. 12家大厂软件测试大牛,联合打造:<如何从零开始学习软件测试>系列视频+完整版文档分享

热门文章

  1. Chrome启动参数最全集合
  2. c语言程序设计卡特兰数问题,求解圆上2N个点的连线问题(卡特兰数)
  3. [渝粤教育] 西南科技大学 画法几何与机械制图 在线考试复习资料
  4. 【STM32F429的DSP教程】第8章 DSP定点数和浮点数(重要)
  5. 施乐j75服务器电源管理系统,富士施乐推出印刷系统 Color J75 Press
  6. 学习《华为基本法》(4):组织结构管理原则
  7. c4d怎么导入图片描图建模,c4d怎么导入图片
  8. 简单的关机程序(C语言)
  9. HTML自动弹出窗口代码
  10. 移动网络安装测试软件,adsl网速测试(中国移动宽带专用测速软件)