带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(2)

简介: 带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(2)

带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(1)https://developer.aliyun.com/article/1339611?groupCode=taobaotech


单条数据查询

 

针对单条数据,可以通过数据源来判断来源。基于可灰度和回滚的原则,目标类和代理类的路由规则如下:

 

 

 

  1. 优先判断总开关,如果总控制开关已打开,则说明迁移已完成并且验证校验完毕,此时走代理接口,这样可以实现接口、数据的收口,达到我们的迁移目标。
  2. 如果数据不存在于老数据表中,那么无论这条数据有没有存在于新表中,我们都可以直接走代理接口,收拢新数据的接口逻辑。
  3. 如果数据存在于老数据表中,但是不在灰度名单内,此时使用目标类(回滚时可这么操作),走原来的接口方法,即老逻辑,这是不会影响到系统功能。
  4. 如果数据存在于老数据表中,但是在灰度名单内,说明这条数据已经迁移完成待验证,此时可以使用代理类

(灰度时可这么操作)走新的接口逻辑。

 

多条数据查询

 

不同于单条数据的查询,我们需要查询中新表、老表中所有符合条件的数据,多条数据查询涉及到数据重复的问题

(即数据会同时存在于老表和新表中),因此需要对数据进行去重,然后再合并返回结果。

 

数据更新

 

因为在数据迁移后到系统灰度的过程中存在中间时间,所以在数据更新时我们应该通过双写来保持新、老表数据的一致性。同时为了对接口和数据进行收口,我们也要先判断总控开关是否开启,如果总开关已经打开,则数据更新只需要更新新表即可。

 

数据插入

 

对数据和接口收口,我们需要对增量数据进行切换,因此直接使用代理类并将数据插入到新表中,控制老表的数据增量,在数据迁移的时候只需要考虑存量数据即可。

 

实践

 

例如在零售场景中,每个门店都有唯一的身份标识门店id,那么我们的灰度列表就可以存放门店id列表,按门店维    度进行灰度,来粒度化影响范围。

 

代理分发逻辑

 

分发逻辑是核心逻辑,数据的去重规则、接口/仓储层代理转发都是基于这套逻辑来控制:

 

 

 

  1. 先判断总开关,总开关开启说明迁移完成,此时全部通过代理类走新的接口逻辑和数据源。
  2. 判断灰度开关,如果在灰度过程中包含了灰度的门店,那么就通过代理类走新的接口;否则走原接口的老逻   辑,实现接口的切换。
  3. 新数据转发到代理类,对新的逻辑和数据进行收口,防止增量数据的产生。
  4. 批量查询接口需要转发到代理类,因为涉及到对新、老数据进行去重、合并的过程。
/**
*是否开启代理
*
*@param ctx 上下文
*@return 是:开启代理,否:不开启代理
*/
public Boolean enableProxy(ProxyEnableContext ctx) { if (ctx == null) {
return false;
}
// 判断总开关
if (总开关打开) {
// 说明数据迁移完成,接口全部切换return true;
}
if (单个门店操作) {
if (存在老数据源) {
// 判断是否在灰度名单,是则返回true;否则返回false;
} else {
// 新数据return true;
}
} else {
// 批量查询,需要走代理合并新、老数据源return true;
}

 

带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(3)https://developer.aliyun.com/article/1339609?groupCode=taobaotech

相关文章
带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(1)
带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(1)
244 1
|
存储 Java 测试技术
记一次堆内外内存问题的排查和优化
记一次堆内外内存问题的排查和优化
659 0
|
3月前
|
人工智能 数据可视化 Java
什么是低代码(Low-Code)?低代码核心架构技术解析与应用展望
低代码开发正成为企业应对业务增长与IT人才短缺的重要解决方案。相比传统开发方式效率提升60%,预计2026年市场规模达580亿美元。它通过可视化界面与少量代码,让非专业开发者也能快速构建应用,推动企业数字化转型。随着AI技术发展,低代码与AIGC结合,正迈向智能化开发新时代。
|
安全 Java
一种可灰度的接口迁移方案
在快速迭代的互联网背景下,系统为了实现快速上线,常常会选择最快的开发模式,例如我们常见的mvp版本迭代。大部分的业务系统对于未来业务的发展是不确定的,因此随着时间的推移,往往会遇到各种各样的瓶颈,例如系统性能、无法适配业务逻辑等问题,这时可能就涉及到系统架构的升级。系统升级往往包含最基础的两个部分:接口迁移重构和数据迁移重构,在系统架构升级的过程中,最重要的是需要保证系统稳定性,即用户不感知。因此文本的目的是提供一种可灰度、回滚的设计思路,实现稳定的架构升级。
876 1
一种可灰度的接口迁移方案
|
Java 中间件 Maven
如何实现Java类隔离加载?
Java 开发中,如果不同的 jar 包依赖了某些通用 jar 包的版本不一样,运行时就会因为加载的类跟预期不符合导致报错。如何避免这种情况呢?本文通过分析 jar 包产生冲突的原因及类隔离的实现原理,分享两种实现自定义类加载器的方法。
如何实现Java类隔离加载?
|
SQL 安全 Java
慢SQL治理经验总结
慢SQL治理经验总结
732 0
|
消息中间件 设计模式 监控
简洁应用框架VSEF的架构
简洁应用框架VSEF的架构
287 0
|
存储 消息中间件 缓存
一文读懂RocketMQ的高可用机制——消息存储高可用
一文读懂RocketMQ的高可用机制——消息存储高可用
1642 1
|
Kubernetes Java Docker
K8s 中 Pod OOMKilled 原因
K8s 中 Pod OOMKilled 原因
915 0
|
关系型数据库 MySQL Java
mysql连接池的设计与实现
mysql连接池的设计与实现
396 0