加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

再问你一遍,你真的了解分布式事务吗?

发布时间:2020-02-22 18:25:08 所属栏目:MySql教程 来源:站长网
导读:副标题#e# 图片来自 Pexels 本地事务 事务 Transaction 由一组 SQL 组成,具有四个 ACID 特性: Atomicity:原子性,构成事务的一组SQL,要么全部生效,要么全不生效,不会出现部分生效的情况。 Consistency:一致性,数据库经过事务操作后从一种状态转变为

再问你一遍,你真的了解分布式事务吗?

再问你一遍,你真的了解分布式事务吗?

二阶段提交是解决分布式事务问题的重要理论基础,但也存在着明显的问题:

阻塞问题,参与者将协议消息发送给协调器后,它将阻塞直到收到提交或回滚,只能依赖协调者的超时机制。

协调者单点问题,如果协调者出现故障,则某些参与者将一直无法收到提交或回滚的消息。

为了解决二阶段提交出现的问题,又有了三阶段提交(Three-phase commit):

解决阻塞问题:将 2PC 中的第一阶段一分为二,提供了一个 CanCommit 阶段,此阶段并不锁定资源,这样可以大幅降低阻塞概率。

解决单点问题:在参与者这边也引入了超时机制。

DTP Model

X/Open 分布式事务处理 DTP(Distributed Transaction Processing)模型是一种软件体系架构,已经成为事实上的事务模型组件的行为标准。

再问你一遍,你真的了解分布式事务吗?

它允许多个应用程序共享由多个资源管理器提供的资源,并允许其工作被协调为全局事务:

ApplicationProgram(AP),应用程序定义了事务边界并指定构成事务的操作。

ResourceManager(RM),资源管理器用来管理我们需要访问的共享资源,我们可以将它理解为关系数据库、文件存储系统、消息队列、打印机等。

TransactionManager(TM),事务管理器是一个独立的组件,他为事务分配标识符并监视事务的执行情况,负责事务完成和故障恢复。

CommunicationResourceManager(CRM),通信资源管理器控制一个或多个 TM domain 之间分布式应用的通信。

XA Specification:XA 规范是 X/Open 关于分布式事务处理(DTP)的规范。规范描述了全局的事务管理器与局部的资源管理器之间的接口。

XA 规范的目的是允许多个资源(如数据库,应用服务器,消息队列,等等)在同一事务中访问,这样可以使 ACID 属性跨越应用程序而保持有效。

XA 使用两阶段提交来保证所有资源同时提交或回滚任何特定的事务。

XA 规范描述了资源管理器要支持事务性访问所必需做的事情。

再问你一遍,你真的了解分布式事务吗?

TCC

再问你一遍,你真的了解分布式事务吗?

再问你一遍,你真的了解分布式事务吗?

Saga

再问你一遍,你真的了解分布式事务吗?

在 Saga 模式下,分布式事务内有多个参与者,每一个参与者都是一个冲正补偿服务,需要用户根据业务场景实现其正向操作和逆向回滚操作。

分布式事务执行过程中,依次执行各参与者的正向操作,如果所有正向操作均执行成功,那么分布式事务提交。

如果任何一个正向操作执行失败,那么分布式事务会去退回去执行前面各参与者的逆向回滚操作,回滚已提交的参与者,使分布式事务回到初始状态。

再问你一遍,你真的了解分布式事务吗?

Saga 模式下分布式事务通常是由事件驱动的,各个参与者之间是异步执行的,Saga 模式是一种长事务解决方案。

Saga 模式的优势是:

一阶段提交本地数据库事务,无锁,高性能。

参与者可以采用事务驱动异步执行,高吞吐。

补偿服务即正向服务的“反向”,易于理解,易于实现。

缺点:Saga 模式由于一阶段已经提交本地数据库事务,且没有进行“预留”动作,所以不能保证隔离性。

开源项目

Seata

Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。支持 AT、TCC、Saga、XA 四种模式,对微服务框架支持友好。

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读