分布式事务(定理-刚性事务-柔性事务)

目录

什么是分布式事务?

分布式事务的定理

CAP

CAP取舍问题

Base定理

刚性事务

2PC

3PC

1. CanCommit阶段(询问阶段)

2. PreCommit阶段(预提交阶段)。

3. DoCommit阶段(提交阶段)

柔性事务

TCC

Saga

相关框架


什么是分布式事务?

        大家都知道事务有四大特性(ACID) ,原子性、一致性、隔离性、持久性。那么什么是分布式事务呢?就是从单机变成多个机器。那么这个时候问题就出现了,比如你要吃饭,自已怎么点什么都行,想吃什么点什么,但是此时不是你自已了,就可能会出现意见的分歧等等。

        分布式事务确保所有参与的数据库或服务要么全部成功提交,要么全部回滚,以保证数据的一致性。分布式事务的实现和管理比单一数据库的事务要复杂得多。

分布式事务的定理

CAP

       CAP是加州大学计算机科学家Eric Brewer在2000年提出的一个关于分布式系统的基本理论。

  • C指的是Consistency(一致性):就是说在分布式中,所有节点在同一时间看到的数据要是一致的。
  • A指的是Availablity (可用性):指的是访问某个节点的时候,必须要得到反馈,而不是拒绝或者错误。
  • P指的是Partition Tolerance(分区容错性):分区(当某个节点出现问题,和其他节点失去连接从而独自形成了一个区域)。就是说即使出现分区的情况,我们也要对外能够提供服务。

而这个理论的意思是,任何分布式系统都无法满足这三个特性,必须做出取舍。

CAP取舍问题

        在CAP做取舍问题时候,我们要知道,任何分布式系统都会有P(分区容错性)这个问题,所以我们一般都只会在AP之中做取舍。

Base定理

        Base定理是对CAP的补充和拓展。

  • BA指的是(Basically Available)基本可用:就是说我们分布式系统允许出现故障,但是也要保证能对外提供核心服务。

  • S指的是(Soft State)软状态:说的是我们分布式系统中允许在短时间之内出现数据不一致的情况。

  • E指的是(Eventual Consistency)最终一致性:在软状态结束之后,我们要在最后保证数据的一致性。

        BASE理论是在牺牲强一致性的前提下,通过实现基本可用、软状态和最终一致性,来实现高可用性和分区容错性。        

刚性事务

        刚性事务是偏向CP,具有强一致性,但失去可用性。比如2PC、3PC、XA协议。本文只介绍2PC和3PC。

2PC

        2PC是两阶段提交协议(就是说第一段不提交,第二段提交,牺牲一定性能保证强一致性)。

    第一阶段:协调者向参与者发送提交请求,询问他们是否可以提交。每个参与这收到消息之后,会做三件事  :

  1. 参与者尝试执行事务,但不会提交。
  2. 参与者之后会将事务操作的状态(成功或者失败)进行持久化,方便后续恢复。
  3. 参与者将事务操作状态返回给协调者。

第二阶段:这是提交阶段,协调者会根据协调者的反馈进行判断,如果有失败的则会回滚,泉捕成功则会执行。

  • 提交事务:如果所有参与者都准备成功,协调者向所有参与者发送提交请求。参与者在收到提交请求后,提交事务并释放资源。
  • 回滚事务:如果有任何参与者准备失败,协调者向所有参与者发送回滚请求。参与者在收到回滚请求后,回滚事务并释放资源。
Coordinator                  Participant 1                  Participant 2
     |                            |                             |
     |------ Prepare Request ---->|                             |
     |                            |                             |
     |<------ Prepare OK ---------|                             |
     |                            |                             |
     |                            |------ Prepare Request ----->|
     |                            |                             |
     |                            |<------ Prepare OK ----------|
     |                            |                             |
     |------ Commit Request ----->|                             |
     |                            |                             |
     |                            |------ Commit Request ------>|
     |                            |                             |
     |                            |                             |
3PC

        3PC是对2PC的一个改进,,用于解决2PC中的一些缺点,如单点故障和阻塞问题。

1. CanCommit阶段(询问阶段)
  • 记录日志:记录收到的CanCommit请求。
  • 判断是否可以提交:检查是否可以执行事务操作。
  • 响应协调者:如果可以准备提交,返回Yes;否则,返回No
2. PreCommit阶段(预提交阶段)。
  • 记录日志:记录准备进入预提交状态。
  • 发送预提交请求:向所有参与者发送PreCommit请求。

参与者在收到PreCommit请求后,执行以下操作:

  • 记录日志:记录进入预提交状态。
  • 准备提交:执行事务操作,但不提交。
  • 发送响应:确认已进入预提交状态,返回ACK
3. DoCommit阶段(提交阶段)
  • 提交事务:如果所有参与者都返回ACK,协调者向所有参与者发送DoCommit请求。参与者在收到DoCommit请求后,提交事务并释放资源。
  • 回滚事务:如果有任何参与者未返回ACK,协调者向所有参与者发送Abort请求。参与者在收到Abort请求后,回滚事务并释放资源。

柔性事务

        柔性事务偏AP(最终一致性),比如TCC、Saga。

TCC

Saga

相关框架


本文相关图片资源来自与网络中,如有侵权请联系删除!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值