当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-什么是分布式事务?有哪些实现方案?

金三银四精选java面试题-什么是分布式事务?有哪些实现方案?

来源:图灵教育
时间:2023-12-21 13:06:12
 

什么是分布式事务?有哪些实现方案?

在分布式系统中,一次业务处理可能需要多个应用来实现,比如用户发送一次下单请求,就涉及到订单系统创建订单、库存系统减库存,而对于一次下单,订单创建与减库存应该是要同时成功或同时失败的,但在分布式系统中,如果不做处理,就很有可能出现订单创建成功,但是减库存失败,那么解决这类问题,就需要用到分布式事务。常用解决方案有:

  1. 本地消息表:创建订单时,将减库存消息加入在本地事务中,一起提交到数据库存入本地消息表,然后调用库存系统,如果调用成功则修改本地消息状态为成功,如果调用库存系统失败,则由后台定时任务从本地消息表中取出未成功的消息,重试调用库存系统
  2. 消息队列:目前RocketMQ中支持事务消息,它的工作原理是:
    1. 生产者订单系统先发送一条half消息到Broker,half消息对消费者而言是不可见的
    2. 再创建订单,根据创建订单成功与否,向Broker发送commit或rollback
    3. 并且生产者订单系统还可以提供Broker回调接口,当Broker发现一段时间half消息没有收到任何操作命令,则会主动调此接口来查询订单是否创建成功
    4. 一旦half消息commit了,消费者库存系统就会来消费,如果消费成功,则消息销毁,分布式事务成功结束
    5. 如果消费失败,则根据重试策略进行重试,最后还失败则进入死信队列,等待进一步处理
  1. Seata:阿里开源的分布式事务框架,支持AT、TCC等多种模式,底层都是基于两阶段提交理论来实现的