服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - 编程技术 - 四大分布式事务方案详解

四大分布式事务方案详解

2024-03-29 14:33mikechen的互联网架构 编程技术

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

分布式事务在分布式系统经常遇见,也是大厂经常考察的内容,下面我就重点详解四大主流分布式事务方案@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模式要求开发人员在每个阶段都显式定义业务逻辑和补偿操作,这增加了系统的复杂性和开发成本,需要设计和维护每个阶段的逻辑,并确保它们之间的一致性。

最终一致性

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

如下图所示:

四大分布式事务方案详解图片

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

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

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

原文地址:https://mp.weixin.qq.com/s/euIvTOb08EU_aKL8XdFwqg

延伸 · 阅读

精彩推荐