在看分布式事务之前,我们必须先要清楚的知道事务是什么。事务就是把很多事情当做一件事情来处理,要么一起失败要么一起成功。特别注意一,事务的概念是对数据库而言,比如Spring的@Transactional 本质上就是封装了对数据库事务的一系列操作。关于事务更详细的内容请参考 【MySQL】事务与锁(一):详解数据库事务及并发时可能出现的问题…
1.分布式事务是什么?
在分布式场景下,所涉及到的事务操作不再是单机,而是跨进程
实际上分布式事务问题就是分布式下数据一致性问题,这里的一致性简单一点理解就是所有节点的数据操作/变更一起成功一起失败。
2.要解决的问题
在分布式系统中,每一个机器节点虽然都能够明确知道自己在进行事务操作过程中的结果是成功还是失败,但却无法直接获取到其他分布式节点的操作结果。那么如何解决这个一致性问题呢?
1)方案一:让各个节点间通信,各个节点自己协调。
问题:实现起来复杂,通信频繁,而且对于事务成功失败的考量不属于任何一个服务应该提供的功能
2)方案二:选取一个第三方组件,作为协调者
- 整体上看,负责管理全局事务的提交和回滚
- 实际上,负责记录事务参与者本地事务操作的提交和回滚
实际上述的这种方案就是 X/OpenDTP 事务模型的基本雏形。