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

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

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


image.png增量数据

代码省略,直接执行代理仓储层的插入方法即可

 

image.png更新数据

更新数据需要双写,如果总开关打开(即迁移完毕),则可以停止老数据的写入,因为不会再读了。

@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全套解决方案的技术团队。

相关文章
|
缓存 前端开发 JavaScript
第三章(概念篇) 微前端架构模式
第三章(概念篇) 微前端架构模式
360 0
运行项目遇到:该网页无法正常运作,localhost将您重定向的次数过多时的解决方案
运行项目遇到:该网页无法正常运作,localhost将您重定向的次数过多时的解决方案
556 1
|
供应链 前端开发 算法
技术人应该知道的电商运营小知识(上)
技术人应该知道的电商运营小知识(上)
923 0
|
存储 设计模式 算法
DDD之于业务支撑的意义
DDD之于业务支撑的意义
393 0
|
11月前
|
SQL 存储 数据库
《深度剖析SQL数据类型转换:隐式与显式的奥秘》
在SQL中,数据类型转换是基础且关键的操作,分为隐式和显式转换。隐式转换由系统自动完成,虽便捷但可能带来性能损耗、索引失效及数据准确性风险;显式转换通过函数(如CAST、CONVERT)手动实现,更精确可控,能提升性能、增强代码可读性和保障数据准确性。掌握两者特点与应用场景,合理选择转换方式,对编写高效稳定的SQL代码至关重要。同时,注意数据兼容性与错误处理,确保转换操作顺利进行,避免潜在问题。
271 5
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
SQL 存储 关系型数据库
【赵渝强老师】Hive的内部表与外部表
Hive是基于HDFS的数据仓库,支持SQL查询。其数据模型包括内部表、外部表、分区表、临时表和桶表。本文介绍了如何创建和使用内部表和外部表,提供了详细的步骤和示例代码,并附有视频讲解。
939 1
|
数据采集 Java 测试技术
精准测试如何落地
在快速迭代的软件开发环境中,精准测试作为一种高效、针对性的测试方法,正逐步成为企业的首选。本文探讨了精准测试的落地方法、对质量指标的影响、数据统计与跟踪度量、提高投入产出收益率的策略及卡点数据的具体内容。通过优化测试用例、代码关联、技术融合及流程优化,精准测试能够显著提升软件质量和测试效率。
|
存储 SQL JSON
Hologres技术揭秘,JSON半结构化数据的极致分析性能
本文将会揭秘Hologres JSONB半结构化数据的技术原理,实现JSON半结构数据的极致分析性能。
3371 59
Hologres技术揭秘,JSON半结构化数据的极致分析性能
|
SQL Java 数据库连接
Cause: java.sql.SQLException: Field ‘id‘ doesn‘t have a default value; Field ‘id‘ doesn‘t have a de
Cause: java.sql.SQLException: Field ‘id‘ doesn‘t have a default value; Field ‘id‘ doesn‘t have a de