兼容性场景分享

本文分享了系统兼容性场景问题,包括接口兼容性,如修改出入参字段、接口方法等;存储兼容性,涉及缓存和数据库;异步消息兼容性,生产者修改删除字段会致消费异常;注册中心兼容性,切换时可能引发分布式锁失效等;日志兼容性,格式变化会使报警或指标计算出错。

兼容性场景分享

兼容性场景

  1. 接口兼容性:
    修改/删除现有出入参字段
    字段格式: 比如可还款金额原来是 1000.00 这种, 后来我们将字段格式变为了 1,000.00, 调用我们系统使用 new BigDecimal() 时候就会疯狂报错
    字段含义: 这个就是原来这个字段代表利息, 后来将这个字段代表罚息, 会造成系统的混乱

验证要求: 比如使用了 @Length(min=10,max=100) 注解到了 userName 字段, 后面感觉长度 100 太长啦, 改为了 50, 结果出现了一个 50+ 的人名, 就会造成调用方系统报错

  1. 修改/删除老的接口方法

修改 http 方式: 本来是 put, 改为了 post 方式, 这样一来这个接口的调用方就会因为找不到这个接口而报错
修改出入参: 效果同修改字段的相关, 在加上比如有个入参 aaa, 感觉没人用的就删除了, 调用方用到这个字段也会报错或者效果不一致

修改接口名称: 这样一来这个接口的调用方就会因为找不到这个接口而报错

存储兼容性:

  1. 缓存兼容性
    序列化方式: 一般使用缓存框架都有一种序列化方式, json 或者 string 这种, 如果改了序列化方式为 json, 而生产上的数据目前是 string 类型的, 就会导致报错, 如果此时没做缓存报错的弱依赖, 就会导致大的问题

数据格式: 原来缓存进去的是 Order, 后来这个程序作了扩展, 缓存进去是是 List 就会在发布的时候因为读取之前的数据而引发报错

数据库兼容性

字段的修改/删除也参考第一段的影响, 比如用枚举接收数据库字段, 结果新的数据增加了枚举 A, 这个时候应用代码还没有部署最新的版本, 就会造成程序报错

新增字段历史数据问题: 新增的字段如果有默认值一般可以没问题, 要是没有默认值应用程序层面可能会报空指针等问题

异步消息的兼容性:

生产者修改删除字段, 可能有旧的消费者代码依赖相应字段, 所以删除了会导致消费异常

注册中心的兼容性:
当使用分布式中间件等切换注册中心需要考虑发布过程中一组机器用旧的注册中心, 一组用新的, 可能导致分布式锁失效, 服务找不到等异常

日志的兼容性:

可能有些字段用来生成监控指标和报警, 可能由于日志框架或者日志格式的变化导致报警失效或者指标计算错误等, 需要考虑日志的兼容性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值