大家好,我是架构摆渡人。这是实践经验系列的第二篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友。

上篇文章给大家分享了开关的应用技巧,通过开关去保证上线时的稳定性。但是开关还是属于一刀切的那种,如果流量特别大的情况下,影响面还是挺大的,所以今天就给大家再补充一种方式,灰度放量

举个例子说明下:比如你在重构订单详情接口,这个接口之前是在A服务里面,由于后续服务拆分更精细化,新拆了一个服务,需要将这个接口迁移到新服务里面去。此时最简单的做法就是把代码复制过去,然后让客户端用新的详情接口。

但是这样老版本的APP怎么办?这个方案只能新版本的APP可以使用。所以对外的接口是不能变的,内部需要去做路由动作,那么最方便的肯定是在网关做了,所以网关是特别适合做灰度逻辑的地方,下面我们先来看网关如何做灰度。

网关统一灰度

网关默认是路由的/v1/order/detail接口,现在新加了/v2/order/detail接口,如果全部切过去,万一有问题,所有用户都会受到影响,所以需要灰度放量来将风险降到最低。

网关内部可以对指定的用户路由到v2版本的接口,也可以根据地区路由,方式有很多种,常用的路由方式有哪些我会在下面进行讲解。

应用内部自己灰度

除了在网关进行灰度,另一种方案就是应用内部自己灰度。也就是说APP请求到网关,网关到具体的服务,这个服务此时还是之前的老服务,需要在这个老服务调用新服务的接口,然后返回,这就是应用内部自己灰度的方式。

一旦灰度完成,老服务内部的代码就可以删除,当请求过来的时候只需要路由到请服务即可。然后可以将网关路由的地址直接改成新服务的地址,此时老服务内的接口可以直接删除,完成迁移动作。

灰度方式介绍

用户白名单灰度

此方式较为简单,就是构建一个用户的白名单,可以用手机号或者用户ID,白名单可以放在数据表里面,也可以放在配置中心。从性能角度考虑放配置中心更合适,更新后也能实时生效。

也就是当前请求的用户在你配置的白名单里面,就让他访问新版本的接口,不在就默认还是旧接口。通过这种方式观察一段时间,如果没有问题,就可以加大灰度人数或者全量放开。

用户百分比灰度

提取用户ID的后两位,然后产生一个随机数,如果匹配上了,这个用户就灰度中了。

百分比灰度

百分比灰度也是一种常用的灰度方式,此方式不会固定用户,而是采用随机的方式进行。如果设置了10%的灰度比例,也就是100次请求中有10次请求会被灰度中,会访问新的接口。

当然为了影响降到最低,也可以实现千分比,万分比,慢慢调高比例,一点点往上灰度,这种方式非常稳妥。

伪代码如下:

public static void main(String[] args) {// 灰度比例,配在配置中心int grayScale = 10;int probability = new Random().nextInt(100);if (probability < grayScale) {// 调用 /v2/order/detail} else {// 走本地老逻辑}
}

稳定性保障,如何慢慢放量灰度相关推荐

  1. 阿里巴巴稳定性保障体系

    阿里巴巴稳定性保障体系 前言 我从业之初便开始扮演"救火队员"角色,经常去线上执行"救火".止损.攻关等应急工作,再通过一系列的分析.推理.验证-"抽 ...

  2. 货拉拉技术副总监陈永庭:基于公共云的技术稳定性保障实践

    引言 2021年10月22日,在云栖大会的<云上运维最佳实践>分论坛,货拉拉技术副总监陈永庭发表了主题为"基于云的货拉拉技术稳定性保障实践"的演讲,为大家分享了货拉拉在 ...

  3. Kubernetes 稳定性保障手册(极简版)

    作者 | 悟鹏 来源 | 阿里巴巴云原生 头图 | 下载于视觉中国 Kubernetes 在生产环境中的采用率越来越高,复杂度越来越高,由此带来的稳定性保障的挑战越来越大. 对于基于 Kubernet ...

  4. 高性能高并发系统的稳定性保障

    高性能高并发系统的稳定性保障 原创 2016-12-21 肖飞 开涛的博客 作者:肖飞,于2011年8月份加入京东,曾亲身参与到京东的应用性能监控.统一日志.流式计算.内存缓存.四层防攻击等一些基础技 ...

  5. Kubernetes 稳定性保障手册:洞察+预案

    作者 | 悟鹏 来源 | 阿里巴巴云原生公众号 <Kubernetes 稳定性保障手册>系列文章: ​ Kubernetes 稳定性保障手册 – 极简版 Kubernetes 稳定性保障手 ...

  6. Kubernetes 稳定性保障手册 -- 可观测性专题

    作者 | 悟鹏 来源 | 阿里巴巴云原生公众号 <Kubernetes 稳定性保障手册>系列文章: Kubernetes 稳定性保障手册 – 极简版 Kubernetes 稳定性保障手册 ...

  7. Kubernetes 稳定性保障手册 -- 日志专题

    作者 | 悟鹏.沉醉 来源 | 阿里巴巴云原生公众号 <Kubernetes 稳定性保障手册>系列文章: Kubernetes 稳定性保障手册 – 极简版 Kubernetes 稳定性保障 ...

  8. Kubernetes 稳定性保障手册 -- 极简版

    作者 | 悟鹏 来源 | 阿里巴巴云原生公众号 Kubernetes 在生产环境中的采用率越来越高,复杂度越来越高,由此带来的稳定性保障的挑战越来越大. 对于基于 Kubernetes 的云产品,稳定 ...

  9. 这是阿里技术专家对 SRE 和稳定性保障的理解

    作者 | 悟鹏 来源|阿里巴巴云原生公众号 前言 在技术工作中,对于产品/基础技术研发和 SRE 两种角色,通常会有基于「是否侧重编码」的理解.对于产品研发转做 SRE ,经常会产生是否要「脱离编码工 ...

最新文章

  1. C++中public、protected、private的差别
  2. Apache服务基础调优参数详解
  3. python代码打好了怎么运行-python代码是怎样运行的
  4. Matlab中常用希腊字母表查询
  5. python sub 不区分大小写_Python网络爬虫入门篇
  6. Docker Nacos Mysql集群
  7. Godaddy Windows主机组件支持情况
  8. “不要害怕 RAID!”
  9. JavaScript使用计时事件制作的电子时钟
  10. 有自学能力的人,赚钱极其简单—聚财云库
  11. JAVA导出EXCEL——POI(转)
  12. udp洪水攻击java_Linux网络编程--洪水攻击详解
  13. 中断上下文中的preempt count
  14. Oracle 11gR2 RSF(Recurive Subquery factoring)
  15. 恒指均线流区间突破法的构建
  16. 情感分析的分类,情感分析模型有哪些,情感分析的应用场景,情感分析的发展趋势
  17. 电大计算机科学与技术专业论文,国家开放大学计算机科学与技术专业毕业设计(论文)要求...
  18. python公里转英里_python公里转英里_从英里换算为公里
  19. Solr之——配置中文分词IKAnalyzer和拼音分词pinyinAnalyzer
  20. IP 域名 DNS之间的区别

热门文章

  1. java并行任务dispatch_Java模拟 双分派Double Dispatch
  2. oracle 字符集 自造字,循序渐进Oracle:自定义字符集的使用、更改字符集的内部方式及字符集更改的案例...
  3. oracle sql 平均分配 分组_SQL学习二
  4. 高倍数泡沫装置PHP_平衡式泡沫比例混合装置 PHP - 压力式比例混合装置 - 武汉鑫澳龙消防设备有限公司...
  5. Linux系统下活用History命令
  6. html怎么将页面放到中间,HTML – 如何将div放在另外两个(左和右)div之间?
  7. qt获取窗口的右上角位置_如何获得 Qt窗口部件在主窗口中的位置--确定鼠标是否在某一控件上与在控件上的位置...
  8. java一天一次_做JAVA两年,月薪18k,这些自学心得你绝对值得借鉴
  9. [Ahoi2013]差异[后缀数组+单调栈]
  10. Educational Codeforces Round 80 (Rated for Div. 2)SZU cf集训round2 C~E(dp,状压+二分,树状数组+逆向思维)