什么是分布式事务?
分布式事务跨越多个系统,确保所有操作一起成功或失败,这对于在现代计算环境中跨不同地理位置分离的资源维护数据完整性和一致性至关重要。
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. 结论
当使用多个资源(例如存储库或数据库系统)来执行事务时,将使用分布式事务。分布式事务提供各种好处,例如数据一致性,保证事务,并提高系统的整体性能和可扩展性。因此,分布式事务被用于各种应用程序以获得上述好处。