来谈谈分布式事务

什么是事务?

事务具体表现A(原子性)C(一致性)I(隔离性)D(持久性)。
本地事务是解决单个数据源上的数据操作的一致性问题的话。
分布式事务是为了解决跨越多个数据源上数据操作的一致性问题。

业界目前方案:

  • 两阶段提交(2PC)

    导致占用锁很长时间

  • saga

    是一种基于补偿的消息驱动的用于解决long-running process的一种解决方案。目标是为了在确保系统高可用的前提下尽量确保数据的一致性。牺牲了数据的强一致性,仅仅实现了最终一致性,但是提高了系统整体的可用性

  • 补偿事务(TCC)

    其实就是采用的补偿机制,其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作。TCC模型是把锁的粒度完全交给业务处理。代码量会明显增多

  • 本地消息表(异步确保)

    本地消息表这种实现方式应该是业界使用最多的,其核心思想是将分布式事务拆分成本地事务进行处理,这种思路是来源于ebay。我们可以从下面的流程图中看出其中的一些细节:
    在这里插入图片描述

  • 事务消息

    和本地消息表的区别是事务由MQ维护
    在这里插入图片描述

TCC属于业务上的分段提交,Try,confirm,cancel都是对应的一段业务逻辑的操作,先预留资源,预留成功后进行确认,不成功就取消,例如转账先冻结资金,进行一系列的余额各方面的检查,发现符合条件就对账户对应的资金状态改为冻结,确认阶段修改状态为扣除,取消的话就把冻结的资金加回原账户,其对应的数据库的操作每段都是一个完整的事物;

2PC是属于数据库层面的,先进行prepare,然后逐个进行commit或者rollback,不和具体业务逻辑挂钩。

TCC的应用范围更广,不一定是事物关系数据库,也可能操作的KV数据库,文档数据库,粒度也可以随着具体业务灵活调整,性能更好。

掘金原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值