灰度发布浅见

在之前的稳定性生产文章中有一项对于研发人员比较重要的措施是变更管控,关于变更管控其实在实际生产活动中有很多措施,因为对于不太的行业,其行业特点和稳定性生产的要求也不一样,例如下图,我们可以看到信通院调研的不同行业的特点区别确实是很不同的,如果拿着互联网的经验去能源、证券这类监管和稳定性要求特别高的行业来实施,那可能要经常面临罚款甚至停业整顿的处罚。但是我自己的经验只是在互联网比较多,所以本次只能介绍一点在互联网变更管控中降影响和降发生的一个措施:灰度发布。

本次我来回顾下在实际工作中用到的两种灰度发布工具:分别是技术上的配置中心和业务上的ab测试工具。

一、技术上的

(一)网关的全链路灰度

现在已经知道的是阿里云MSE实现全链路灰度和腾讯云的TSE可以为多应用发布提供全链路灰度能力,让在不修改业务代码的情况下实现全链路流量控制,端到端构建从网关到多个后端服务的全链路灰度。在多应用同时发布新版本的情况下,支持多个应用进行灰度验证,确保应用平滑发布上线。

但是我还没在生产环境使用过,大家感兴趣的可以在官网试用下:MSE实现全链路灰度 (aliyun.com)、微服务平台 TSF 灰度发布-操作指南-文档中心-腾讯云 (tencent.com)

(二)配置中心

在实际工作中我在技术上主要是通过apollo和nacos的灰度发布功能。

1、nacos:

这个主要是在配置中心使用了开关或者业务功能的其他一些标志,借用配置中心可以感知nacos客户端的ip地址来进行灰度的,官网在此处标记了使用方法:FAQ (nacos.io)

2、apollo:

使用方法如下:100004458(apollo-demo)项目有两个客户端:

  • 10.32.21.19
  • 10.32.21.22

灰度目标:

  • 当前有一个配置timeout=2000,我们希望对10.32.21.22灰度发布timeout=3000,对10.32.21.19仍然是timeout=2000。
2.1 创建灰度

首先点击application namespace右上角的创建灰度按钮。

点击确定后,灰度版本就创建成功了,页面会自动切换到灰度版本Tab。

2.2 灰度配置

点击主版本的配置中,timeout配置最右侧的对此配置灰度按钮

在弹出框中填入要灰度的值:3000,点击提交。

2.3 配置灰度规则

切换到灰度规则Tab,点击新增规则按钮

在弹出框中灰度的IP下拉框会默认展示当前使用配置的机器列表,选择我们要灰度的IP,点击完成。

如果下拉框中没找到需要的IP,说明机器还没从Apollo取过配置,可以点击手动输入IP来输入,输入完后点击添加按钮

注:对于公共Namespace的灰度规则,需要先指定要灰度的appId,然后再选择IP。

2.4 灰度发布

配置规则已经生效,不过灰度配置还没有发布。切换到配置Tab。

再次检查灰度的配置部分,如果没有问题,点击灰度发布。

在弹出框中可以看到主版本的值是2000,灰度版本即将发布的值是3000。填入其它信息后,点击发布。

发布后,切换到灰度实例列表Tab,就能看到10.32.21.22已经使用了灰度发布的值。

切换到主版本的实例列表,会看到主版本配置只有10.32.21.19在使用了。

后面可以继续配置的修改或规则的更改。配置的修改需要点击灰度发布后才会生效,规则的修改在规则点击完成后就会实时生效。

2.5 全量发布

如果灰度的配置测试下来比较理想,符合预期,那么就可以操作全量发布。

全量发布的效果是:

  • 灰度版本的配置会合并回主版本,在这个例子中,就是主版本的timeout会被更新成3000
  • 主版本的配置会自动进行一次发布
  • 在全量发布页面,可以选择是否保留当前灰度版本,默认为不保留。

我选择了不保留灰度版本,所以发布完的效果就是主版本的配置更新、灰度版本删除。点击主版本的实例列表,可以看到10.32.21.22和10.32.21.19都使用了主版本最新的配置。

2.6 放弃灰度

如果灰度版本不理想或者不需要了,可以点击放弃灰度。

2.7 发布历史

点击主版本的发布历史按钮,可以看到当前namespace的主版本以及灰度版本的发布历史。

原文:Apollo使用指南 - 五、灰度发布使用指南 - 《携程 Apollo v1.4 开发指南》 - 书栈网 · BookStack(这个网站是一个好网站啊)

二、业务上的

在实际工作中我在技术上主要是通过ab测试的工具实现灰度功能,但是ab组件我还没开发过,这里主要是介绍一个开源的组件,和之前的使用过的类似的一个组件:FeatureProbe,官网地址:适用场景 | FeatureProbe,它的使用场景主要有:

(一)功能灰度放量给用户​

FeatureProbe 最常见的应用场景是管理新功能的发布。当我们发布一个新功能或上线一个新运营活动时,可以先为一小部分用户启用这些功能,而不影响大多数用户,确保降低发布的风险。如果这些用户在使用中没有问题,我们就可以向更多的用户开放新版本,重复这个过程,直到所有的用户都更新到最新版本。

  • 使用案例

新上线的功能,首先开放给 10% 的用户,如果没有问题,在逐步放量到 50%, 100% 的用户

  • 操作流程
    • 运营人员在 FeatureProbe 上创建一个名叫"Promotional Percentage Rollout"的开关,初始化放量 10%: 
    • 开发人员在代码中引用 FeatureProbe 的 sdk 访问这个活动开关,并拿到相应展示内容展示给用户。
    • 在确认10%放量没有问题之后,运营人员直接把灰度比例逐步调大,直到放量给所有用户。

(二)配置在线促销活动​

许多公司定期开展促销活动。这些活动在大多数情况下使用类似的模板,通过使用 FeatureProbe 实现模板化配置,运营团队只需要修改几个参数就可以创建一个新的促销活动。

  • 使用案例

运营人员想推出商品秒杀活动,需要根据不同城市设置不同的商品价格,以往都是需要通过开发在代码中写好,一旦价格需要变动,开发人员要在代码中修改线上商品价格,在经过审核部署发布等一些列操作,才能生效,使用 FeatureProbe 的功能开关,只需要运营人员修改一下“价格”,便可一秒发布生效。

  • 操作流程
    • 运营人员在 FeatureProbe 上创建一个名叫"Promotional Campaign"的开关,配置不同价格规则和城市生效策略: 
    • 开发人员在代码中引用 FeatureProbe 的 sdk 访问这个活动开关,并拿到相应展示内容展示给用户。
    • 在测试上线之后,运营人员直接把"Promotional Campaign"开关"启用",配置内容便即刻生效了
    • 价格需要变动的情况下,运营人员只需要直接修改 variations 中的价格,并分发给对应的人群即可

(三)执行降级预案​

通常我们可以将提供给用户的服务划分为核心服务链路和非核心链路,当非核心链路上的服务出现异常时,我们可以通过关闭非核心服务来保障核心服务正常,也就是常说的服务降级。

  • 使用案例

某电商APP在用户搜索商品时提供了一个高级排序推荐的功能。由于高级排序推荐消耗计算资源较高,在用户高峰访问时段经常访问超时。通过FeatureProbe配置开关,可以在高峰时段关闭高级推荐,退回到简单排序功能从而保障用户体验。

  • 操作流程
    • 开发人员环境下创建一个名叫"Service Degrade"的开关,开关配置如下图所示: 
    • 开发人员在代码中关联开关的 key(service_degrade),设置 boolean 类型的 variations(是否打开降级)
    • 当依赖的库存服务发生故障后,可以将策略改为『关闭』,从而快速进行降级。

(四)A/B 实验​

我们经常会遇到多个产品方案听起来都有道理,不知道选哪个好的情况。这种情况下,可以先在小量人群上尝试多个方案,通过数据比较,找出最理想/最受欢迎的方案,再投放的全量人群,从而获得最好的投放效果。

  • 使用案例

某APP的支付按钮的颜色想由红色改为了绿色,于是使用 FeatureProbe 的功能开关,针对这两种颜色对巴黎的用户做个实验,看到底哪个颜色点击率更高

  • 操作流程
    • 产品经理创建一个名叫"Button Color AB Test"的开关,开关配置如下图所示: 
    • 开发人员在代码中关联开关的 key(color_ab_test),设置 string 类型的 variations(颜色分类)对应好定义的参数 city。
    • 在一切准备就绪后,产品经理直接把"Button Color AB Test"开关"启用",配置内容便即刻生效了
    • 产品经理通过查看实验分组和埋点点击数据得出结论:支付按钮为绿色购买率会更高。于是全量用户开放为绿色。

(五)白名单

其他还有的场景是使用白名单功能,觉得可以使用组件的人群组功能实现,步骤如下:

1、在平台创建人群组​
  1. 进入平台点击人群组/+人群组新建一个新的人群

填入名称和标识,点击布 创建并发

从列表中点击新创建的人群组,进入编辑

添加一个规则,选择类型,输入属性email,

  • 选择string类型
  • 规则是其中之一
  • 然后输入两个测试人员email
  • 点击发布

 6. 此时还没有开关使用这个『用户组』,这里直接点击下一步,并且确认变更。

2、在开关中使用人群组​

下面,我们来到开关列表,创建两个开关都使用以上创建的人群组qa_email

  1. 创建一个返回值为bool型的开关feature1,使用默认配置即可,然后点击创建并发布

进入开关feature1的编辑页面,状态改为生效,点击+ 增加规则,选择人群组规则

编辑规则

  • 选择属于人群组
  • 选择测试人员email人群组
  • 为人群组设置返回值variation2
  • 其余返回规则设置返回值variation1

发布开关feature1,重复以上步骤1-4,创建另一个使用相同人群组的开关feature2,以上所有功能均有对于的代码客户端实现

以上就是我在生产上实践过和认识到的灰度发布的一些认识,希望对大家有用。

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

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

相关文章

【开源】SpringBoot框架开发APK检测管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 开放平台模块2.3 软件档案模块2.4 软件检测模块2.5 软件举报模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 开放平台表3.2.2 软件档案表3.2.3 软件检测表3.2.4 软件举报表 四、系统展示五、核心代…

【el-tree 文字过长处理方案】

文字过长处理方案 一、示例代码二、关键代码三、效果图 一、示例代码 <divstyle"height: 600px;overflow: auto"class"text item"><el-treeref"tree":data"treeData":props"defaultProps"class"filter-tree&…

计算机网络——05Internet结构和ISP

Internet结构和ISP 互连网络结构&#xff1a;网络的网络 端系统通过接入ISPs连接到互连网 住宅、公司和大学的ISPs 接入ISPs相应的必须是互联的 因此任何2个端系统可相互发送分组到对方 导致的“网络的网络”非常复杂 发展和演化是通过经济的和国家的政策来驱动的 问题&…

课堂秩序要求有哪些内容

你是否曾经疑惑&#xff0c;为什么有些课堂总是秩序井然&#xff0c;而有些则混乱不堪&#xff1f;作为一位经验丰富的老师&#xff0c;我想告诉你&#xff0c;课堂秩序不仅仅是学生安静听讲那么简单&#xff0c;它背后涉及到许多关键因素&#xff0c;直接影响着教学质量和学习…

postgresql 手动清理wal日志的101个坑

新年的第一天&#xff0c;总结下去年遇到的关于WAL日志清理的101个坑&#xff0c;以及如何相对安全地进行清理。前面是关于WAL日志堆积的原因分析&#xff0c;清理相关可以直接看第三部分。 首先说明&#xff0c;手动清理wal日志是一个高风险的操作&#xff0c;尤其对于带主从的…

CleanMyMac X 4.14.7帮您安全清理Mac系统垃圾

CleanMyMac X 4.14.7是一款强大的 Mac 清理、加速工具和健康卫士,可以让您的 Mac 再次恢复巅峰性能。 移除大型和旧文件、卸载应用,并删除浪费磁盘空间的无用数据。 5倍 更多可用磁盘空间 CleanMyMac X 4.14.7帮您安全清理Mac系统垃圾 CleanMyMac X 4.14.7一键深度扫描mac系统…

Java常用类与基础API--String的理解与不可变性

文章目录 一、字符串相关类之不可变字符序列&#xff1a;String&#xff08;1&#xff09;对String类的理解(以JDK8为例说明)1、环境2、类的声明3、内部声明的属性 &#xff08;2&#xff09;String的特性&#xff08;3&#xff09;字符串常量的存储位置1、举例2、String的存储…

「优选算法刷题」:数青蛙

一、题目 给你一个字符串 croakOfFrogs&#xff0c;它表示不同青蛙发出的蛙鸣声&#xff08;字符串 "croak" &#xff09;的组合。由于同一时间可以有多只青蛙呱呱作响&#xff0c;所以 croakOfFrogs 中会混合多个 “croak” 。 请你返回模拟字符串中所有蛙鸣所需不…

Day39- 动态规划part07

一、爬楼梯 题目一&#xff1a;57. 爬楼梯 57. 爬楼梯&#xff08;第八期模拟笔试&#xff09; 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;…

【大厂AI课学习笔记】【1.6 人工智能基础知识】(3)神经网络

深度学习是机器学习中一种基于对数据进行表征学习的算法。观测值(例如一幅草莓照片)可以使用 多种方式来表示&#xff0c;如每个像素强度值的向量&#xff0c;或者更抽象地表示成一系列边、特定形状的区域等。 深度学习的最主要特征是使用神经网络作为计算模型。神经网络模型 …

深入理解 Nginx 插件及功能优化指南

深入理解 Nginx 插件及功能优化指南 深入理解 Nginx 插件及功能优化指南1. Nginx 插件介绍1.1 HTTP 模块插件ngx_http_rewrite_modulengx_http_access_module 1.2 过滤器插件ngx_http_gzip_modulengx_http_ssl_module 1.3 负载均衡插件ngx_http_upstream_modulengx_http_upstre…

CSS Selector—选择方法,和html自动——异步社区的爬取(动态网页)——爬虫(get和post的区别)

这里先说一下GET请求和POST请求&#xff1a; post我们平时是要加data的也就是信息&#xff0c;你会发现我们平时百度之类的 搜索都是post请求 get我们带的是params&#xff0c;是发送我们指定的内容。 要注意是get和post请求&#xff01;&#xff01;&#xff01; 先说一下异…

python+django人力资源管理系统7w5x3

技术栈 后端&#xff1a;python 前端&#xff1a;vue.jselementui 框架&#xff1a;django Python版本&#xff1a;python3.7 数据库&#xff1a;mysql5.7 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm .设计框架&#xff1a;Vue 1. 表现层&#xff1a;写多…

JCIM | MD揭示PTP1B磷酸酶激活RtcB连接酶的机制

Background 内质网应激反应&#xff08;UPR&#xff09; 中的一个重要过程。UPR是由内质网中的三种跨膜传感器&#xff08;IRE1、PERK和ATF6&#xff09;控制的细胞应激反应&#xff0c;当内质网中的蛋白质折叠能力受到压力时&#xff0c;UPR通过减少蛋白质合成和增加未折叠或错…

《计算思维导论》笔记:10.4 关系模型-关系运算

《大学计算机—计算思维导论》&#xff08;战德臣 哈尔滨工业大学&#xff09; 《10.4 关系模型-关系运算》 一、引言 本章介绍数据库的基本数据模型&#xff1a;关系模型-关系运算。 二、什么是关系运算 在数据库理论中&#xff0c;关系运算&#xff08;Relational Operatio…

蓝桥杯Web应用开发-CSS3 新特性【练习一:属性有效性验证】

练习一&#xff1a;属性有效性验证 页面上有一个邮箱输入框&#xff0c;当你的输入满足邮箱格式时&#xff0c;输入框的背景颜色为绿色&#xff1b;当你的输入不满足要求&#xff0c;背景颜色为红色。 新建一个 index2.html 文件&#xff0c;在其中写入以下内容。 <!DOCTYP…

读书笔记之《重塑大脑重塑人生》:大脑强大的可塑性

《重塑大脑重塑人生》作者是诺曼道伊奇&#xff0c;原作名: The Brain That Changes Itself: Stories of Personal Triumph from the Frontiers of Brain Science &#xff0c;于 2015-1-20出版。 诺曼•道伊奇&#xff08;Norman Doidge&#xff09;是医学博士&#xff0c;精…

【JavaEE】传输层网络协议

传输层网络协议 1. UDP协议 1.1 特点 面向数据报&#xff08;DatagramSocket&#xff09;数据报大小限制为64k全双工不可靠传输有接收缓冲区&#xff0c;无发送缓冲区 UDP的特点&#xff0c;我理解起来就是工人组成的**“人工传送带”**&#xff1a; 面向数据报&#xff08;…

ubuntu22.04 安装部署04:经常死机,鼠标,键盘无响应

相关文章&#xff1a; ubuntu22.04 安装部署01&#xff1a;禁用内核更新 ubuntu22.04安装部署02&#xff1a;禁用显卡更新 ubuntu22.04安装部署03&#xff1a; 设置root密码 一、现象说明 1. 开机一小时后&#xff0c;突然之间网络掉线&#xff0c;鼠标、键盘无反应。 2.…

中国判决生效,诺基亚全面与中国手机签署授权协议,降低专利费

日前媒体报道指诺基亚与中国两家手机企业都签署了专利授权协议&#xff0c;全面结束诉讼&#xff0c;而这一切正是在OPPO于去年底在重庆法院就OPPO与诺基亚的专利费诉讼问题&#xff0c;做出裁决之后&#xff0c;要求诺基亚按公平、公正等合理收费原则收取专利费。 这几年诺基亚…