两阶段提交

分布式事务

  1. 产生:系统的服务化,服务的拆分化,分库分表,最终产生了分布式事务的问题
  2. 两阶段提交、本地消息表、消息队列、幂等性、

两阶段提交:2PC

  1. 事务管理器:中间协调者,负责协调每个事务的提交

  2. 事务执行者

  3. 过程:

     第一阶段:预提交阶段:每个数据库执行sql,但是不提交。预先锁定资源,预先校验,
     第二阶段:commit/rollback
     这两个阶段的间隔时间很短,而且具有重试机制。
     记录日志,以便提供人工干预的解决方案。
    
  4. 分布式事务不可能100%解决,只可以尽量提高成功概率。

  5. Atomikos

  6. XA:两阶段提交事务

     XAResource
    
TCC两阶段补偿方案:try-confirm-cancel
  1. 过程
    微服务下的两阶段提交方案
    第一阶段:预留资源try阶段:定义一系列中间状态,比如:订单更新状态、冻结库存、创建草稿出库单状态
    第二阶段:确认资源confirm/cancel:该阶段如果出现调用错误,则先使用 重试机制,如果重试仍旧失败,则人工根据log进行人工干预,或者使用定时任务对log进行补偿操作。
    锁定资源的api
    confirm的api
    cancel的api

     	问题:每个api的幂等性、事务日志的实现
    
  2. 微服务下的两阶段提交TCC与2

阶段提交(2PC,Two-Phase Commit)和三阶段提交(3PC,Three-Phase Commit)是分布式系统中用于保证事务一致性的协议。 阶段提交是经典的分布式事务协议,它将整个事务分为阶段执行: 1. 准备阶段(Prepare Phase):事务协调者(Coordinator)向所有参与者(Participants)询问是否可以提交事务,并等待所有参与者的响应。如果所有参与者都同意提交事务,则进入下一阶段;如果任何一个参与者拒绝提交事务,协调者则通知所有参与者回滚事务。 2. 提交阶段(Commit Phase):如果在准备阶段所有参与者都同意提交,则协调者发送提交指令给所有参与者,参与者执行本地事务的提交操作;如果有任何一个参与者在准备阶段拒绝,则协调者发送回滚指令给所有参与者,参与者执行回滚操作。 三阶段提交是在阶段提交的基础上增加了一个预提交阶段,以减少阻塞和提高系统的可伸缩性: 1. 预提交阶段(Can Commit Phase):协调者询问参与者是否准备好进入事务的准备阶段,参与者根据自己的情况回复“可以提交”或“无法提交”。 2. 准备阶段(Pre-Commit Phase):如果所有参与者在预提交阶段都回复“可以提交”,协调者将事务请求的提交信息发送给参与者,参与者开始准备事务;如果有参与者回复“无法提交”,则协调者发送中断事务的请求给所有参与者。 3. 提交阶段(Do Commit Phase):在准备阶段,如果所有参与者都准备就绪,则协调者发出正式的提交请求,参与者完成本地事务提交;如果在准备阶段任何参与者没有准备好,则协调者发出中断事务的请求,参与者回滚事务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值