当前位置: 首页 > 知识库问答 >
问题:

微服务 - 分布式事务与acid?

西门伟
2023-10-16

最近在学微服务的分布式事务,不太明白为什么在微服务这种分布式系统中,原有的单体acid会出现问题

希望大佬们可以讲一下原理和思想

共有1个答案

蓝泰平
2023-10-16

微服务中,有时候一个操作需要N个服务共同完成,而且需要保障其原子性,即要求要么一同成功,要么一同失败。

例如用户下单操作需要由用户系统、订单系统、钱包系统合作管理;伪流程如下:

  1. 前往用户系统查询用户状态是否正常
  2. 前往订单系统查询商品库存是否充足并扣除库存
  3. 前往钱包系统查询用户余额是否足够并扣除余额

单个系统的ACID只能保证单个系统的原子性操作。
分布式事务是保障这一连串操作的一致性。

假设场景:流程2中库存并且扣除成功,执行流程3时候余额不足扣除失败,肯定需要回到流程2归还库存。执行了归还就是保障了此次操作的ACID。

 类似资料:
  • 我有两个微服务和调用来更新数据,然后插入另一个数据,但让我们考虑一下 失败,然后我们需要回滚由 更新的数据,否则我们将处于不一致的状态。 我也经历了佐贺patterns.will它满足了这种矛盾 谁能为此提出更好的解决方案?

  • 我知道最好使用 Saga 模式,但想想还是很有趣的: < Li > 2PC/XA分布式事务是否提供了仅从一个应用程序和一个TM与多个RM进行事务的可能性? < li >如果没有-如果每个微服务只能访问自己的数据库,如何在多个微服务之间使用2PC/XA分布式事务来提供使用2PC的能力?我很乐意看到一个例子 < li >我们是否需要将TransactionManager服务作为一个独立的微服务,在多个

  • 我正在发展我对分布式系统的见解,以及如何在这样的系统中保持数据一致性,其中业务事务涵盖多种服务、有限的上下文和网络边界。 我知道有两种方法用于实现分布式事务: 2阶段提交(2PC) 萨加斯 2PC 是一种协议,供应用程序通过平台支持透明地利用全局 ACID 事务。据我所知,它嵌入在平台中,对业务逻辑和应用程序代码是透明的。 另一方面,Sagas是一系列本地事务,其中每个本地事务都会发生变化,并保存

  • ShardingSphereTransactionManager SPI 名称 详细说明 ShardingSphereTransactionManager 分布式事务管理器 已知实现类 详细说明 XAShardingSphereTransactionManager 基于 XA 的分布式事务管理器 SeataATShardingSphereTransactionManager 基于 Seata 的分

  • ShardingSphere-Proxy 接入的分布式事务 API 同 ShardingSphere-JDBC 保持一致,支持 LOCAL,XA,BASE 类型的事务。 XA 事务 ShardingSphere-Proxy 原生支持 XA 事务,默认的事务管理器为 Atomikos。 可以通过在 ShardingSphere-Proxy 的 conf 目录中添加 jta.properties 来定

  • 通过 Apache ShardingSphere 使用分布式事务,与本地事务并无区别。 除了透明化分布式事务的使用之外,Apache ShardingSphere 还能够在每次数据库访问时切换分布式事务类型。 支持的事务类型包括 本地事务、XA事务 和 柔性事务。可在创建数据库连接之前设置,缺省为 Apache ShardingSphere 启动时的默认事务类型。