自学内容网 自学内容网

分布式事务的解决方案(如两阶段提交、TCC、SAGA)。Spring的核心概念(如IOC、AOP)。

分布式事务的解决方案(如两阶段提交、TCC、SAGA)。

分布式事务是指发生在多个数据节点之间的事务,它比单机事务要复杂得多。以下是几种常见的分布式事务解决方案:

一、两阶段提交(2PC)

两阶段提交协议是最经典的分布式事务解决方案之一,它最早由分布式事务专家Jim Gray提出。该协议可以保证数据的强一致性,即保证分布式事务的原子性:所有结点要么全做,要么全不做。

  1. 原理

    • 准备阶段:协调者(TM)通知事务参与者(RM)准备提交或取消事务,参与者写本地的redo和undo日志,但不提交,然后进入表决过程。参与者将告知协调者自己的决策:同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)。
    • 提交阶段:协调者基于准备阶段的投票结果进行决策。当且仅当所有的参与者同意提交事务时,协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务。
  2. 优缺点

    • 优点:实现简单,能够确保数据的一致性。
    • 缺点:存在同步阻塞问题,所有参与节点在事务进行过程中都处于阻塞状态,直到事务提交或回滚;存在单点故障问题,协调者一旦出现故障,整个分布式事务将无法继续;在二阶段提交的阶段二中,如果协调者向参与者发送commit请求后发生故障,可能导致部分参与者接收到commit请求并执行提交,而其他参与者未接收到commit请求而无法提交,造成数据不一致。

二、TCC(Try-Confirm-Cancel)

TCC是一种补偿式的分布式事务解决方案,它通过在业务逻辑中嵌入Try、Confirm、Cancel三个阶段的操作来确保分布式事务的一致性和可靠性。

  1. 原理

    • Try阶段:尝试执行业务操作,并预留必要的资源。如果成功,则返回一个全局唯一的事务ID(XID)和表示操作是否成功的结果。
    • Confirm阶段:确认Try阶段成功提交的操作。它应该是一个幂等操作,即使多次调用也应该产生相同的结果。
    • Cancel阶段:如果Try或Confirm阶段出现错误或异常,则进入Cancel阶段,取消Try阶段预留的资源,并回滚可能的业务操作。它同样应该是一个幂等操作。
  2. 优缺点

    • 优点:灵活性高,允许在业务逻辑中自定义补偿操作;减少了阻塞时间,Try阶段可以预留资源,提高了并发能力。
    • 缺点:应用侵入性强,需要在业务逻辑中嵌入Try-Confirm-Cancel三个阶段的逻辑;开发难度大,需要保证Confirm和Cancel接口的幂等性。

三、SAGA

Saga是一种在分布式系统中处理事务的模式,它通过将一个大的事务拆分为一系列小的、相互关联的子事务来实现。每个子事务独立执行,并且可以具有回滚和补偿机制,以保证整个事务的一致性。

  1. 原理

    • Saga中的每个子事务都有对应的正向操作和补偿操作。当执行正向操作时,如果成功,则继续执行下一个子事务的正向操作;如果失败,则依次执行已执行子事务的补偿操作,进行回滚。
  2. 优缺点

    • 优点:适用于长事务场景,能够将复杂的大事务拆分为多个简单的子事务进行处理;具有回滚和补偿机制,能够确保事务的一致性。
    • 缺点:实现复杂,需要为每个子事务定义正向操作和补偿操作;在出现故障时,需要依次执行已执行子事务的补偿操作,可能耗时较长。

综上所述,不同的分布式事务解决方案各有优缺点,适用于不同的业务场景和需求。在选择分布式事务解决方案时,需要根据具体业务场景和需求进行权衡和选择。

Spring的核心概念(如IOC、AOP)。

Spring是一个功能强大且灵活易用的Java应用框架,其核心概念主要包括控制反转(IoC)和面向切面编程(AOP)。

一、控制反转(IoC)

  1. 定义
    • IoC,全称Inversion of Control,即控制反转,是一种设计原则,用于降低计算机代码之间的耦合度。在Spring框架中,对象的创建和依赖关系的管理交由Spring容器来负责,而不是在对象内部通过new关键字来创建依赖对象。
  2. 实现方式
    • 依赖注入(DI):是IoC的一种实现方式。Spring容器在创建对象时,会自动将其依赖的对象注入到该对象中。这可以通过构造器注入、属性注入或方法注入等方式实现。
  3. 优势
    • 通过IoC,代码之间的耦合度降低了,使得程序更易于测试和维护。
    • 开发者可以更加专注于业务逻辑,而无需关心对象的创建和管理。
  4. 核心组件
    • Spring容器:负责管理应用程序中对象的生命周期和依赖关系。它提供了两个主要的IoC容器:BeanFactory和ApplicationContext。

二、面向切面编程(AOP)

  1. 定义
    • AOP,全称Aspect-Oriented Programming,即面向切面编程,是一种编程范式。它允许开发者定义横切关注点(cross-cutting concerns),如日志、事务管理等,并将它们与业务逻辑分离。
  2. 核心概念
    • 横切关注点:跨越应用程序多个模块的方法或功能,即与业务逻辑无关但需要在多个模块中执行的功能,如日志、安全、缓存、事务等。
    • 切面(Aspect):横切关注点被模块化的特殊对象,即一个类。
    • 通知(Advice):切面必须要完成的工作,即类中的一个方法。
    • 目标(Target):被通知对象。
    • 代理(Proxy):向目标对象应用通知之后创建的对象。
    • 切入点(PointCut):切面通知执行的“地点”的定义。
    • 连接点(JointPoint):与切入点匹配的执行点。
  3. 优势
    • 通过AOP,业务逻辑和横向关注点(如日志、安全)分离,业务代码更干净,只关注核心逻辑。
    • 日志记录、安全检查等通用功能只需要编写一次,通过AOP应用到多个模块,提高了代码的重用性。
    • 如果需要修改通用功能,只需在AOP切面中修改,无需触及业务逻辑代码,提高了代码的可维护性。

综上所述,IoC和AOP是Spring框架的核心概念,它们共同构成了Spring框架的基础架构,使得开发者能够构建出高内聚、低耦合、易于维护和扩展的应用程序。


原文地址:https://blog.csdn.net/weixin_53180424/article/details/142713962

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!