分布式事务及解决方案

简介: 简单了解下什么是事务?用户定义的一系列数据库操作,这些操作可以视为一个完整的逻辑处理单元,要么全部执行,要么全部不执行。为保障事务是正确可靠的,事务具备4个特性:

前言

简单了解下什么是事务?用户定义的一系列数据库操作,这些操作可以视为一个完整的逻辑处理单元,要么全部执行,要么全部不执行。为保障事务是正确可靠的,事务具备4个特性:

原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成。

一致性(Consistency):在事务开始之前和事务结束之后,数据的完整性没有被破坏,比如;A和B共有200,A向B转账不管成功还是失败,总额还是200。

隔离性(Isolation):防止多个事务并发执行时导致数据不一致。

持久性(Durability):事务处理完成后对数据的修改是永久的。

通常一致性和隔离性通过锁实现,原子性和持久性通过日志实现

那什么是分布式事务?用户定义的一系列数据库操作,事务涉及到多个数据库或者多个服务,这个时候事务就不像本地事务一样好控制了,于是有了分布式事务解决方案,目的是为了保障分布式系统中数据一致性。

文章中出现的'事务协调者'字眼,什么是事务协调者?本地事务通过数据库可以直接begin ... rollback ... commit执行操作,那跨数据如何处理?这个时候需要一个中间人来通知数据库是否提交或者回滚,这个中间人可以叫做事务协调者。

XA规范

定义事务协调者和数据库之间的规范,事务协调者用它来通知数据库事务的开始、结束、提交、回滚等。XA规范由数据库厂商提供存在三种角色,彼此之间都有交互。
AP:Applicatioin 应用程序

TM:Transaction Manager事务管理者

RM:Resource Manager资源管理者(DB)
在这里插入图片描述

2PC 两阶段提交

事务协调者在第一段发送预备提交,如果各参与者响应yes后在第二段发送执行提交,各参与者提交事务并释放连接;如果各参与者响应no或者协调者在规定时间内未收到响应,第二段发送回滚操作,各参与者回滚并释放连接。

一阶段二阶段

缺点:

单点故障:协调者出错,事务失败。

阻塞资源:两阶段内保持连接,占用数据库连接,性能低。解决:1阶段直接提交断开连接,二阶段记录提交前的状态,失败直接回归到之前状态(seata解决)。

数据不一致:二阶段提交过程中有一方RM出错,导致数据不一致。解决:用脚本检查数据,如果出现异常,修改数据达到一致。

3PC 三阶段提交

3PC优化了2PC一处缺点,第一段会检查是否可以成功操作,避免因操作失败而占用资源,参与者响应yes后再继续后续操作,后续操作则与2PC一致。
can commit:询问能否操作

pre commit:预备提交

do commit:执行提交
3PC

TCC解决方案

TCC分为三个阶段:
try:对资源进行锁定或者预留。
confirm:如果Try阶段都响应正常,执行Try阶段预留资源操作。
cancel:如果Try阶段响应异常,撤销Try阶段预留资源操作。
在进行一系列操作时,都有与其对应的确认和撤销操作。上图理解:
在这里插入图片描述

最大努力通知方案

简单理解:在一个大的事务分成多个小事务的情况下,某一个事务执行成功后通知另一事务,如果通知不到,在规定的次数一直通知,同时另一个事务可以去该事务主动拉取数据。


补充

最近在看阿里开源的seata,发现文档中有特别详细的关于分布式事务的介绍seata官方文档

相关文章
|
6天前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
9天前
|
存储 监控 数据可视化
性能监控之JMeter分布式压测轻量日志解决方案
【8月更文挑战第11天】性能监控之JMeter分布式压测轻量日志解决方案
26 0
性能监控之JMeter分布式压测轻量日志解决方案
|
1月前
|
存储 NoSQL 算法
实现分布式锁的Java解决方案
实现分布式锁的Java解决方案
|
1月前
|
关系型数据库 分布式数据库 数据库
PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。
【7月更文挑战第3天】PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。通过数据分片和水平扩展支持微服务弹性,保证高可用性,且兼容MySQL协议,简化集成。示例展示了如何使用Spring Boot配置PolarDB,实现服务动态扩展。PolarDB缓解了微服务数据库挑战,加速了开发部署,为云原生应用奠定基础。
187 3
|
1月前
|
负载均衡 Java 开发者
Spring Cloud实战:构建分布式系统解决方案
Spring Cloud实战:构建分布式系统解决方案
|
29天前
|
存储 数据管理 数据库
现代数据库技术中的分布式一致性问题与解决方案探讨
分布式系统在现代数据库技术中扮演着重要角色,但分布式环境下的数据一致性问题始终是挑战之一。本文深入探讨了分布式一致性的核心概念、各种一致性模型的特点及其在实际应用中的优缺点,旨在为技术从业者提供全面的视角和实用的解决方案。
|
1月前
|
消息中间件 Java 中间件
Java面试题:解释分布式事务的概念,讨论常见的分布式事务解决方案。
Java面试题:解释分布式事务的概念,讨论常见的分布式事务解决方案。
29 0
|
1月前
|
存储 NoSQL 算法
实现分布式锁的Java解决方案
实现分布式锁的Java解决方案
|
1月前
|
消息中间件 Java 数据库
实现Java中的分布式事务管理的挑战与解决方案
实现Java中的分布式事务管理的挑战与解决方案
|
1月前
|
消息中间件 运维 Java
实现分布式事务处理的Java解决方案
实现分布式事务处理的Java解决方案

热门文章

最新文章