分布式事务

2022/09/07

分布式事务

常规的数据库事务指的是在集中环境下的数据库执行某些业务操作。而分布式事务就复杂多了,这和CAP理论有关。事务一定是要追求 ACID 的,这个C指的是一致性,在分布式系统中却是最容易被抛弃的。

CAP 理论告诉我们,在分布式系统中,一致性、可用性、分区容忍性三者不可兼得,必然需要舍弃某个点。分区容忍性是一定会出现的,可用性是分布式系统的重要作用,也不可抹去,这样的话就需要丢弃一致性。

  • 强一致性:理论中的一致性,单点数据库可以做到
  • 弱一致性:实践中的一致性,其实是不保证一致性,例如 Redis
  • 最终一致性:如果数据在一段时间之内没有被另外的操作所更改,那它最终将会达到与强一致性过程相同的结果

一些分布式事务的实现:

  • 可靠事务队列:通过队列中间件实现分布式事务,也即是最大努力交付,在整个体系中没有“事务回滚”的概念,如果出现了异常情况,需要一个新的事务去处理
  • TCC事务:Try-Confirm-Cancel - Try:尝试执行阶段,完成所有业务可执行性的检查(保障一致性),并且预留好全部需用到的业务资源(保障隔离性)。 - Confirm:确认执行阶段,不进行任何业务检查,直接使用 Try 阶段准备的资源来完成业务处理。Confirm 阶段可能会重复执行,因此本阶段所执行的操作需要具备幂等性。 - Cancel:取消执行阶段,释放 Try 阶段预留的业务资源。Cancel 阶段可能会重复执行,也需要满足幂等性。
  • SAGA事务:将大事务分割成连续的且原子性的小事务,对每一个小事务都有一个补偿动作;当分布式事务出现问题之后,可以不断重试失败的小事务,也可以按照倒叙进行补偿动作的实施,从而使该事务进行逻辑上的回滚。

Search

    Table of Contents