通过对数据的垂直拆分或水平拆分后,我们解决了数据库容量、性能等问题,但是将会面临数据迁移和数据一致性的问题。
在数据迁移方面,需要考虑如何快速迁移、平滑迁移、不停机的迁移等。待数据迁移完毕后,还需要校验数据的完整性。
数据一致性方面,要根据的业务来判断是否要必要引入分布式事务,如果需要引入分布式事务,需要斟酌是采用XA,还是基于BASE的柔性事务。
数据迁移是很容易出故障的一个环节,需要考虑怎么更加平滑的迁移旧数据到新的数据库和系统,以及达到数据准确、快速迁移、减少停机、对业务的影响小等,特别是异构的数据结构情况下,难度更大。
全量
全量迁移的过程如下:
缺点:
全量+增量
全量+增量迁移的方式,需要依赖数据本身的创建时间,步骤如下:
全量+增量的同步相比全量同步的方式,大大的减少了系统停机的时间,对业务影响较小。
binlog+全量+增量
binlog+全量+增量是通过从数据库的主库或者从库解析和重新构造数据,实现复制。
通常情况下都需要中间件等工具的支持,一般需要中间件等工具的支持。可以实现多线程、断点续传、全量和增量数据的同步,还可以实现自动扩容和缩容。
常见的工具有:Canal、ShardingSphere-scaling等
XA分布式事务
XA分布式事务,是数据库本身支持的协议,具备强一致性。
分库分表后,数据库数据一致性问题如何解决?这操作真的可以
XA分布式事务的组件:
XA接口:
MySQL从5.0.3开始支持InnoDB引擎的XA分布式事务。
分库分表后,数据库数据一致性问题如何解决?这操作真的可以
完整的XA事务处理流程如下:
image.png
主流的XA框架有:Atomikos、Narayana、Seata
XA分布式事务存在的问题:
如果对读操作很敏感,需要将数据库的隔离级别设置为SERIALIZABLE,性能特别的差。
柔性事务
BASE的核心在于,保证系统基本可用的前提下,通过利用柔性状态(支付操作后不是支付成功,而是支付中状态),实现数据的最终一致性,如下:
柔性事务核心理念是通过业务逻辑将互斥锁操作从RM层上升到业务层,通过放宽对强一致性的要求,来换取系统吞吐量的提升。
分库分表后,数据库数据一致性问题如何解决?这操作真的可以
BASE柔性事务常见模式
TCC介绍
TCC模式即将每个服务业务操作分成两个阶段,第一个阶段检查并预留相关资源,第二个阶段根据所有服务业务的try状态来操作,如果都成功,则进行Confirm操作,如果任意一个Try发送错误,则全部Cancel。
分库分表后,数据库数据一致性问题如何解决?这操作真的可以
TCC模型实际是通过业务分解来实现分布式事务,对业务有较强的侵入性。
TCC模型需要注意的地方:
AT
AT模式就是两阶段提交,自动生成反向SQL,当发生异常的时候,通过反向SQL回滚数据。
分库分表后,数据库数据一致性问题如何解决?这操作真的可以
Seata框架对AT的支持如下:
image.png
柔性事务下的事务特性
分布式事务主要目的是解决数据一致性问题,XA强一致,但是吞吐量太低,不利于高并发场景。柔性事务不保证强一致性,但是通过补偿实现最终一致性,常见的补偿有重试补偿、调度补偿、人工补偿等。
作者:threadxu 链接:https://juejin.cn/post/6933003178661462023 来源:掘金
</article>
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有