分布式事务

201 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

分布式事务

数据库事务是单个逻辑工作单元执行的多个数据库操作,要么同时成功,要么同时失败,它必须满足ACID特性

  • 原子性(Atomicity):事务是原子工作单元,不可分割,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,所有的数据都必须保持一致
  • 隔离性(Isolation):并发事务所执行的修改必须与其他并发事务操作的修改隔离
  • 持久性(Durability):事务执行完成后,对于系统的影响是永久性。

以上是针对单库多表情况事务所要满足的特性。在微服务架构下,随着业务服务拆分及数据库拆分,有以下场景,订单和库存分别拆分成两个独立的数据库,当客户端发起下单操作时,需要再订单服务的数据库库中创建订单,同时需要基于RPC通信调用库存服务完成商品库存的扣减。

由此,单库事务操作要变成多个数据库的事务操作,由于每个数据库的事务执行情况只有本库知道,比如订单数据库不知道库存数据库的执行结果完成与否,会导致订单数据库和库存数据库的数据不一致的问题,比如订单创建成功,库存扣减失败,会导致出现“超卖”问题,这就是分布式事务所适用的场景。

分布式事务是事务的参与者、支持事务的服务器、资源服务器及事务管理器分别位于分布式系统的不同节点上。