分布式系统有一个著名的CAP理论,即一个分布式系统要同时满足一致性(Consistency)、可用性(Availablility)和分区容错(Partition Tolerance)三个特性是一件不可能的事情。
CAP理论告诉架构师不要妄想设计出同时满足三者的系统,应该有所取舍,设计出适合业务的系统
方案一. 2PC(两阶段提交协议)
基于数据库XA协议的方式, java有Automikos框架支持,可以实现事务强一致性, 但性能低下。 毕竟鱼与熊掌不可兼得。尽量避免分布式事务,
尽量将非核心事务做成异步;
方案二. 使用消息队列来避免分布式事务
将分布式的大事务分解成小事务 + 异步, 保证发起方局部事务一致,即消息发送成功和事务成功一致。
方案三. TCC编程式解决方案
TCC事务补偿是基于2PC实现的业务层事务控制方案,它是Try、Confirm和Cancel三个单词的首字母
- Try 检查及预留业务资源
完成提交事务前的检查,并预留好资源。 - Confirm 确定执行业务操作
对try阶段预留的资源正式执行。 - Cancel 取消执行业务操作
对try阶段预留的资源释放。