• C++面试 -分布式架构-架构能力:分布式事务的学习


           

    目录

    1. 分布式事务的基本概念

    2. 分布式事务的需求背景

    3. 分布式事务的实现方式

    1. 两阶段提交(2PC)

    2. 三阶段提交(3PC)

    3. 补偿事务(Saga)

    4. 分布式事务协调器

    4. 分布式事务的挑战

    5. 面试准备建议


            分布式事务是分布式系统中保证数据一致性和完整性的一种机制。在多个独立的数据库或服务中进行操作时,分布式事务确保所有操作要么全部成功,要么全部失败。这对于构建可靠的分布式应用至关重要。在面试中,理解分布式事务的基本概念、类型、实现方式和挑战是非常重要的。下面详细介绍分布式事务的关键点。

    1. 分布式事务的基本概念

            分布式事务是在不同的数据库、系统或网络分区中进行的事务,需要跨多个数据存储系统保持数据的一致性。与传统的单体事务相比,分布式事务管理更加复杂,因为它需要协调和管理跨越不同系统的操作。

    2. 分布式事务的需求背景

    • 系统间的数据一致性:在微服务架构或分布式系统中,不同服务可能使用独立的数据库,分布式事务确保跨服务的操作一致。
    • 业务流程的完整性:某些业务流程可能涉及多个服务的操作,分布式事务保证这些操作要么全部成功,要么全部回滚。

            以一个电商平台为例,这个平台由多个微服务构成,包括用户服务、订单服务、库存服务和支付服务,每个服务都可能使用独立的数据库。在这样的系统中,一个典型的业务流程如用户下单购买商品,涉及到以下几个步骤,展现了分布式事务对系统间数据一致性和业务流程完整性的需求:

    1. 用户下单:用户在电商平台上下单购买商品。此操作涉及用户服务(减少用户余额)、订单服务(创建新订单)和库存服务(减少商品库存)。

    2. 检查库存:在订单服务创建订单前,需要调用库存服务确认商品库存足够。

    3. 支付处理:用户服务需要处理用户的支付请求,扣减用户账户中的余额。

    4. 更新库存:支付成功后,库存服务需要更新商品的库存量,减去用户购买的数量。

    5. 确认订单:最后,订单服务确认订单状态更新为已支付。

            在这个过程中,如果任何一个步骤失败(例如,库存不足、支付失败等),整个购买过程需要回滚。例如:

    • 如果用户支付后,发现库存服务更新失败(可能是因为商品已被其他用户购买完),则需要取消这次操作,包括退款给用户、恢复库存数量和取消订单。
    • 这意味着用户的余额需要恢复,库存数量不变,订单状态更新为取消,确保系统的数据一致性和业务流程的完整性。

            在没有分布式事务管理的情况下,实现这种复杂业务流程的数据一致性和完整性是非常困难的。分布式事务通过跨服务的操作协调,确保了即使在服务调用失败或网络问题的情况下,也能保持整个系统的一致性和业务流程的原子性。这个例子清晰地展示了分布式事务在维护微服务架构中的数据一致性和业务流程完整性方面的关键作用。

    3. 分布式事务的实现方式

            分布式事务的实现通常基于以下几种模型:

    • 两阶段提交(2PC):是分布式事务的经典实现方式,分为准备阶段和提交阶段,确保所有参与者都同意提交事务。
    • 三阶段提交(3PC):在两阶段提交的基础上增加了一个预提交阶段,以减少阻塞和提高系统的可用性。
    • 补偿事务(Saga):通过一系列本地事务和补偿操作来管理分布式事务,适用于长事务和微服务架构。
    • 分布式事务协调器:如XA协议、TCC(Try-Confirm/Cancel)模式,这些协调器帮助管理分布式事务的不同阶段。

            让我们深入了解这些分布式事务的实现方式,以及它们的工作原理和适用场景。

    1. 两阶段提交(2PC)

            两阶段提交是分布式事务中最常见的一种实现方式,它包含两个阶段:准备阶段和提交阶段。

    • 准备阶段:事务协调器(通常是一个中心节点)询问所有参与事务的节点(或称为参与者),是否准备好提交事务。如果所有参与者都回答“是”,则进入下一阶段;如果任何一个参与者回答“否”,则事务将被回滚。
    • 提交阶段:事务协调器根据第一阶段的回应,决定是让所有参与者提交事务,还是回滚事务。所有参与者都将遵循协调器的决定。

            2PC保证了事务的原子性和一致性,但其缺点是性能开销较大,特别是在高延迟网络环境下,事务锁定资源的时间较长,影响系统吞吐量。

    2. 三阶段提交(3PC)

            三阶段提交是对两阶段提交的改进,增加了一个预提交阶段,目的是减少阻塞时间,提高系统的可用性和容错性。3PC的阶段包括:

    • 预准备阶段:事务协调器向所有参与者询问是否可以执行事务,并收集回应。
    • 准备阶段:一旦所有参与者同意,协调器将进入准备阶段,参与者开始准备数据,锁定资源。
    • 提交/回滚阶段:根据前两个阶段的结果,协调器决定是提交还是回滚事务,并通知所有参与者执行相应操作。

            3PC通过引入预准备阶段,提高了系统对节点故障的容忍度,但相比2PC,它引入了更多的消息交换,可能会影响系统性能。

    3. 补偿事务(Saga)

            Saga是一种管理长期事务的方法,特别适用于微服务架构。它不是通过锁定资源来实现一致性,而是通过一系列本地事务和补偿操作(回滚操作)来维持系统的一致性。

    • 操作序列:一个Saga包含一系列事务,这些事务分布在不同的服务中。
    • 补偿操作:如果某个事务失败,将执行之前成功事务的补偿操作来回滚整个Saga,保证系统一致性。

            Saga模式适用于长事务和需要高度可用性的分布式系统,但设计和实现补偿逻辑可能比较复杂。

    4. 分布式事务协调器

            如XA协议和TCC(Try-Confirm/Cancel)模式等,是专门设计来管理分布式事务的协调器。

    • XA协议:是一个两阶段提交的标准,由事务管理器(TM)和资源管理器(RM)组成,广泛支持在数据库和消息队列中。
    • TCC模式:分为尝试(Try)、确认(Confirm)、取消(Cancel)三个阶段。在Try阶段预留资源,在Confirm阶段执行事务,在Cancel阶段执行回滚。TCC模式更加灵活,适用于业务逻辑较为复杂的场景。

            每种实现方式都有其优点和局限性,选择合适的分布式事务方案需要根据具体的业务需求、系统架构和性能要求来决定。

    4. 分布式事务的挑战

    • 性能问题:分布式事务的协调和管理增加了系统的复杂性,可能影响系统的响应时间和吞吐量。
    • 数据一致性:在分布式系统中保持数据一致性是一个挑战,尤其是在网络分区或服务故障的情况下。
    • 系统依赖性:分布式事务的实现可能依赖于特定的技术栈或中间件,这可能限制系统的灵活性和可移植性。

    5. 面试准备建议

    • 理解不同分布式事务模型的优缺点:准备分析2PC、3PC、Saga等模型的工作原理及其适用场景。
    • 实践经验:如果有机会,尝试在项目中实践分布式事务的应用,了解其在实际环境中的表现和挑战。
    • 关注最新技术:了解新兴的分布式事务处理技术和框架,例如区块链技术在分布式事务管理中的应用。

            准备分布式事务的面试时,重点是理解其核心概念、实现机制和面临的主要挑战。通过结合理论知识和实践经验,你将能够更好地向面试官展示你对分布式事务的深入理解。

  • 相关阅读:
    GraphQL 查询:一个全面指南
    攻防演练中攻击队攻击的必备能力
    OpenGL笔记九之彩色三角形与重心插值算法
    XDU2019级保研数据统计分析
    手机投屏到电脑时,手机提示连接失败
    HCIP-MGRE实验
    Spring Boot + Canal 实现数据库实时监控
    多线程概述
    算法基础学习笔记——⑩DFS与BFS\树与图
    关于JS进行大文件分片上传碰到的问题
  • 原文地址:https://blog.csdn.net/weixin_44120785/article/details/136359213