分布式事务
- 产生:系统的服务化,服务的拆分化,分库分表,最终产生了分布式事务的问题
- 两阶段提交、本地消息表、消息队列、幂等性、
两阶段提交:2PC
-
事务管理器:中间协调者,负责协调每个事务的提交
-
事务执行者
-
过程:
第一阶段:预提交阶段:每个数据库执行sql,但是不提交。预先锁定资源,预先校验, 第二阶段:commit/rollback 这两个阶段的间隔时间很短,而且具有重试机制。 记录日志,以便提供人工干预的解决方案。
-
分布式事务不可能100%解决,只可以尽量提高成功概率。
-
Atomikos
-
XA:两阶段提交事务
XAResource
TCC两阶段补偿方案:try-confirm-cancel
-
过程
微服务下的两阶段提交方案
第一阶段:预留资源try阶段:定义一系列中间状态,比如:订单更新状态、冻结库存、创建草稿出库单状态
第二阶段:确认资源confirm/cancel:该阶段如果出现调用错误,则先使用 重试机制,如果重试仍旧失败,则人工根据log进行人工干预,或者使用定时任务对log进行补偿操作。
锁定资源的api
confirm的api
cancel的api问题:每个api的幂等性、事务日志的实现
-
微服务下的两阶段提交TCC与2