多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# :-: ### 1、两阶段提交(2pc) 两阶段提交协议(Two Phase Commitment Protocol)中,涉及到两种角色 一个事务协调者(coordinator):负责协调多个参与者进行事务投票及提交(回滚)多个事务参与者(participants):即本地事务执行者 总共处理步骤有两个(1)投票阶段(voting phase):协调者将通知事务参与者准备提交或取消事务,然后进入表决过程。参与者将告知协调者自己的决策:同意(事务参与者本地事务执行成功,但未提交)或取消(本地事务执行故障);(2)提交阶段(commit phase):收到参与者的通知后,协调者再向参与者发出通知,根据反馈情况决定各参与者是否要提交还是回滚; 如果所示 1-2为第一阶段,2-3为第二阶段 如果任一资源管理器在第一阶段返回准备失败,那么事务管理器会要求所有资源管理器在第二阶段执行回滚操作。通过事务管理器的两阶段协调,最终所有资源管理器要么全部提交,要么全部回滚,最终状态都是一致的 ### 2、TCC #### 基本原理 TCC 将事务提交分为 Try - Confirm - Cancel 3个操作。其和两阶段提交有点类似,Try为第一阶段,Confirm - Cancel为第二阶段,是一种应用层面侵入业务的两阶段提交。 | 操作方法 | 含义 | | --- | --- | | Try | 预留业务资源/数据效验 | | Confirm | 确认执行业务操作,实际提交数据,不做任何业务检查,try成功,confirm必定成功,需保证幂等 | | Cancel | 取消执行业务操作,实际回滚数据,需保证幂等 | 3、事务消息 消息事务其实就是基于消息中间件的两阶段提交,将本地事务和发消息放在同一个事务里,保证本地操作和发送消息同时成功。下单扣库存原理图:![](https://img.kancloud.cn/c2/11/c2115e4f48dd81cec26d9b99ec96e5cc_765x485.png) ### 优缺点比较 | 事务方案 | 优点 | 缺点 | | --- | --- | --- | | 2PC | 实现简单 | 1、需要数据库(一般是XA支持) 2、锁粒度大,性能差 | | TCC | 锁粒度小,性能好 | 需要侵入业务,实现较为复杂,复杂业务实现幂等有难度 | | 消息事务 | 业务侵入小,无需编写业务回滚补偿逻辑 | 事务消息实现难度大,强依赖第三方中间件可靠性 | ##