带你读《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)
125 1
带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(3)
带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(3)
带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(4)
带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(4)
带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(5)
带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(5)
|
安全
带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(6)
带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(6)
|
存储 运维 监控
带你读《2022技术人的百宝黑皮书》——移动域全链路可观测架构和关键技术(5)
带你读《2022技术人的百宝黑皮书》——移动域全链路可观测架构和关键技术(5)
141 0
|
监控 前端开发 JavaScript
带你读《2022技术人的百宝黑皮书》——前端质量之灰度监控的有效实践(2)
带你读《2022技术人的百宝黑皮书》——前端质量之灰度监控的有效实践(2)
120 0
|
监控 前端开发 API
带你读《2022技术人的百宝黑皮书》——前端质量之灰度监控的有效实践(3)
带你读《2022技术人的百宝黑皮书》——前端质量之灰度监控的有效实践(3)
|
监控 前端开发 安全
带你读《2022技术人的百宝黑皮书》——前端质量之灰度监控的有效实践(1)
带你读《2022技术人的百宝黑皮书》——前端质量之灰度监控的有效实践(1)
159 0
|
监控 前端开发 JavaScript
带你读《2022技术人的百宝黑皮书》——前端质量之灰度监控的有效实践(5)
带你读《2022技术人的百宝黑皮书》——前端质量之灰度监控的有效实践(5)