BASE: 通过牺牲强一致性来获得可用性
- Basically Available(基本可用): 分布式系统在出现故障时,允许损失部分可用功能,保证核心功能可用。
- Soft state(软状态): 允许系统中存在中间状态,这个状态不影响系统可用性。
- Eventually consistent(最终一致): 经过一段时间后,所有节点数据都将会达到一致。
2PC:
- XA: 数据库层面
- Seata: 分布式事务框架
3PC:在2PC中,participant在发送PREPARED消息后,收到coodinator最终决定(COMMIT / ABORT)前,无法单独决定要提交还是回滚事务,如果此时coodinator宕机,participant的事务状态无法确定,导致阻塞。3PC为解决此问题,多引入了一轮沟通,并引入超时机制。即一是把2PC的Commit阶段拆成了PreCommit和DoCommit两个阶段. 通过增加的这个PreCommit阶段, participant可以得到Propose阶段的投票结果,但不会commit; 而通过进入DoCommit阶段,participant可以盘出其他每个participant也都打算commit了,从而可以放心地commit。二是为participant也添加超时机制后,participant可以在到达超时时间时,自动进行本地commit从而释放资源。
TCC:是2PC的一个变种,为业务层编写代码实现两阶段提交。该编程模式下一个业务操作要对应写Try、Confirm、Cancel这三个方法。以下单扣库存为例,Try 阶段占库存,Confirm阶段实际扣库存,如果库存扣减失败Cancel阶段进行回滚,释放库存。TCC不存在资源阻塞的问题,因为每个方法都直接进行事务的提交,一旦出现异常通过则Cancel进行回滚补偿,这也就是常说的补偿性事务。
本地消息表:
MQ消息事务
最大努力通知: