一、二段式提交
- 执行方案
协调者访问事务执行者(可多个),执行者返回 yes/no,协调者得到全部成功的结果,在发送通知让事务执行者全部提交事务,反之回退事务。 - 缺点:
如果有节点崩了,会导致数据的不一致
如果一个节点堵塞,会导致其他节点陷入等待状态
如果协调者崩了,其他事务执行者会进入等待状态
容错机制太差
二、补偿式
- 执行方案
分为三个阶段 try 。 confirm cancel
try 对业务系统进行检测与预留
confirm 对业务系统的执行进行提交
cancel 主要是在前两部执行失败后,对业务的回退 - 缺点
如果某一步进行了失败,即堵塞,会导致整个业务失败
三、本地事务
- 执行方案
设立一个消息表,与业务表放在一起
发送业务请求后,将请求放入到消息表中,使用mq队列进行消息发送,消费者进行消费,成功后将消息表消息删除或修改状态,发送失败则继续发送 - 缺点
消息表会与业务耦合在一起,导致一些不必要的代码处理,会有杂活需要处理