失效链接处理 |
高可用:灰度发布和回滚有什么用? PDF 下载
本站整理下载:
相关截图:
主要内容:
线上的系统通常情况下会⼀直迭代更新下去,这意味着我们需要不断发布新版本
来替换⽼版本。如何保证新版本稳定运⾏呢? 必要的测试必不可少,但灰度发布
与回滚也是两个制胜法宝!
灰度发布(⼜名⾦丝雀发布) 是⼀种平滑发布新版本系统的⽅式。
我举⼀个简单的例⼦,⼤家⼀看应该就明⽩灰度发布的思想了。
假如我们有⼀个服务器集群,每个⽤户固定访问服务器集群中的某⼀台服务器,
当我们需要发布新版本或者上新功能的时候,我们可以将服务器集群分成若⼲部
分,每天只发布新版本到⼀部分服务器,这样的话,就有⼀部分⽤户可以使⽤最
新版本。发布之后,我们需要观察新版本的服务器运⾏是否稳定且没有故障。如
果没问题的话,我们第⼆天继续发布⼀部分服务器,通常需要持续⼏天才把整个
集群全部发布完毕。期间如果发现有问题的话,只需要回滚已发布的那部分服务
器即可。
上⾯列举的这个例⼦其实是灰度发布常⽤的⼀种⽅式 - AB 测试。AB 测试的思想
就是就是把⽤户分成两组,⼀组⽤户使⽤ A ⽅案(新版本),⼀组⽤户使⽤ B ⽅
案(⽼版本)。
另外,这个例⼦是通过服务器来区分的⽤户,⽐较粗暴,⽽且在⼀些情况下⽆法
使⽤。⼀般情况下,我们是建议在进⾏灰度发布之前对系统⽤户进⾏筛选,根据
⽤户的相关信息和各项指标(⽐如活跃度,违规次数)来筛选出⼀批可以优先使
⽤新版的⽤户。我们只需要通过⼀些⼿段将这些⽤户的请求定向到新版本服务即
可!为了直观对新版本服务的稳定性进⾏观测,灰度发布的正确完成还需要依赖
可靠的 监控系统 。
好了!相信前⾯的介绍已经让你搞清了灰度发布是个什么东⻄。下⾯,我们来简
单总结⼀下灰度发布的思想: 简单来说,灰度发布的思想就是先分配⼀⼩部分请
求流量到新版本,看看有没有问题,没问题的话,再⼀点点地增加流量,最终让
所有流量都切换到新版本。
为什么灰度发布⼜被称为⾦丝雀发布呢?
⾦丝雀也被称为瓦斯报警⻦,对于有毒⽓体⾮常敏感,在 90 年代的时候经常被
拿来检测毒⽓(有点残忍,后来被禁⽌了)。为了避免⾦丝雀直接被毒死了,⼈
们想到了⼀个办法,把⾦丝雀放在⼀个可以控制通⽓⼝⽓体流量的笼⼦,需要⾦
丝雀预警的时候把通⽓⼝慢慢打开,如果笼⼦中的⾦丝雀被毒⽓毒晕,关闭通⽓
⼝然后让往笼⼦⾥充氧⽓抢救⼀下⾦丝雀。
⾦丝雀预警毒⽓通过控制通⽓⼝⽓体流量来减⼩潜在的毒⽓对⾦丝雀的影响,⾦
丝雀发布通过控制发布的新版本的使⽤范围来减⼩潜在的问题对整体服务的影
响,两者思想⾮常类似。
很多程序员有可能也是为了纪念那些因为毒⽓⽽牺牲的⾦丝雀才把这种发布⽅式
冠上了⾦丝雀的名称。
这⾥介绍⼏种⽐较常⻅的⽅案,对于 Java 后端开发来说,我觉得了解就⾏了,
⼀般在公司⾥这种事情⼀般是由 Devops 团队来做的。
1、基于 Nginx+OpenResty+Redis+Lua 实现流量动态分流来实现灰度发布,新
浪的 ABTestingGateway 就是这种基于这种⽅案的⼀个开源项⽬。
2、使⽤ Jenkins + Nginx 实现灰度发布策,具体做法可以参考:⼿把⼿教你搭建
⼀个灰度发布环境 。这种⽅案的原理和第⼀种类似,都是通过对 Nginx ⽂件的修
改来实现流量的定向分流。类似地,如果你⽤到了其他⽹关⽐如 Spring Cloud
Gateway 的话,思路也是⼀样的。另外, Spring Cloud Gateway 配合 Spring
Cloud LoadBalancer(官⽅推荐)/Ribbon 也可以实现简单的灰度发布,核⼼思
想也还是⾃定义负载均衡策略来分流。
3、基于 Apollo 动态更新配置加上其⾃带的灰度发布策略来实现灰度发布。
这种⽅法也是通过修改灰度发布配置的⽅式来实现灰度发布,如果灰度的配置测
试没问题的话,再全量发布配置。
具体做法可以参考:
灰度发布使⽤指南 - 官⽅⽂档
灰度实战基础之 Apollo
4、通过⼀些现成的⼯具来做,⽐如说 Rainbond(云原⽣应⽤管理平台)就⾃带
了灰度发布解决⽅案并且还⽀持滚动发布和蓝绿发布。
5、Flagger
这是之前看⻢若⻜⽼师的《Service Mesh 实战》这⻔课的时候看到的⼀个⽅法。
Flagger 是⼀种渐进式交付⼯具,可⾃动控制 Kubernetes 上应⽤程序的发布过
程。通过指标监控和运⾏⼀致性测试,将流量逐渐切换到新版本,降低在⽣产环
境中发布新软件版本导致的⻛险。
Flagger 可以使⽤ Service Mesh(App Mesh,Istio,Linkerd)或 Ingress
Controller(Contour,Gloo,Nginx)来实现多种部署策略(⾦丝雀发布,A/B
测试,蓝绿发布)。
光有灰度发布还不够,如果在灰度发布过程中(灰度期)发现了新版本有问题,
我们还需要有回滚机制来应对。类似于数据库事务回滚,系统发布回滚就是将新
版本回退到⽼版本。
回滚通常的做法是怎样的呢?
1. 提前备份⽼版本,新版本遇到问题之后,重新部署⽼版本。
2. 同时部署⼀套新版本,⼀套旧版本,两者规模相同新版本出问题之后,流量
全部⾛⽼版本(蓝绿发布)。
正如余春⻰⽼师在《软件架构设计:⼤型⽹站技术架构与业务架构融合之道》这
本书中写道:
不过, 灰度发布和回滚也不是银弹,毕竟计算机世界压根不存在银弹。
在⼀些要求⾮常严格的系统(如交易系统、消防系统、医疗系统)中,灰度发布
和回滚使⽤不当就会带来⾮常严重的⽣产问题。
漫谈⾦丝雀部署-Thoughtworks 洞⻅
⾦丝雀发布、滚动发布、蓝绿发布到底有什么差别?关键点是什么?
基于 Flagger 和 Nginx-Ingress 实现⾦丝雀发布
有赞灰度发布与蓝绿发布实践 - 有赞技术
如何设计可靠的灰度⽅案 - 阿⾥技术
什么是灰度发布,以及灰度发布 A/B 测试
美团收银灰度发布设计与实践
这部分内容为可选内容,你也可以选择不进⾏学习。
相关⾯试题 :
●
什么是灰度发布?有什么好处?
●
你的项⽬是如何做灰度发布的?
●
为什么灰度发布⼜被称为⾦丝雀发布呢?
●
回滚通常的做法是怎样的呢?
灰度发布与回滚(可选)
灰度发布
灰度发布介绍
灰度发布常⻅⽅案
●
●
回滚机制
既然⽆法避免系统变更,我们能做的就是让这个过程尽可能平滑、受控,这就
是灰度与回滚策略。
参考
●
●
●
⽂章推荐
●
●
●
●
V1 V1 V1
80
|