分布式事务及解决方案

简介: 简单了解下什么是事务?用户定义的一系列数据库操作,这些操作可以视为一个完整的逻辑处理单元,要么全部执行,要么全部不执行。为保障事务是正确可靠的,事务具备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官方文档

相关文章
|
3月前
|
存储 SQL 微服务
常用的分布式事务解决方案(三)
常用的分布式事务解决方案(三)
|
3月前
|
关系型数据库 MySQL
常见分布式事务的解决方案(一)
常见分布式事务的解决方案(一)
|
1月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
43 5
|
3月前
|
消息中间件 中间件 关系型数据库
常用的分布式事务解决方案(四)
常用的分布式事务解决方案(四)
|
3月前
常用的分布式事务解决方案(二)
常用的分布式事务解决方案(二)
|
4月前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
4月前
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
147 2
|
4月前
|
存储 监控 数据可视化
性能监控之JMeter分布式压测轻量日志解决方案
【8月更文挑战第11天】性能监控之JMeter分布式压测轻量日志解决方案
107 0
性能监控之JMeter分布式压测轻量日志解决方案
|
5月前
|
存储 NoSQL 算法
实现分布式锁的Java解决方案
实现分布式锁的Java解决方案
|
5月前
|
关系型数据库 分布式数据库 数据库
PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。
【7月更文挑战第3天】PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。通过数据分片和水平扩展支持微服务弹性,保证高可用性,且兼容MySQL协议,简化集成。示例展示了如何使用Spring Boot配置PolarDB,实现服务动态扩展。PolarDB缓解了微服务数据库挑战,加速了开发部署,为云原生应用奠定基础。
332 3

热门文章

最新文章