

编写可回滚的代码
source link: https://lesofn.com/archives/bian-xie-ke-hui-gun-de-dai-ma
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

编写可回滚的代码
木小丰 2021年11月16日 72次浏览可回滚是软件发布的基本规范,尤其是在互联网分布式应用中,如果上线的新版本有bug又不能回滚止损,带来的后果将是灾难性的。
二、可回滚发布
回滚指的是程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。在回滚之后,程序依然能够正常处理,称为可回滚。
不可回滚原因大多是旧程序不能处理新数据导致的。
1、向前兼容的手段
(1)数据库兼容
新加字段:需要设置默认值,默认值要保证新旧代码逻辑的语义一致性。
删除字段:新版本全量发布后,最好迭代2-3个版本后,再删除无用字段,同时要做好数据库备份。
新加唯一约束:首先要确保原有的数据值没有重复的,再添加唯一索引。
(2)对外提供RPC服务
入参新加字段:设置为可选的,如果没设置值,要有老业务逻辑兼容代码
返回值字段:设置为可选的,如果是新版本肯定有值字段,需要在字段描述文档里做好备注
如果入参和返回值结果差异较大,建议新建一个RPC方法,逐渐把业务方调用迁移到新方法
(3)对外提供HTTP服务
HTTP接口和RPC接口的不同是没有强制的约束,数据交换大多采用JSON形式,虽然灵活性强,但是约束力低给维护带来很大的成本,采用比如Swagger等工具,比如给指定字段名、类型、是否必填、不填写的默认值等来解决。
2、可回滚测试
设计考虑可回滚性;通常要在测试环境演练可回滚性。同时QA同学要把可回滚作为质量验收的一部分。
3、发布手段
(1)蓝绿发布
线上部署两个集群,每个集群都能抗住所有的流量,发布的时候一个集群接受用户请求,等当前集群全部发布成功后,再把流量全部迁移到新版本集群。可保证新版本特性同一时间对所有用户生效;保证系统高可用,一个集群出问题,可快速切换到备用集群;
缺点:日常使用的机器只有一半,造成浪费;
(2)金丝雀发布
采用金丝雀部署,可以在生产环境的基础设施中小范围的部署新的应用代码。一旦应用新发布,只有少数用户被路由到它。最大限度的降低影响。检测新版本没问题,再逐步扩大发布范围直至全量。
实现灰度发布,需要部署系统设置分批次发布,同时必须有监控、报警等相关的系统的配合。确定没问题后再扩量。
4、监控报警
常用的发布相关的监控报警包括:
- 新、旧版本的流量及百分比
- 对外提供的接口的性能指标、下游的性能指标(TP50、TP90、TP99、TP999)等
- 异常指标及报警
保证线上稳定性是一项复杂的工程,需要从各个方面来保证,希望能给大家带来的帮助。
本文作者:木小丰,美团Java高级工程师,专注有价值的原创文章。欢迎关注公共号:Java研发
本文链接:编写可回滚的应用代码
Recommend
-
134
编写扁平化的代码冉余原文:
-
118
1.前言在月初的时候,发了CSS3热身实战--过渡与动画(实现炫酷下拉,手风琴,无缝滚动)。js的代码库也发过两次,两篇文章。之前也写了css3的热身实战,既然热身完了,是时候开始封装css3的代码库了,相比起js的代码库,css3的代码库的逻辑性就更加简单了
-
98
1.前言 大家在开发的时候应该知道,有很多常见的实例操作。比如数组去重,关键词高亮,打乱数组等。这些操作,代码一般不会很多,实现的逻辑也不会很难,下面的代码,我解释就不解释太多了,打上注释,相信大家就会懂了。但是,用的地方会比较,如果项目有哪个地方...
-
143
PHP - @frozenway - 写个变量$a,要先按 shift 建再按一下数字 4 键才能打出$号,有时候不小心按了两下 shift 键,然后电脑的输入法变成了中文,就写成¥ a 了,而且写 php 代码经常要按 shitf 键啊
-
115
[译] 编写和优化 Go 代码
-
85
介绍 在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法。我们首先将介绍如何定义可度量的性能指标,然后看看有哪些工具可以用来度量和监控应用程序性能,以及确定性能瓶颈。 我们还将看到一些...
-
6
构建可回滚的应用及上线checklist实践 木小丰 2021年11月20日 16次浏览 构建可回滚的应用及上线checklist实践 在互联网分布式应用...
-
5
【JUC】可回调任务FutureTask原理发布于 2 月 4 日上一篇观察ThreadPoolExecutor的submit方法的时候,...
-
1
图片来源:视觉中国多家媒体近日登文:...
-
6
联想小新Pro超能本2023升级140W快充:半小时就可回血66% 2023-01-16 14:48 出处/作者:快科技 整合编辑:佚名 今天,联想...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK