带你读《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

相关文章
|
JSON NoSQL MongoDB
MongoDB Compass的安装及使用图文说明(非常详细)
MongoDB Compass的安装及使用图文说明(非常详细)
4524 2
|
4月前
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
412 0
|
Java Go
go语言在 switch 语句中使用 break
go语言在 switch 语句中使用 break
360 5
|
数据采集 Java 测试技术
精准测试如何落地
在快速迭代的软件开发环境中,精准测试作为一种高效、针对性的测试方法,正逐步成为企业的首选。本文探讨了精准测试的落地方法、对质量指标的影响、数据统计与跟踪度量、提高投入产出收益率的策略及卡点数据的具体内容。通过优化测试用例、代码关联、技术融合及流程优化,精准测试能够显著提升软件质量和测试效率。
|
存储 SQL 缓存
AnalyticDB 实时数仓架构解析
AnalyticDB 是阿里云自研的 OLAP 数据库,广泛应用于行为分析、数据报表、金融风控等应用场景,可支持 100 trillion 行记录、10PB 量级的数据规模,亚秒级完成交互式分析查询。本文是对 《 AnalyticDB: Real-time OLAP Database System at Alibaba Cloud 》的学习总结。
306 1
|
SQL 存储 数据挖掘
快速入门:利用AnalyticDB构建实时数据分析平台
【10月更文挑战第22天】在大数据时代,实时数据分析成为了企业和开发者们关注的焦点。传统的数据仓库和分析工具往往无法满足实时性要求,而AnalyticDB(ADB)作为阿里巴巴推出的一款实时数据仓库服务,凭借其强大的实时处理能力和易用性,成为了众多企业的首选。作为一名数据分析师,我将在本文中分享如何快速入门AnalyticDB,帮助初学者在短时间内掌握使用AnalyticDB进行简单数据分析的能力。
544 2
|
安全 数据挖掘 程序员
程序员必读 | 《业务架构解构与实践》
程序员必读 | 《业务架构解构与实践》
1014 0
|
安全 Java
一种可灰度的接口迁移方案
在快速迭代的互联网背景下,系统为了实现快速上线,常常会选择最快的开发模式,例如我们常见的mvp版本迭代。大部分的业务系统对于未来业务的发展是不确定的,因此随着时间的推移,往往会遇到各种各样的瓶颈,例如系统性能、无法适配业务逻辑等问题,这时可能就涉及到系统架构的升级。系统升级往往包含最基础的两个部分:接口迁移重构和数据迁移重构,在系统架构升级的过程中,最重要的是需要保证系统稳定性,即用户不感知。因此文本的目的是提供一种可灰度、回滚的设计思路,实现稳定的架构升级。
919 1
一种可灰度的接口迁移方案
|
关系型数据库 MySQL Java
mysql连接池的设计与实现
mysql连接池的设计与实现
433 0
|
消息中间件 设计模式 监控
简洁应用框架VSEF的架构
简洁应用框架VSEF的架构
323 0