什么是分布式事务?

在这里插入图片描述
分布式事务跨越多个系统,确保所有操作一起成功或失败,这对于在现代计算环境中跨不同地理位置分离的资源维护数据完整性和一致性至关重要。

1. 为什么需要分布式事务?

在这里插入图片描述
分布式事务的需求源于确保分布式计算环境中多个独立系统或资源之间的数据一致性和可靠性的要求
如上图所示,用户下了订单后,需要经过子系统Invetory和Payment两个服务处理,这两个服务是独立的微服务,要求这两个服务里面的事务要么同时成功,要么同时失败,由于是分处两个独立子系统,因此单个事务无法搞定两个系统的交易一致性!
这就需要用到分布式事务,它的主要特性如下:

1.1 一致性

确保作为事务的一部分所做的所有更改都以原子方式提交或回滚,从而维护数据完整性。

1.2 隔离性

保证并发事务不会互相干扰,维护数据完整性并防止冲突。

1.3 持久性

确认即使系统发生故障,已提交的事务仍然能够持续存在,从而确保可靠性。

1.4 原子性

确保事务中的所有操作要么全部成功完成,要么全部不成功完成,避免导致不一致的部分更新。

2. 分布式事务的工作原理

分布式事务的工作方式与简单事务相同,但挑战在于在多个数据库上实现它们。由于使用多个节点或数据库系统,会出现某些问题,例如网络故障,以维护额外硬件服务器和数据库服务器的可用性。为了成功进行分布式事务,可用资源由事务管理器协调。
在这里插入图片描述
分布式事务的工作原理

以下是针对该分布式事务流程一些步骤详解:

2.1 步骤 1:向资源申请 - 发出分布式事务

第一步是发出分布式事务。应用程序通过向可用资源发送请求来启动事务。请求包含详细信息,例如给定事务中每个资源要执行的操作。

2.2 步骤 2:资源 1 到资源 2 — 要求资源 2 准备提交

一旦资源收到事务请求,资源 1 就会联系资源 2 并要求资源 2 准备提交。此步骤确保两个可用资源都能够执行专用任务并成功完成给定的事务。

2.3 步骤 3:资源 2 到资源 1 – 资源 2 确认准备

第二步之后,资源 2 收到资源 1 的请求,准备提交。资源 2 向资源 1 做出确认响应,并确认已准备好继续执行分配的事务。

2.4 步骤 4:资源 1 到资源 2 — 要求资源 2 做出承诺

一旦资源 1 收到资源 2 的确认,它就会向资源 2 发送请求并提供提交事务的指令。此步骤确保资源 1 已完成给定事务中的任务,现在已准备好让资源 2 完成操作。

2.5 步骤 5:步骤 5:资源 2 至资源 1 – 资源 2 确认提交

当资源 2 收到来自资源 1 的提交请求时,它会向资源 1 提供响应并确认它已成功提交分配给它的事务。此步骤可确保资源 2 已完成操作中的任务,并确保两个资源都已同步其状态。

2.6 步骤 6:资源 1 至应用程序 — 接收交易确认

一旦资源 1 收到来自资源 2 的确认,资源 1 便会将交易确认发送回应用程序。此确认确认在多个资源之间执行的交易已成功完成。

3. 分布式事务的类型

分布式事务涉及跨多个节点资源协调操作,以确保原子性、一致性、隔离性和持久性(ACID 属性)。以下是一些常见的类型和协议:

3.1 两阶段提交协议(2PC)

这是用来实现分布式事务原子性的经典协议。

  • 它涉及两个阶段:准备阶段,所有参与者同意提交或中止事务;提交阶段,所有参与者同步执行决策。
  • 2PC 确保所有涉及的资源都提交事务或都不提交,从而保持原子性。

3.2 三阶段提交协议(3PC)

3PC 通过添加额外阶段(预提交阶段)扩展了 2PC,以解决可能导致 2PC 中无限期阻塞的某些故障情况。

  • 在3PC中,参与者首先同意准备提交,然后提交,最后完成或中止事务。
  • 该协议旨在通过引入额外的决策阶段来降低 2PC 中出现的阻塞风险。

3.3 XA 事务

在这里插入图片描述

XA(扩展架构)事务是开放群组 (The Open Group) 定义的一种标准,用于协调跨异构资源(例如数据库、消息队列)的事务。

  • XA 指定全局事务管理器(TM)和资源管理器(RM)之间的接口。
  • TM 协调事务的生命周期,确保所有参与的 RM 以原子方式提交或回滚事务。

4. 实现分布式事务

在这里插入图片描述

分布式事务的实现方式如下:

4.1 交易管理器(TM)

  • 事务管理器负责协调和管理跨多个资源管理器(例如数据库、消息队列)的事务。
  • 即使涉及不同的资源,TM 也能确保事务遵守 ACID 属性(原子性、一致性、隔离性、持久性)。

4.2 资源经理(RM)

  • 资源管理器负责管理分布式事务中涉及的各个资源(例如数据库、文件系统)。
  • RM与TM交互,准备根据TM的协调提交或回滚事务。

4.3 协调协议

  • 分布式事务的实现通常依赖于2PC、3PC等协调协议或Paxos、Raft等变体来达成共识。
  • 这些协议确保事务中的所有参与者就提交或回滚达成一致的决定。

5. 分布式事务的优点

以下是分布式事务的优点:

5.1 数据一致性

分布式事务在多个资源之间提供数据一致性。各种操作在多个数据库资源之间进行协调。这确保系统即使在发生任何类型的故障时也能保持一致状态。

5.2 容错性

分布式系统可以处理故障并确保交易正确。如果参与资源在交易执行期间发生故障,则交易可以在备用资源上回滚并成功完成。

5.3 保证事务

分布式系统保证事务。它提供持久性和隔离性等功能。持久性确保如果提交了任何事务,即使发生任何故障,更改也会持续存在。

6. 分布式事务应用场景

分布式事务的应用如下:

6.1 企业资源规划 (ERP) 系统

ERP 系统由一个组织内的部门组成。因此,这里使用分布式事务来维护来自销售、库存、财务和人力资源管理等各个模块的事务。

6.2 云计算

分布式事务正在基于云的应用程序中得到使用。事务可以在多个数据源的帮助下完成,并确保数据更新和操作的一致性。

6.3 医疗保健系统

医疗保健系统在协调患者记录、为患者安排预约以及管理计费系统时使用分布式事务。分布式事务可维护医疗保健系统中的数据一致性和性能。

7. 分布式事务常见问题及其解答

在这里插入图片描述

7.1 跨地理分布的数据中心实现分布式事务一致性的主要挑战是什么?

处理网络延迟、潜在分区,并确保分散的数据中心之间的交易结果一致。

7.2 在云原生环境中,如何处理跨多个服务或微服务的长时间运行的分布式事务?

使用基于编排的 sagas 或补偿事务等模式来跨服务异步管理事务状态。

7.3 在分布式事务中,使用两阶段提交(2PC)和三阶段提交(3PC)协议之间的权衡是什么?

2PC 提供了更简单的原子性,但有阻塞的风险;3PC 增加了复杂性,减少了阻塞,但有可能增加延迟。

7.4 在什么场景中您会选择使用XA事务而不是自定义应用程序级分布式事务管理?

XA 事务适合与符合 XA 的系统集成,以实现标准化协调;自定义方法提供灵活性和性能优化。

7.5 在跨多个数据中心或云区域的异步数据传播的分布式系统中,如何维护事务的完整性和一致性?

使用分布式提交协议、幂等操作和冲突解决来确保即使出现网络延迟或故障也能实现一致的更新。

8. 结论

当使用多个资源(例如存储库或数据库系统)来执行事务时,将使用分布式事务。分布式事务提供各种好处,例如数据一致性,保证事务,并提高系统的整体性能和可扩展性。因此,分布式事务被用于各种应用程序以获得上述好处。

分布式事务是指在分布式系统中,涉及到多个独立的服务或数据库的事务操作。这些分布式事务需要保证所有参与者的操作要么全部成功提交,要么全部回滚,以确保数据的一致性。 需要分布式事务的主要原因包括以下几点: 1. 数据一致性:在分布式系统中,不同的服务或数据库可能存在数据依赖关系,需要保证它们之间的操作要么全部成功生效,要么全部回滚,以避免数据不一致的问题。 2. 原子性:分布式事务需要保证操作的原子性,即要么所有操作都成功执行,要么所有操作都回滚,不允许部分操作成功而部分操作失败。 3. 并发控制:在分布式环境中,多个事务可能同时对同一数据进行读写操作,需要通过分布式事务来协调不同事务之间的并发访问,以避免数据的冲突和不一致。 4. 故障恢复:分布式系统中的各个节点可能存在故障或网络问题,需要通过分布式事务来处理节点故障时的数据一致性和恢复问题。 5. 业务需求:某些业务场景中,需要保证多个服务或数据库的操作在逻辑上是一个整体,只有全部成功或全部失败才能满足业务需求。 分布式事务的目标是确保所有参与者的操作的一致性和原子性,以保证数据的准确性和可靠性。然而,由于分布式环境的复杂性和故障可能性,实现分布式事务是一项具有挑战性的任务,需要综合考虑性能、可扩展性和一致性等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

越重天

你的打赏是我精心创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值