程序员分布式

分布式事务- 二阶段协议

2018-06-21  本文已影响25人  阿里加多

一、前言

在单个数据库实例时候,我们可以在一个数据源的事务(本地事务)内做多步数据库操作,在事务内的多个操作要么全部执行生效,要么全部不生效。在多数据实例节点时候,我们对多个实例的数据源进行操作时候就没办法把多个操作放到一个大的事务内来管理了,因为多个实例操作的是不同的数据源,而数据库自带的事务是针对单个数据源来说的。

二、二阶段协议

单个数据库实例内的事务我们称为本地事务,需要保证多个数据源的操作要么都做要么都不做的事务我们成为分布式事务,为了实现分布式事务,二阶段与三阶段协议就应运而生了。

分布式事务由事务发起者、资源管理器(参与者)、事务协调者组成,下面我们看看二阶段协议内容:

如果协调器发现有些参与者返回事务提交失败,则执行具体的事务补偿策略。

三、总结

二阶段协议是个标准协议,协议只是规定了分布式事务实现的骨架,并没有规定具体如何实现,比如事务协调器是作为一个单独应用存在,还是与事务发起方一起部署的?事务参与者是单独的应用还是与发起方一起的?并且并没有考虑异常情况,比如第二阶段如果有部分参与者返回提交失败或者由于网络原因返回了提交OK,但是事务协调器没有收到,该怎么处理?

另外分布式事务并不是简单说对多个数据源操作的原子性,还可以是数据源操作与远程RPC的原子性,数据源与发送消息的原子性。

下文我们来谈谈2阶段的缺点以及三阶段协议的原理。

最后

想了解JDK NIO和更多Netty基础的可以单击我

想了解更多关于粘包半包问题单击我
更多关于分布式系统中服务降级策略的知识可以单击 单击我
想系统学dubbo的单击我
想学并发的童鞋可以 单击我

上一篇下一篇

猜你喜欢

热点阅读