分布式事务:基本概念

事务

本地事务

对同一数据源操作,进行一组相关的sql操作(至少两个增删改),要么全部成功,要么全部失败。

事务四个特性(ACID)

原子性,一致性,隔离性,持久性

事务的隔离级别

根据两个事务之间的干扰性强弱,划分为几个级别

读未提交、读已提交、可重复读、串行化

脏读:事务a读取到了事务b未提交的数据,有可能这些数据就是事务b的中间数据

不可重复读:可重复读

幻读:一个事务在查询,另一个事务在做插入或者删除,此时就会出现幻读。

image-20210317111915061

事务隔离级别越高,性能越低。

本地事务实现

spring方式:aop实现,xml注解形式(@Traansactional)

1.配置数据源

2.配置事务管理器,跟数据源匹配

3.切面和切入点(决定给哪些业务)

4.配置事务通知

5.将切入点和事务通知联系起来

分布式事务

事务的参与者服务器数据源事务管理器,分布在不同的节点上.原子性操作,要么全部成功,要么全部失败.

image-20210317114415293

刚性事务:ACID

柔性事务:CAPBASE

image-20210317115152079

CAP理论

定义:数据一致性(consistency)、服务可用性(availability)、分区容错性(partition-tolerance)

CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡。

CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍必的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

image-20210317115801470

BASE理论

BASE其实是下面三个术语的缩写:

  • 基本可用(Basically Available)
  • 软状态(Soft state)
  • 最终一致(Eventually consistent)

核心思想:分布式事务,只需要达到最终一致性即可。

柔性事务

概念:符合BASE理论的分布式解决方案,就叫做柔性事务。

典型的柔性事务方案:

  • TCC(两阶段型、补偿型)
  • 可靠消息最终一致性(异步确保型)消息队列保证事务一致性
    • 非事务型消息中间件(activemq,rabbitmq,kafka)
    • 事务性消息rocketmq
  • 最大努力通知(非可靠消息、定期校对)

DTP

分布式事务处理模型(DTP)

模型元素5个:

  • 应用程序 Application Program 简称AP
  • 资源管理器 Resource Manager 简称RM,例如数据库、文件系统等
  • 事务管理器 Transaction Manager 简称TM,负责分配事务唯一标识,监控事务的执行进度,并负责事务的提交、回滚等。
  • 通信资源管理器 Communication Resource Manager 简称CRM:控制一个TM域内或者跨TM域的分布式应用之间的通信。
  • 通信协议 Communication Protocol 简称CP

image-20210317131747384

XA规范

XA规范最主要的作用是:定义了RM-TM的交互接口。

image-20210317131857476

XA规范与二阶段协议

二阶段协议并非在XA规范中提出来的,但是XA规范定义了两阶段提交协议中需要使用到的接口。

image-20210317132055059

XA和二阶段是相互参考的。

JTA、XA、atomikos之间的关系

可以认为JTA是XA规范的java版本。在jta中,事务管理抽象为javax.transaction.TransactionManager接口,并通过底层事务服务(JTS)实现。

JTA仅仅定义了接口

实现:

  • J2EE容器提供的JTA实现(JBOSS)
  • 独立的JTA实现:例如JOTM、Atomikos,可用于Tomcat、jetty以及普通的java应用。
  • Atomikos JTA实现,用于tomcat容器
原文地址:https://www.cnblogs.com/wwjj4811/p/14548937.html