侧边栏壁纸
博主头像
叩钉壹刻博主等级

7分技术,3分管理,2分运气

  • 累计撰写 30 篇文章
  • 累计创建 13 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

分布式事务理论篇

鹿心肺语
2023-06-30 / 0 评论 / 0 点赞 / 26 阅读 / 7622 字

1. 什么是事务、本地事务、分布式事务

1.1 事务

事务(Transaction)是一个数据库操作序列,它包含了一组操作,要么全部执行成功,要么全部执行失败。事务具有原子性、一致性、隔离性和持久性(ACID)这四个特性,以确保数据的完整性和一致性。

1.2 本地事务

本地事务(Local Transaction)是指在单个数据库实例中执行的事务,涉及的操作和数据都局限于该数据库实例。本地事务通常具有较高的性能,因为所有操作都在同一个数据库中进行,避免了跨多个数据库或系统的延迟和复杂性。

1.3 分布式事务

分布式事务(Distributed Transaction)是指在多个数据库实例、多个应用系统或者多个微服务之间执行的事务。分布式事务需要协调多个独立的资源(如数据库、消息队列等)来完成一个完整的操作。由于涉及到多个系统,分布式事务的实现更加复杂,需要考虑数据一致性、故障恢复等问题。

2. 分布式事务产生的背景

分布式事务产生的背景主要有以下几点:

  1. 业务需求:随着企业业务的不断发展,越来越多的系统需要实现跨多个服务、数据库、甚至不同地理位置的数据一致性。在这种情况下,传统的单一数据库事务管理方案已经无法满足需求。
  2. 系统架构:为了满足高并发、高可用、高性能等要求,现代软件系统通常采用微服务架构。微服务架构将一个大型的单体应用拆分为许多小型、独立的服务,这些服务可以独立部署、扩展和维护。然而,这种架构也导致了数据分散在不同的服务中,需要分布式事务来保证数据的一致性。
  3. 数据库分片:为了提高数据库性能,许多系统采用数据库分片技术,将数据分散到多个数据库实例中。这种分片策略可以降低单个数据库的负载,提高查询性能。然而,这也导致了数据分散在不同的数据库实例中,需要分布式事务来保证数据的一致性。
  4. 全球化部署:随着全球化趋势的加剧,许多企业需要在全球范围内部署系统,以满足不同地区的用户需求。这种全球化部署导致了数据分散在不同的地理位置,需要分布式事务来保证数据的一致性和实时性。
  5. 容错性与高可用性:在分布式系统中,节点故障是常态。为了保证系统的容错性和高可用性,需要实现分布式事务,以确保在部分节点发生故障时,系统仍然能够正常运行并保证数据一致性。

因此,分布式事务是在现代软件系统中解决数据一致性问题的关键技术,它可以确保在分布式环境下,多个服务、数据库或地理位置之间的数据保持一致。

3. 分布式事务产生的场景

分布式事务(Distributed Transactions)是指在分布式系统中,多个独立的组件或服务需要协同完成一个完整的操作,这个操作通常跨越多个数据库或消息队列等资源。在分布式系统中,由于各个组件可能存在网络延迟、故障等问题,因此需要一种机制来确保这些组件之间的操作能够保持一致性。分布式事务产生的场景主要包括以下几种:

  1. 分布式数据库:在多个数据库节点上执行数据操作时,为了保证数据的一致性,需要分布式事务来确保所有操作的原子性。
  2. 分布式服务:在微服务架构中,不同的服务可能使用不同的数据库或者消息系统。当这些服务之间需要协同工作以完成某个业务操作时,需要分布式事务来确保各个服务的操作是原子性的。
  3. 分布式消息系统:在分布式消息队列中,为了确保消息的传递和消费是原子性的,需要使用分布式事务。例如,在发布订阅模式中,发布者需要确保消息被成功发送到队列,而订阅者需要确保消息被成功消费。
  4. 分布式缓存:在分布式系统中,缓存通常用于提高系统性能。当多个服务共享同一个缓存时,对这些共享缓存的更新操作需要保证一致性。为了确保这些操作的原子性、一致性、隔离性和持久性,需要使用分布式事务。
  5. 跨多个组织的场景:在跨多个组织的业务场景中,不同组织可能使用不同的系统、数据库和消息队列。为了确保这些组织之间的数据一致性和业务流程的正确执行,需要使用分布式事务。

总之,在分布式环境中,当多个组件或服务需要协同完成一个完整的操作时,分布式事务成为了确保数据一致性和业务流程正确性的关键机制。

4. 分布式事务的理论

4.1 CAP理论

CAP理论又称为“布鲁尔定理”。由一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三部分组成

CAP理论指出,在分布式数据存储系统中,一个分布式系统无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三个条件。

  1. 一致性(Consistency):在分布式系统中,当涉及到多个数据副本时,一致性要求系统在执行操作后,所有节点看到的数据都是一致的。
  2. 可用性(Availability):在分布式系统中,可用性要求系统在任何时候都能对用户的请求做出响应。即使某个节点发生故障,系统仍然可以继续提供服务。
  3. 分区容错性(Partition Tolerance):在分布式系统中,分区容错性要求系统在发生网络分区(部分节点无法与其他节点通信)时,仍然能够正常工作。

根据CAP理论,一个分布式系统最多只能同时满足这两个条件:一致性和可用性,或者一致性和分区容错性,或者可用性和分区容错性。由于网络环境复杂,分区容错性被认为是分布式系统中的基本要求,因此,大部分分布式系统需要在一致性和可用性之间进行权衡。

4.2 Base理论

Base理论(Basically Available, Soft state, Eventually consistent)是一种分布式系统设计的理论框架,用于处理分布式环境中的一致性和可用性问题(是对CAP理论中的AP做了一个拓展说明,牺牲了一致性换来了可用性)。在分布式事务中,Base理论被广泛应用,以提高系统的可靠性和性能。Base理论主要包括以下三个方面:

  1. Basically Available(基本可用):基本可用是指分布式系统在出现故障时,允许损失部分可用性。这意味着在某些情况下,系统可能会响应较慢或者返回部分数据,但整体上仍能对外提供服务。这种设计思路有助于提高系统的容错能力,确保在部分节点发生故障时,整个系统仍然可以运行。
  2. Soft state(柔性状态):柔性状态是指分布式系统中的数据可以处于一种中间状态,这种状态允许系统在处理事务时具有一定的滞后性。在分布式环境中,数据可能在不同节点之间存在短暂的不一致,但最终会通过一定的机制达到一致性。这种设计思路有助于提高系统的并发性能和响应速度。
  3. Eventually consistent(最终一致性):最终一致性是指在分布式系统中,数据在经过一段时间的同步后,最终将达到一致状态。这意味着在某些情况下,数据在分布式系统中的不同节点之间可能会存在短暂的不一致,但最终会通过数据同步和复制机制实现一致性。这种设计思路有助于提高系统的可扩展性和性能。

Base理论的核心思想是在保证基本可用性的前提下,允许系统在一定程度上牺牲数据的一致性,从而实现更好的性能和可靠性。在实际应用中,开发者可以根据具体的业务场景和需求,灵活地选择实现Base理论的策略和技术。

5. 分布式事务的解决方案

5.1 强⼀致性(CP理论)

  • XA协议

5.2 弱⼀致性(AP理论)

  • TCC
  • 可靠消息⼀致性
  • 最大努力通知

6. 分布式事务的规范(模型)

6.1 DTP模型

DTP(Distributed Transaction Processing)模型是一个用于描述分布式事务处理系统的理论模型,它定义了分布式事务处理的基本组件和交互方式。

DTP模型包括以下几个主要组件:

  1. AP(应用程序,Application Program):发起分布式事务的应用程序。
  2. RM(资源管理器,Resource Manager):负责管理分布式事务中所涉及的资源,例如数据库、消息队列等。RM负责处理事务操作并保证操作的原子性。
  3. TM(事务管理器,Transaction Manager):负责协调分布式事务的整个生命周期,包括开始事务、提交事务和回滚事务。TM与各个RM进行通信,确保分布式事务的一致性。
  4. CICS(通信控制器,Communication Controller):负责在各个RM和TM之间传递事务信息,例如提交请求、回滚请求等。CICS可以视为通信中间件。

DTP模型的工作流程如下:

  1. AP发起一个分布式事务,并请求TM开始事务。
  2. TM向涉及的所有RM发送开始事务请求。
  3. RM收到开始事务请求后,执行相应的操作,并向TM报告操作结果。
  4. 当所有RM都报告操作成功时,TM通知所有RM提交事务。如果某个RM操作失败,TM通知所有RM回滚事务。

6.2 两阶段体提交模型(2PC)

两阶段提交(Two-Phase Commit,2PC)是一种用于确保分布式事务原子性和一致性的经典协议。在2PC中,事务管理器(Transaction Manager,TM)负责协调参与事务的所有资源管理器(Resource Manager,RM)。

两阶段提交分为两个阶段:

  1. 请求阶段(Prepare Phase):
    在请求阶段,事务管理器向所有涉及的资源管理器发送一个准备请求。资源管理器在本地执行事务,但不提交,并将结果(例如,成功或失败)返回给事务管理器。如果所有资源管理器都报告成功,则进入提交阶段。如果有任何一个资源管理器报告失败,则进入中止阶段。
  2. 提交阶段(Commit Phase):
    在提交阶段,事务管理器根据请求阶段的结果来决定是提交还是中止事务。如果所有资源管理器在请求阶段都报告成功,则事务管理器向所有资源管理器发送提交请求。资源管理器此时提交本地事务,并释放资源。如果任何资源管理器在请求阶段报告失败,则事务管理器向所有资源管理器发送中止请求。资源管理器回滚本地事务,释放资源。

两阶段提交协议可以确保分布式事务的原子性和一致性,但在某些情况下可能面临一些问题,如单点故障、阻塞、性能问题和数据不一致。

两阶段提交成功模型图:

image

两阶段提交失败模型图:

image

7. 理论、模型、解决方案三者间关系

  1. 通过理论获取解决方案,有2种(强一致性、弱一致性)
  2. 模型是统一解决方案的实现

总结:分布式事务解决思想来自于理论,分布式事务解决落地来自于模型

8. 分布式事务各解决方案比较

  1. 两阶段提交(2PC,XA协议):
    两阶段提交协议(2PC)是一种在分布式系统中保证数据一致性的协议。它包括两个阶段:准备阶段和提交阶段。在准备阶段,所有涉及到的事务参与者会执行本地事务,并将结果返回给协调者。在提交阶段,协调者根据参与者的反馈来决定是提交事务还是回滚。XA协议是实现2PC的一种标准接口,广泛应用于关系型数据库。

    • 优点:简单易用,适用于多种数据库和系统。
    • 缺点:单点故障问题,性能较低,不适合高并发场景。
  2. TCC(Try-Confirm-Cancel):
    TCC是另一种分布式事务处理模式。它的核心思想是将一个事务拆分为三个阶段:尝试阶段(Try)、确认阶段(Confirm)和取消阶段(Cancel)。在尝试阶段,所有涉及到的事务参与者会执行本地事务,并预留资源。在确认阶段,协调者根据参与者的反馈来决定是提交事务还是回滚。如果某个参与者在执行尝试阶段失败,协调者会进入取消阶段,通知所有参与者回滚预留的资源。

    • 优点:比2PC更具容错性,适用于高并发场景。
    • 缺点:实现复杂,需要考虑各种异常情况。
  3. 可靠消息(可靠消息⼀致性):
    可靠消息是一种基于消息队列的分布式事务处理方法。它将分布式事务拆分为多个消息队列,每个消息队列负责处理一个子事务。发送方将消息发送到消息队列后,可以立即返回。接收方从消息队列中消费消息并执行本地事务。如果本地事务执行成功,接收方会发送一个确认消息给发送方;否则,发送方会收到一个失败消息。发送方可以根据接收方的反馈来决定是重试还是回滚。

    • 优点:异步处理,提高系统性能。
    • 缺点:需要考虑消息丢失、重复消费等问题。
  4. 最大努力通知:
    最大努力通知是一种适用于最终一致性的分布式事务处理方法。它不保证每个操作都能成功。

    • 优点:异步处理,提高系统性能。
    • 缺点:需要考虑消息丢失、重复消费、数据一致性等问题。
类别两阶段提交TCC可靠消息最大努力通知
一致性强一致性最终一致性最终一致性最终一致性
吞吐量
复杂实现

9. 总结

在条件允许的情况下,我们应当尽可能选择本地事务单数据源,因为它可以降低网络交互所带来的性能损失,并避免数据弱一致性所引发的各种问题。

若某系统频繁且不合理地使用分布式事务,我们首先需从整体设计角度审视服务的划分是否合理,是否具备高内聚低耦合特性,以及粒度是否过小。

分布式事务一直是业界难题,由于网络的不确定性,习惯于将分布式事务与本机事务ACID进行对比。

无论是数据库层的XA协议、应用层的TCC、可靠消息、最大努力通知等方案,均未完美解决分布式事务问题。然而,它们在性能、一致性和可用性等方面进行了权衡,以满足特定场景下的需求。

0

评论区