分布式事务学习笔记
程序员文章站
2022-06-13 19:29:35
...
分布式数据库常见模型:XA, 2PC, saga, TCC.
XA 是早期的跨数据库的分布式事务规范,需要锁表,性能较低,协调者基于weblogic等中间件,实际上就是一种2PC。
2PC 是两阶段提交。先prepare, 然后commit.由于需要锁资源保证ACID,所以性能低下。
saga 是一种高效的分布式事务方案,不需要锁资源。基于消息和事件驱动实现,如果分布式事务包括A,B,C三个短事务,那么A执行完本地事务,发消息,B收到通知执行本地事务,发消息,C接到消息,执行本地事务。当B,C发生失败,则发起回滚消息,一次回滚。只能保证A,C,D,不能保证隔离性。因为本地事务执行完,别的线程就能读取到消息了。
可靠消息表+MQ 最终一致也是saga的一种实现。
tcc 在此基础上做了优化。 先try, 冻结需要的部分资源(预留或者改为中间状态), 当所有资源都冻结成功之后,commit. 如果commit过程发生失败(一般是网络等外部原因),进行cancel回滚。保证性能和ACID。
XA 是早期的跨数据库的分布式事务规范,需要锁表,性能较低,协调者基于weblogic等中间件,实际上就是一种2PC。
2PC 是两阶段提交。先prepare, 然后commit.由于需要锁资源保证ACID,所以性能低下。
saga 是一种高效的分布式事务方案,不需要锁资源。基于消息和事件驱动实现,如果分布式事务包括A,B,C三个短事务,那么A执行完本地事务,发消息,B收到通知执行本地事务,发消息,C接到消息,执行本地事务。当B,C发生失败,则发起回滚消息,一次回滚。只能保证A,C,D,不能保证隔离性。因为本地事务执行完,别的线程就能读取到消息了。
可靠消息表+MQ 最终一致也是saga的一种实现。
tcc 在此基础上做了优化。 先try, 冻结需要的部分资源(预留或者改为中间状态), 当所有资源都冻结成功之后,commit. 如果commit过程发生失败(一般是网络等外部原因),进行cancel回滚。保证性能和ACID。
下一篇: PHP正则表达式替换<>及中间内容失败