当前位置:网站首页>跨系统数据一致性问题解决方案汇总
跨系统数据一致性问题解决方案汇总
2022-06-27 20:21:00 【架构精进之路】
1、为什么会有跨系统数据一致性问题?

2、一致性问题的难点分析
假设存在订单系统与库存系统,在实际业务中订单的创建会伴随着库存的减少。两个系统为微服务化部署,其应用数据也存放在独立的数据库中,两个系统间通过网络进行通信。

2.1 CAP 原则

放弃 A (可用性)来保障 CP 具体表现为产生通信故障后,应用会进入阻塞状态,一直尝试与库存系统恢复通信直到完成所有数据处理。这种方案是优先保障数据完整性,但此方案用户体验极差,因为在所有操作完成前用户会一直处于等待的状态。
CA 因为不考虑分区容忍度,所以它的所有操作需要在同一进程内完成(也就是我们常说的单体应用); AP 因为放弃数据一致性,适合数据要求不高但强调用户体验的项目,如博客、新闻资讯等; CP 反之放弃了可用性,适合数据要求很高的交易系统,如银行交易、电商的订单交易等,就算是用户长时间等待,也要保障数据的完整可靠。
比如,一个数据库的事务与多个数据库之间的 XA 事务性能可能相差 10 倍。另外,在 XA 的事务处理过程中它会长期占用锁资源,所以一开始我们并不考虑这个方案。
2.2 TCC 一致性方案
Try 接口用来检查数据、预留业务资源。 Confirm 接口用来确认实际业务操作、更新业务资源。 Cancel 接口是指释放 Try 接口中预留的资源。
1、Try 是第一个阶段,用于尝试并锁定资源; 2、如果资源锁定成功,第二个阶段开始进行 Confirm 提交完成数据操作; 3、如果资源锁定失败,第二个阶段就会进行 Cancel 将数据回滚;
要把绝大多数的业务逻辑在 Try 阶段完成,因为 TCC 设计之初认为 Confirm 或 Cancel 是一定要成功的,因此不要二阶段包含任何业务代码或者远程通信,只通过最简单的代码释放冻结资源。
假如 Confirm 或 Cancel 执行时出现错误,那具体应用时也会不断重试执行操作来尽量保证执行成功,这个过程中可能会多次执行 update 语句,因此要注意代码的幂等性。
极小概率下,Confim 或 Cancel 在多次重试后宣告失败,便会出现数据最终不一致的情况,这就需要自己开发额外的数据完整性校验程序补救或者通过人工进行补录。
在 Java 开源领域著名的 TCC 框架有:ByteTCC、Hmily、Tcc-transaction 与 Seata。
3、有效数据同步方案实践
3.1 实时同步
3.1.1 数据库层面
水平扩展数据库的负载能力。 容错,高可用,Failover(失败切换)/High Availability 数据备份。

当从节点连接主节点时,主节点会创建一个 log dump 线程,用于发送 binlog 的内容。在读取 binlog 中的操作时,此线程会对主节点上的 binlog 加锁,当读取完成,在发送给从节点之前,锁会被释放。
当从节点上执行 start slave 命令之后,从节点会创建一个 I/O 线程用来连接主节点,请求主库中更新的 binlog。I/O 线程接收到主节点 binlog dump 进程发来的更新之后,保存在本地 relay-log(中继日志)中。
SQL 线程负责读取 relay log 中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。
3.1.2 API 调用

3.2 异步同步
3.2.1 异步消息队列

3.2.2 定时同步
4、应用经验总结
任何数据同步本身没有优劣之分,都有其适合的应用场景。
能够解决当前问题的架构方案,同时兼具易于扩展及维护,那就是一个优秀的架构。
希望今天的讲解对大家有所帮助,谢谢!
Thanks for reading
坚持原创分享有价值的干货技术文章!
关注公众号,免费领学习资料
如果您觉得还不错,欢迎关注和转发~
本文分享自微信公众号 - 架构精进之路(jiagou_jingjin)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
边栏推荐
- Aggregation and index optimization of mongodb basic operations
- 7 jours d'apprentissage de la programmation simultanée go 7 jours de programmation simultanée go Language Atomic Atomic Atomic actual Operation contains ABA Problems
- Hiplot 在線繪圖工具的本地運行/開發庫開源
- What problems should be paid attention to in the serpentine wiring of PCB?
- 广告太「野」,吉野家「渡劫」
- 这届考生,报志愿比高考更“拼命”
- Workflow automation low code is the key
- [js]var, let, const
- Structured machine learning project (II) - machine learning strategy (2)
- 九九乘法表——C语言
猜你喜欢
Livox lidar+apx15 real-time high-precision radar map reproduction and sorting
Kill the general and seize the "pointer" (Part 2)
Senior headhunting team manager: interviewed 3000 consultants, summarized and organized 8 commonalities (Mao Sheng)
Penetration learning - shooting range chapter - detailed introduction to Pikachu shooting range (under continuous update - currently only the SQL injection part is updated)
Learn to go concurrent programming in 7 days go language sync Application and implementation of cond
Memoirs of actual combat: breaking the border from webshell
Spark BUG实践(包含的BUG:ClassCastException;ConnectException;NoClassDefFoundError;RuntimeExceptio等。。。。)
Transformation from student to engineer
Azure Kinect DK 实现三维重建 (PC非实时版)
Mysql database experiment report (I)
随机推荐
MySQL数据库 实验报告(一)
因美纳陷数据泄露“丑闻”:我国基因数据安全能交给美企吗?
Summary of various loams (laser SLAM)
[随笔]ME53N 增加按钮,调用URL
「R」使用ggpolar绘制生存关联网络图
2022年第一季度“广州好人”刘磊峰:具有强烈的诚信意识和食品安全意识
“顶流爱豆制造机”携手四个产业资本,做LP
7 jours d'apprentissage de la programmation simultanée go 7 jours de programmation simultanée go Language Atomic Atomic Atomic actual Operation contains ABA Problems
First knowledge of the second bullet of C language
Open source of local run / development library of hiplot online drawing tool
Day 7 of "learning to go concurrent programming in 7 days" go language concurrent programming atomic atomic actual operation includes ABA problem
Vue+MySQL实现登录注册案例
Crawler notes (1) - urllib
mysql操作入门(四)-----数据排序(升序、降序、多字段排序)
Death of 5 yuan youkuang in Yuanqi forest
Spark bug practice (including bug:classcastexception; connectexception; NoClassDefFoundError; runtimeException, etc.)
[can you really use es] Introduction to es Basics (II)
Batch processing - Excel import template 1.1- support multiple sheet pages
[cloud based co creation] what is informatization? What is digitalization? What are the connections and differences between the two?
STM32与RC522简单公交卡系统的设计