来谈谈分布式事务

什么是事务?

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

业界目前方案:

  • 两阶段提交(2PC)

    导致占用锁很长时间

  • saga

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

  • 补偿事务(TCC)

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

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

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

  • 事务消息

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

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

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

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

掘金原文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章