分布式事务的预提交要怎么理解?

瑞hong不还钱
  • 38

一、前提。
关于分布式事务,里面有个预提交的说法,而对于这个概念的描述,根据我查到的资料来说,就是:完成除了正式提交事务以外的其他事情(参与者执行事务中包含的操作,并记录undo日志(用于回滚)和redo日志(用于重放),但不真正提交)。

二、问题
对于上面的说法,我用一段下单的伪代码为例子(取消了DB的自动提交事务,然后写入sql语句)
`BEGIN
去订单表生成订单;
去库存表锁住库存并扣减库存;
COMMIT`

三、描述
根据上面的伪代码,预提交是否理解为:事务执行到库存那一步,停下来,如果成功锁住了订单表和库存表的相关数据。则向分布式事务框架的协调者这一角色返回成功的ack,然后分布式事务进入正式提交阶段,此时伪代码继续往下走,完成commit?

我在网上找到的资料,对于预提交这部分内容讲的比较少,不知道我这样理解对不对?如果不对,请指教,谢谢!

回复
阅读 460
2 个回答
✓ 已被采纳

我理解“预提交”的核心思想是提前锁定资源。举个例子来说比如说在电商系统下单的时候,支付前会锁定库存,支付完成后会实际扣减库存,如果超时未支付则释放锁定的库存。

拿分布式事务中的TCC模式举例,也就是try/confirm/cancel。一般需要业务系统提供这三个接口,根据具体的业务场景来实现,如果拿电商下单的例子,那try就是锁定库存,confirm就是实际扣减库存,cancel就是释放库存。

提供了这三个接口之后,还会有一个分布式事务调度系统来控制和协调多个系统的事务提交/回滚等操作。这个分布式事务调度系统一般是通过中间件的方式来实现的。

分布式事务解决的问题是多个系统间的一致性问题,因此理解分布式事务要从全局的角度去看,不能只站在单个系统的角度看。

单机事务,是执行完就可以立即提交了。但是分布式事务中,有个分布式事务调度系统的概念,A机器上的事务执行完了,B机器上的事务也执行完了,他们不能直接提交,要等这个调度系统的通知,我感觉预提叫就是这个等待阶段。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏