参考链接:http://icyfenix.cn/architect-perspective/general-architecture/transaction/distributed.html
CAP
- 分布式环境下,不可避免网络分区,所以分区容忍性是不得不选择的选项;
- 追求强一致性时,不得不妥协可用性;
- 追求高可用性时,不得不采取弱一致性(最终一致性)。
可靠事件队列
可靠事件队列来源于 eBay 的系统架构师 Dan Pritchett 在 2008 年在 ACM 发表的论文《Base: An Acid Alternative》,BASE分别是基本可用性(Basically Available)、柔性事务(Soft State)和最终一致性(Eventually Consistent)的缩写
- 尽最大努力交付:借助可靠事件队列并采用尽最大努力交付,BASE 的逻辑比较简单(无需提前冻结资源,也无需回滚)
- 优点:简单
- 缺点:隔离性差,必须成功(无回滚)
- 适合场景:隔离要求低,成功概率高,小事务(快,从而降低失败可能性)
TCC: Try-Confirm-Cancel
- 两个 C 阶段均是尽最大努力交付
- 优点:隔离性好,性能好(已预留的资源归当前事务所有,无竞争,免锁)
- 缺点:Try 需要预留资源,要求开发者对数据有较高控制性 – 业务侵入性较高
- 适合场景:性能要求,隔离要求,数据可控
SAGA
- 大事务拆解成多个小事务;
- 小事务独立进行;
- 根据业务情况,可选择尽最大努力交付,也可选择补偿。
- 优点:补偿动作对数据可控性要求较低,易于实现
- 缺点:隔离性较差
- 适合场景:长事务
SEATA 分布式事务解决方案
补充
以上三种方案,均需要有个地方来记录事务的状态和执行进度。