分布式事务- 二阶段协议
在单个数据库实例时候,我们可以在一个数据源的事务(本地事务)内做多步数据库操作,在事务内的多个操作要么全部执行生效,要么全部不生效。在多数据实例节点时候,我们对多个实例的数据源进行操作时候就没办法把多个操作放到一个大的事务内来保证原子性了,因为多个实例操作的是不同的数据源,而数据库自带的事务是针对单个数据源来说的。
二、二阶段协议单个数据库实例内的事务我们称为本地事务,需要保证多个数据源的操作要么都做要么都不做的事务我们成为分布式事务,为了实现分布式事务,二阶段与三阶段协议就应运而生了。
分布式事务由事务发起者、资源管理器(参与者)、事务协调者组成,下面我们看看二阶段协议内容:
第一阶段分布式事务发起方向事务协调器发起分布式事务,协调器则向所有事务参与者发起准备请求,事务参与者接受到请求后执行本地事务,但是不提交。如果所有事务参与者都返回了准备OK到事务协调器
则事务协调器准备进入第二阶段。如果有一个参与者返回准备失败,则事务协调器向所有参与者发起事务回滚请求,事务参与者收到请求后回滚执行的本地事务,则分布式事务结束。
第二阶段
事务协调器向所有事务参与者发起提交事务的请求,事务参与者接受到请求后,执行本地事务的提交操作。如果事务协调器收到所有参与者提交OK则分布式事务结束。
二阶段协议是个标准协议,协议只是规定了分布式事务实现的骨架,并没有规定具体如何实现,比如事务协调器是作为一个单独应用存在,还是与事务发起方一起部署的?事务参与者是单独的应用还是与发起方一起的?并且并没有考虑异常情况,比如第二阶段如果有部分参与者返回提交失败或者由于网络原因返回了提交OK,但是事务协调器没有收到,该怎么处理?
另外分布式事务并不是简单说对多个数据源操作的原子性,还可以是数据源操作与远程RPC的原子性,数据源与发送消息的原子性。
下文我们来谈谈2阶段的缺点以及三阶段协议的原理。
最后
想了解JDK NIO和更多Netty基础的可以单击我
想了解更多关于粘包半包问题单击我
更多关于分布式系统中服务降级策略的知识可以单击 单击我
想系统学dubbo的单击我
想学并发的童鞋可以 单击我
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/66210.html
aliyunjd相关文章
- 分布式事务-TCC(Hmily)[通俗易懂]
- 亿级流量架构之分布式事务解决方案解析
- ZooKeeper入门(四):ZooKeeper事务与分布式锁InterProcessMutax
- 数据库分库分表之后,如何解决事务问题
- 数据库事务概述
- 多数据源事务处理-涉及分布式事务
- MySQL 索引与事务
- 多数据源事务处理-涉及分布式事务
- Seata分布式事务落地解决方案
- 处理分布式事务(SpringCloud Alibaba Seata)
- Kafka快速入门(生产者)同步异步发送、分区、消息精确一次发送、幂等性、事务
- SpringCloud Alibaba Seata处理分布式事务
- 18个示例详解 Spring 事务传播机制
- 深入理解事务
- Hmily 分布式事务重启月度报告
- Redis 事务(一)
- SQLServer 错误 3937 在试图通知 FILESTREAM 筛选器驱动程序某事务已回滚时出错。 错误代码:0x%0x。 故障 处理 修复 支持远程
- Spring Boot2.0之多数据源分布式事务问题详解编程语言
- MySQL分布式事务:实现稳定性与可靠性(mysql分布式事务实现)
- php解决分布式事务的全宇宙最完美的解决方案详解编程语言
- SAP BW常用后台事务码详解编程语言
- MySQL设置事务自动提交(开启和关闭)
- MySQL事务隔离级别:保护你的数据(mysql事物隔离级别)
- 解密分布式事务锁技术:MySQL的应用与优势(分布式事务锁mysql)
- 在PHP中操作MSSQL数据库:事务处理技巧(php mssql 事务)
- MySQL事务应用实践研究(c mysql 事物)
- 基于Redis的分布式事务处理架构 (用redis实现分布事务)
- TP5Redis实现轻松分布式事务(tp5 redis事物)
- Oracle事务连接中断处理指南(oracle事务连接中断)
- Oracle事务处理的技巧与方法(oracle事务怎么处理)
- 事务Oracle数据库不再支持XA事务(oracle不支持xa)