带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(5)https://developer.aliyun.com/article/1339607?groupCode=taobaotech
增量数据
代码省略,直接执行代理仓储层的插入方法即可
更新数据
更新数据需要双写,如果总开关打开(即迁移完毕),则可以停止老数据的写入,因为不会再读了。
@Transactional(rollbackFor = Throwable.class) public <T> Boolean update(T t) { if (t == null) { return false; } if (总开关没打开) { // 数据没有迁移完毕 // 更新要双写,如有,保持数据一致targetRepository.update(t); } // 更新新数据proxyRepository.update(t); return true;
实践
本文只是提出一种迁移的方案思路,可能并不能适用于所有场景,但是在系统升级的过程中,工程师面对的最终的目标应该是一致的,即为了让系统稳定的上线,并且在出现问题时能够安全回滚。本文的实现逻辑是通过注解和切面实现对目标接口的方法进行转发,转发到代理类接口,从而切换到新逻辑和新数据源,并由ProxyManager来适 配数据源的代理分发逻辑,完成数据的查询、更新、新增逻辑。
团队介绍
天猫校园技术团队,一个致力于服务校园人群,提升校园人群生活品质,提供校园saas全套解决方案的技术团队。