目录
什么是分布式事务?
大家都知道事务有四大特性(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是两阶段提交协议(就是说第一段不提交,第二段提交,牺牲一定性能保证强一致性)。
第一阶段:协调者向参与者发送提交请求,询问他们是否可以提交。每个参与这收到消息之后,会做三件事 :
- 参与者尝试执行事务,但不会提交。
- 参与者之后会将事务操作的状态(成功或者失败)进行持久化,方便后续恢复。
- 参与者将事务操作状态返回给协调者。
第二阶段:这是提交阶段,协调者会根据协调者的反馈进行判断,如果有失败的则会回滚,泉捕成功则会执行。
- 提交事务:如果所有参与者都准备成功,协调者向所有参与者发送提交请求。参与者在收到提交请求后,提交事务并释放资源。
- 回滚事务:如果有任何参与者准备失败,协调者向所有参与者发送回滚请求。参与者在收到回滚请求后,回滚事务并释放资源。
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
相关框架
本文相关图片资源来自与网络中,如有侵权请联系删除!