【分布式原理】分布式事务2PC、3PC、TCC、本地消息表、消息事务
文章目录
什么是分布式事务?
事务的定义就是一个大的操作由小的操作组成,要保证一些列操作要么全部成功要么全部失败,失败后回滚到之前的状态。
在传统单机上面,整个事务都是在本机运行,如果出现了错误,很容易就能检测到并且回滚,但是在分布式中,逻辑可能是多个机器共同完成的,中间是通过远程协作来完成,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务。
举个例子:
如电商的下单扣库存操作,整体事务逻辑大概是扣库存,扣余额,创建订单,假如是分布式系统并且都是不同的服务,由于网络问题,先扣库存,然后再去余额服务扣库存,扣完后调用没有返回或者余额服务器宕机了,这时候侯库存会回滚,但是余额已经被扣了,导致出错。
数据库事务特性ACID
-
原子性(Atomicity): 事务是最小的执行单位。事务的原子性确保动作要么全部完成,要么完全不起作用;
-
一致性(Consistency): 执行事务后,数据库从一个正确的状态变化到另一个正确的状态;
-
隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
-
持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
分布式事务2PC
2PC (two phase commit)两阶段提交协议。从名字就知道分为两个阶段。
在该分布式系统中,存在一个节点作为协调者(Coordinator),其他节点作为参与者(Participants)。
事务的具体流程
第一阶段:提交请求阶段:‘
- 事务询问:协调者向所有参与者发出事务询问,询问是否可以执行事务操作,并等待各参与者的响应。
- 执行事务:各个参与者节点执行事务操作,并将undo和r