分布式事务解决方案之XA/JTA两阶段提交方案,MQ消息最终一致性方案,TCC补偿性方案

1 篇文章 0 订阅
1 篇文章 0 订阅

前言

本文主要讲解不同场景下分布式事务的解决方案,以及区别和相关理论。(部分图片来自网络)

一、分布式事务的相关理论

CAP理论:

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分区容错(Partition-tolerance)
    一个分布式系统最多只能满足以上的两项,分区容错性是分布式系统必然需要面对和解决的问题,因此在一些大型互联网公司都会把精力放在如何在C(一致性)和A(可用性)之间寻求平衡。

BASE理论

  • 基本可用(Basically Available)
    指分布式系统在出现不可预知故障的时候,允许损失部分可用性。
  • 软状态( Soft State)
    指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
  • 最终一致( Eventual Consistency)
    强调的是所有的数据更新操作,在经过一段时间的同步之后,最终都能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。
    BASE理论即在整体可用的情况下,满足最终一致性,BASE理论可以说是CAP理论的拓展。

二、分布式事务解决方案

1.跨库事务(强一致性事务)

跨库事务即在一个jvm内调用两个数据库。
XA是由X/Open组织提出的分布式事务的规范,主要定义了:

  • (全局)事务管理器(Transaction Manager),承担协调者(中间人transactionmanager)的身份
  • (局部)资源管理器(Resource Manager),通常是数据源
  • XA接口是双向的系统接口,在事务管理器(Transaction Manager)以及一个或多个资源管理器(Resource Manager)之间形成通信桥梁。

JTA是XA协议在JAVA上上的实现,主要定义了:

  • 事务管理器的接口javax.transaction.TransactionManager,定义了有关事务的开始、提交、撤回等操作。
  • 满足XA规范的资源定义接口javax.transaction.xa.XAResource,一种资源如果要支持JTA事务,就需要让它的资源实现该XAResource接口,并实现该接口定义的两阶段提交相关的接口。

XA/JTA简单来说就是一个两阶段提交协议,以下图举例。

  1. 准备阶段:协调者(事务管理器Transaction Manager)询问每个数据源(资源管理器 Resource Manager)。事务管理器询问订单库和库存库,数据是否准备好,是否可以提交。
  2. 执行阶段:如果数据源都回复可以提交数据,则协调者会把每个数据源的数据提交。如果数据源因为资源不足(库存不足)或网络连接失败等情况,回复不可以提交,则协调者会把每个数据源的数据进行回滚。
    在这里插入图片描述
    常见的JTA实现Atomikos,TransactionEssentials。

2.跨JVM事务(柔性事务)

XA/JTA是强一致性事务,在分布式系统中体现为CP。虽然数据强一致,但在大型互联网公司通常对AP与CP都有需求,此种方案明显无法被使用。 大多数互联网公司都采用基于BASE理论的柔性事务,兼顾AP与CP。

2.1.可靠消息最终一致性方案

可靠消息最终一致性方案是基于消息中间件的解决方案。
在确保消息服务可用的前提下,由生产者预发送消息给独立消息服务存储到数据库,之后执行业务逻辑,执行完之后向消息服务发送确定发送消息,独立消息服务将此消息发送到消息队列中。此时消息消费者,在保证幂等性的前提下,消费消息,消费成功后并手动ack。如果在确认发送消息或ack因网络等原因,一直无法执行时。独立消息服务可以通过定时器,定时去相应服务查询相关数据的状态,进行自动确认发送和自动ack。
基于普通的消息队列中间件
例子如下:
在这里插入图片描述
独立消息服务定时任务的作用就是解决异常情况下,消息无法发送和消费成功无ACK的情况。但是如果消息消费的过程中出现了异常情况,且多次重试都无法成功的情况下,就需要人工干预。

2.2.TCC(Try-Confirm-Cancel)两阶段补偿型方案无分布式事务的下单场景TCC(Try-Confirm-Cancel)两阶段补偿型方案的下单场景

累了,TCC(Try-Confirm-Cancel)就不再赘述了。T指资源预留,C资源确认,C资源回滚。
如下单,通常情况下只用写一个接口。使用TCC方案下,需要写三个接口,一个是资源预留接口,资源预留通常新增数据库字段控制。一个是资源预留成功情况下的资源确定接口,一个是资源预留失败情况下的资源回滚接口。
TCC开源框架实现:
Atomikos,tcc-transaction,ByteTcc

3.TCC与XA/JTA的对比

  • XA是资源层面的分布式事务,强一致性,在两阶段提交的整个过程中,一直会持有资源的锁
  • TCC是业务层面的分布式事务,最终一致性,不会一直持有资源的锁
    在这里插入图片描述
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
第1章 课程介绍 介绍该课程的内容、学习成果、实例,还有学习所需的前提知识。 1-1 导学-分布式事务实践 第2章 事务原则与实现 介绍了事务的四大原则,并通过实例介绍数据库实现事务的方法,以及使用JDBC实现事务的方法。 2-1 事务原则与实现:事务 2-2 事务原则与实现:SQL事务 2-3 事务原则与实现:JDBC事务(上) 2-4 事务原则与实现:JDBC事务(下) 第3章 使用Docker搭建环境 介绍了Docker的使用,通过Docker将课程环境搭建起来,方便那些不了解这些技术的同学之后的学习。 3-1 docker简介与mysql安装-1 3-2 docker简介与mysql安装-2 3-3 SpringBoot基础 第4章 Spring事务机制 介绍了Spring的事务机制、事物抽象、内部事务和外部事物,以及常用的几种事务管理的实现,包括DataSource、JPA、JMS、JTA都通过实例进行说明。还有XA以及阶段提交,并通过实例演示了使用JTA,通过阶段提交,实现多数据源的事务实现。... 4-1 Spring事务机制_基本接口 4-2 Spring事务机制_实现 4-3 Jpa事务实例 4-4 Jms事务原理 4-5 Jms-session事务实例 4-6 Jms-spring事务实例 4-7 外部事务与JTA 4-8 JTA单数据源事务实例 4-9 JTA多数据源事务实例 第5章 分布式系统 介绍了分布式系统的定义、实现原则和几种形式,详细介绍了微服务架构的分布式系统,并使用Spring Cloud框架演示了一个完整的微服务系统的实现过程。 5-1 CAP原则和BASE理论简介 5-2 分布式系统综述 5-3 SpringCloud微服务架构 5-4 实现registry 5-5 实现proxy 5-6 user服务 5-7 order服务 5-8 添加hystrix 5-9 使用feign 5-10 优化服务间调用 第6章 分布式事务实现,模式和技术 介绍分布式事务的定义、原则和实现原则,介绍使用Spring框架实现分布式事务的几种方式,包括使用JTA、Spring事务同步、链式事务等,并通过实战介绍其实现。除此以外还介绍了一些分布式事务相关的技术,如幂等性、全局一致性ID、分布式对象等。... 6-1 分布式事务介绍 6-2 spring分布式事务实现_使用JTA 6-3 spring分布式事务实现_不使用JTA 6-4 实例1-DB-DB 6-5 实例1-DB-DB.链式事务管理器 6-6 实例2-JPA-DB.链式事务管理器 6-7 实例3-JMS-DB.最大努力一次提交 6-8 分布式事务实现模式与技术 6-9 全局一致性ID和分布式对象_ 第7章 分布式事务实现:消息驱动模式 详细介绍3种分布式事务实现的模式中的消息驱动模式并通过完整实例演示了消息驱动模式下,实现微服务系统的分布式事务的完整过程。 7-1 分布式事务实现:消息驱动模式 7-2 消息驱动模式实例:设计 7-3 消息驱动模式实例:创建ticket服务 7-4 消息驱动模式实例:实现基本ticket功能 7-5 消息驱动模式实例:锁票1 7-6 消息驱动模式实例:锁票2 7-7 按消息流程实现业务 7-8 支付过程 7-9 票转移 7-10 错误处理:锁票失败 7-11 错误处理:扣费失败 7-12 并发时的错误处理 第8章 分布式事务实现:Event Sourcing模式 详细介绍了分布式事务实现的模式中的Event Sourcing模式,并通过完整实例演示了Event Sourcing模式下,实现微服务系统的分布式事务的完整过程。 8-1 事件溯源模式介绍 8-2 事件溯源模式与Axon框架-1 8-3 事件溯源模式与Axon框架-2 8-4 使用Axon框架的设计过程介绍 8-5 Axon框架-实例(上) 8-6 Axon框架-实例(下) 8-7 Saga模式和Axon Saga 8-8 聚合命令事件(上) 8-9 聚合命令事件(下) 8-10 实现saga 8-11 实现query 8-12 处理超时 8-13 并发测试 8-14 cloud-axon实例:分布式处理介绍 8-15 事件设计 8-16 事件与队列设计 8-17 实现User服务 8-18 实现Ticket服务 8-19 实现Order服务 8-20 实现读写分离 8-21 测试与并发 8-22 事件溯源模式与Axon框架总结 第9章 TCC模式和微服务架构的设计模式 本章介绍TCC模式,也对微服务系统的几种设计模式,以及这些模式下分布式事务的实现模式进行了介绍。 9-1 TCC模式介绍 9-2 微服务架构的设计模式 第10章 课程总

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值