分布式事务章节
分布式事务:2PC与3PC的区别-CSDN博客
分布式事务:X/Open DTP分布式事务处理模型与分布式事务处理XA规范-CSDN博客
事务简介
事务(Transaction)是操作数据库中某个数据项的一个程序执行单元(unit)。事务是由一组操作构成的可靠的独立的工作单元,事务应该具有4个属性:(A)原子性、(C)一致性、(I)隔离性、(D)持久性。这四个属性通常称为ACID特性。
事务的四个特征:
1、Atomic原子性
事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程中,要么全部执行成功,要么全部不执行,任何一项失败,整个事务回滚,只有全部都执行成功,整个事务才算成功。
2、Consistency一致性
事务的执行不能破坏数据库数据的完整性和一致性,事务在执行之前和之后,数据库都必须处于一致性状态。
3、Isolation隔离性
在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰。自身的数据是不会被其他的并发事务修改数据的。
4、Durability持久性
持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中对应数据的状态变更就应该是永久性的。即使发生系统崩溃或机器宕机,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束时的状态。
本地事务与分布式事务的区别
本地事务 | 分布式事务 | |
---|---|---|
支持特性 | 严格的ACID | CAP理论中的中的CP或者AP |
一致性范围 | 只能是单一的资源 | 多个资源 |
复杂性 | 简单 | 复杂(通过复杂的协议及通信来确保一致性,故障处理难度高) |
性能 | 快 | 低(多个资源之间的通信及自身事务的性能都会有影响) |
什么是本地事务
整个服务操作只能涉及一个单一的数据库资源或者资源管理器中执行的一些列数据库操作,这类基于单一资源操作单元的访问,并且由资源管理器本地管理被称为本地事务。本地事务的优点就是支持严格的ACID特性,高效,可靠,状态可以只在资源管理器中维护,而且应用编程模型简单。在一个本地事务中,事务的开始、中间的操作和最终的提交与回滚都只是涉及单个数据源。本地事务不具备分布式事务的处理能力,隔离的最小单位受限于资源管理器。
什么是分布式事务?
分布式事务指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上,保证不同数据的一致性。
对于分布式系统而言,需要保证分布式系统中的数据一致性,保证数据在子系统中始终保持一致,避免业务出现问题,即使这些操作分布在不同的网络环境和物理位置中。在分布式事务中,通常需要跨多个独立的服务或数据库进行协调,以确保所有参与事务的子事务要么全部成功完成,要么在任何一部分失败时,所有部分的操作都能回滚到事务开始前的状态,必须是一个整体性的事务,从而保持数据的一致性。
例如目前的微服务体系当中:创建一个关于购买商品的订单,会涉及到订单服务,库存服务,支付服务等不同的服务。这些服务都有自己各自的数据库,并管理自己的本地事务。所有的过程作为一个分布式全局事务,这些过程中的操作要么全部成功,要么全部失败。
相比于数据库事务或本地事务中的ACID,分布式事务有CAP理论:
C:一致性(Consistency),代表数据在任何时刻、任何分布式节点中所看到的都是符合预期的。确保所有用户或节点在同一时间看到的是系统的最新一致状态,即任何数据更新后,所有相关节点都能立即看到这一更新。
A:可用性(Availability),代表系统不间断地提供服务的能力。要求系统在任何正常操作情况下都必须响应客户端请求,并且能够提供有意义的服务结果,即使在部分节点出现故障时也能找到并返回一个可用的数据副本给客户端
P:分区容错性(Partition Tolerance),代表分布式环境中部分节点因网络原因而彼此失联后,即与其他节点形成“网络分区”时,系统仍能正确地提供服务的能力。
CAP定理指出,在设计和实现共享数据的分布式系统时,无法同时保证一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三个属性。该定理强调在实际应用中,系统必须在这些关键特性之间做出权衡,最多只能同时确保任意两个。
现实业务环境中的分布式系统往往需要结合ACID(原子性、一致性、隔离性和持久性)事务特性和CAP原则来满足特定业务需求,而非机械地追求某一种绝对的系统模型。设计的核心目标是灵活适应不同的应用场景,以达到满足业务需求与技术挑战之间的平衡。
分布式事务实现起来比本地事务复杂得多,因为它们需要解决网络延迟、节点故障以及不同数据库系统的兼容性等问题。常见的分布式事务解决方案包括两阶段提交(2PC, Two-Phase Commit)、三阶段提交(3PC, Three-Phase Commit)、补偿事务(TCC, Try-Confirm-Cancel)、Saga模式以及基于消息队列的最终一致性方案等。
总结
最简单来讲,本地事务能够高效较简单得用于单个资源的处理。分布式事务用于多个资源的处理,比本地事务要更加复杂。