可回滚的代码开发指南

e636e408c7f5aad7b9d0b48a78c7bb55.png

一、导论

可回滚是软件发布的基本规范,尤其是在互联网分布式应用中,如果上线的新版本有bug又不能回滚止损,带来的后果将是灾难性的。

二、可回滚发布

回滚指的是程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。在回滚之后,程序依然能够正常处理,称为可回滚。

不可回滚原因大多是旧程序不能处理新数据导致的。

1、向前兼容的手段

(1)数据库兼容

新加字段:需要设置默认值,默认值要保证新旧代码逻辑的语义一致性。

删除字段:新版本全量发布后,最好迭代2-3个版本后,再删除无用字段,同时要做好数据库备份。

新加唯一约束:首先要确保原有的数据值没有重复的,再添加唯一索引。

(2)对外提供RPC服务

入参新加字段:设置为可选的,如果没设置值,要有老业务逻辑兼容代码

返回值字段:设置为可选的,如果是新版本肯定有值字段,需要在字段描述文档里做好备注

如果入参和返回值结果差异较大,建议新建一个RPC方法,逐渐把业务方调用迁移到新方法

(3)对外提供HTTP服务

HTTP接口和RPC接口的不同是没有强制的约束,数据交换大多采用JSON形式,虽然灵活性强,但是约束力低给维护带来很大的成本,采用比如Swagger等工具,比如给指定字段名、类型、是否必填、不填写的默认值等来解决。

2、可回滚测试

设计考虑可回滚性;通常要在测试环境演练可回滚性。同时QA同学要把可回滚作为质量验收的一部分。

3、发布手段

(1)蓝绿发布

线上部署两个集群,每个集群都能抗住所有的流量,发布的时候一个集群接受用户请求,等当前集群全部发布成功后,再把流量全部迁移到新版本集群。可保证新版本特性同一时间对所有用户生效;保证系统高可用,一个集群出问题,可快速切换到备用集群;

缺点:日常使用的机器只有一半,造成浪费;

(2)金丝雀发布

采用金丝雀部署,可以在生产环境的基础设施中小范围的部署新的应用代码。一旦应用新发布,只有少数用户被路由到它。最大限度的降低影响。检测新版本没问题,再逐步扩大发布范围直至全量。

实现灰度发布,需要部署系统设置分批次发布,同时必须有监控、报警等相关的系统的配合。确定没问题后再扩量。

4、监控报警

常用的发布相关的监控报警包括:

  • 新、旧版本的流量及百分比

  • 对外提供的接口的性能指标、下游的性能指标(TP50、TP90、TP99、TP999)等

  • 异常指标及报警

三、总结

保证线上稳定性是一项复杂的工程,需要从各个方面来保证,希望能给大家带来的帮助。

原文链接:

https://lesofn.com/archives/gou-jian-ke-hui-gun-de-ying-yong-ji-shang-xian-checklist-shi-jian

本文作者:木小丰,美团Java高级工程师

推荐阅读:

世界的真实格局分析,地球人类社会底层运行原理

不是你需要中台,而是一名合格的架构师(附各大厂中台建设PPT)

企业IT技术架构规划方案

论数字化转型——转什么,如何转?

企业10大管理流程图,数字化转型从业者必备!

【中台实践】华为大数据中台架构分享.pdf

华为的数字化转型方法论

华为如何实施数字化转型(附PPT)

超详细280页Docker实战文档!开放下载

华为大数据解决方案(PPT)

9e2532c96bd734dc8ce55c737f6f8e80.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值