4

四大分布式事务方案详解

 2 months ago
source link: https://www.51cto.com/article/784966.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

四大分布式事务方案详解

作者:mikechen 2024-03-29 13:30:41
分布式事务是指涉及多个参与者,通常是不同的计算机节点或服务的事务操作,因此需要跨多个节点执行事务操作。

分布式事务在分布式系统经常遇见,也是大厂经常考察的内容,下面我就重点详解四大主流分布式事务方案@mikechen

分布式事务

分布式事务是指涉及多个参与者,通常是不同的计算机节点或服务的事务操作,因此需要跨多个节点执行事务操作。

如下图所示:

图片
图片

分布式事务需要确保所有相关操作要么全部成功执行,要么全部回滚,以维护数据的一致性和可靠性。

分布式事务解决方案

常见的分布式事务解决方案,主要包含有以下四种:

两阶段提交协议

两阶段提交协议,Two-Phase Commit,简称是2PC,该协议包括:准备和提交两个阶段。

如下图所示:

图片
图片

1.准备阶段

协调者向所有参与者发送准备请求,参与者执行事务准备,并向协调者发送准备就绪的通知。

2.提交阶段

如果所有参与者都准备就绪,则协调者向所有参与者发送提交请求,参与者执行事务提交。

如果所有参与者都成功提交了事务,则事务成功完成。

否则,如果任何一个参与者失败或者无法提交,则所有参与者都会被要求回滚(Rollback)事务,以保持一致性。

2PC的优点是简单易懂,并且在理想情况下能够保证分布式系统中事务的原子性和一致性。

两阶段有如下几个缺点:

1.阻塞问题

在2PC的准备阶段,协调者需要等待所有参与者的响应,这可能会导致整个系统的阻塞。

2.单点故障

在2PC中,协调者是一个单点,它负责协调所有参与者的操作。

如果协调者发生故障,那么整个事务可能会无法完成,即使参与者的大部分已经准备好了,这种单点故障会影响系统的可用性和可靠性。

3.数据不一致性

2PC无法处理所有故障情况,例如:协调者和参与者之间的网络分区或者通信失败。

在这种情况下,可能会出现数据不一致性,一些参与者已经提交了事务,而另一些参与者却未收到提交指令,导致系统状态混乱。

三阶段提交协议

三阶段提交协议,Three-phase commit, 简称是3PC,3PC是2PC的改进版。

如下图所示:

图片
图片

3PC的主要思想是引入一个【预提交阶段】,以减轻2PC中的阻塞问题,同时保持原子性和一致性。

3PC,主要分为三个阶段:

1.预提交阶段

协调者询问参与者是否可以提交事务,并等待它们的响应,如果所有参与者都同意,则进入下一阶段。

2.提交阶段

协调者向所有参与者发送提交请求,要求它们提交事务,如果任何参与者无法提交,则执行回滚。

3.确认阶段

协调者向所有参与者发送确认消息,告知它们事务已经提交,这一阶段用于解决2PC中的阻塞问题。

3PC相较于2PC的优点是在第一阶段引入了一个“询问”阶段,避免了2PC的直接准备阶段可能出现的长时间阻塞问题。

两阶段与三阶段对比,如下图所示:

图片
图片

TCC(Try-Confirm-Cancel)是一种补偿性事务处理模式,用于实现分布式系统中的一致性操作。

如下图所示:

图片
图片

TCC模式通过三个阶段的操作来确保事务的一致性:尝试(Try)、确认(Confirm)和取消(Cancel)。

1.尝试阶段(Try)

在尝试阶段,系统会尝试执行事务操作的所有必要检查和准备工作,以确保事务能够成功执行。

这包括检查资源的可用性、锁定所需资源等,如果所有的检查都通过,系统会记录下所有的尝试操作,但并不会实际执行事务。

2.确认阶段(Confirm)

在确认阶段,系统会执行事务操作,并且确认之前所做的尝试操作。

如果事务操作成功执行,系统将确认并提交事务,在这个阶段,系统会持久化事务的结果,确保事务的最终执行。

3.取消阶段(Cancel)

如果在尝试阶段或者确认阶段发生了错误或者异常情况,系统将进入取消阶段。

在这个阶段,系统会执行逆向操作,取消之前尝试阶段所做的操作,这样可以确保系统的状态回滚到事务开始之前的状态,以维持数据的一致性。

TCC模式允许开发人员在每个阶段都定义自己的业务逻辑和补偿操作,以适应不同的业务需求。

但是,TCC模式要求开发人员在每个阶段都显式定义业务逻辑和补偿操作,这增加了系统的复杂性和开发成本,需要设计和维护每个阶段的逻辑,并确保它们之间的一致性。

最终一致性

最终一致性是分布式系统中的一种一致性模型,它允许数据副本在一段时间内的状态之间存在不一致,但最终将会达到一致的状态。

如下图所示:

图片
图片

在最终一致性模型中,节点之间的数据同步通常是通过消息传递来实现的。

当一个节点的数据发生变化时,它会通过异步方式将消息发送给其他节点,由于消息传递是异步的,因此节点之间的数据同步可能会有一定的延迟。

因此,最终一致性模型允许节点之间的数据副本,在一段时间内存在不一致,但最终会收敛到一致的状态。

责任编辑:武晓燕 来源: mikechen的互联网架构

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK