Database 微服务中共享数据库的事务管理

Database 微服务中共享数据库的事务管理,database,spring,microservices,Database,Spring,Microservices,我有两个使用相同数据库的微服务 第一个用于平衡管理的微试验 第二个微服务器用于预订管理 我有以下业务场景: 需要通过从(balance Management Microservice)调用REST服务来检查客户端是否有余额 如果他有余额,那么我必须打电话给另一个REST服务,从(余额管理微服务)预订余额 然后,我还必须通过从(预订管理)呼叫另一个REST服务来进行某种航空公司预订 因此,问题是如果步骤3失败,如何通过在REST服务之间使用事务管理来回滚步骤2,注意使用相同DB的所有微服务都是一个

我有两个使用相同数据库的微服务

  • 第一个用于平衡管理的微试验
  • 第二个微服务器用于预订管理
  • 我有以下业务场景:

  • 需要通过从(balance Management Microservice)调用REST服务来检查客户端是否有余额
  • 如果他有余额,那么我必须打电话给另一个REST服务,从(余额管理微服务)预订余额
  • 然后,我还必须通过从(预订管理)呼叫另一个REST服务来进行某种航空公司预订

  • 因此,问题是如果步骤3失败,如何通过在REST服务之间使用事务管理来回滚步骤2,注意使用相同DB的所有微服务都是一个工作单元,该工作单元的成功率为%100或%0。事务由数据库而不是应用程序管理和实现。这就是为什么您可以扩展应用程序(创建更多实例),并且您的数据保持一致

    同样,许多不同的应用程序可以与同一个数据库通信,这并不重要。假设您正在转账,对应于同一事务中更新的数据库中的两行。假设您这样做不正确,并创建了2个事务来分别更新每一行。无论您运行的是1个应用程序还是多个应用程序或实例都无关紧要,如果您在2个交易中执行了错误操作,那么您将面临数据不一致的风险,例如,如果另一个交易记入某个帐户的借方,并且在两个交易之间没有足够的资金,那么您可能会获得一个少于0美元的帐户,不好不好


    另一方面,这是有代价的。事务代价高昂,需要更多的时间,并且对行的更新将按顺序进行,而不是同时进行,这就是为什么需要扩展到极限性能的系统有时只使用附加数据库/NoSQL,而依赖于最终的一致性。

    与往常一样,当我们遇到此类问题时,我们应该研究现有的最佳实践。在这种情况下,设计模式就是您问题的答案。

    您能更详细地描述一下您的问题吗?这些是独立的应用程序还是同一应用程序的两个实例?您需要在事务中执行哪些操作?我更新了问题请检查。