繁体   English   中英

微服务系统中服务之间的分布式事务,使用spring-cloud

[英]Distributed transaction among services in a microservice system, using spring-cloud


目前的情况

有一个项目使用: spring-bootspring-cloudpostgresql作为微服务系统。

有 2 个服务,比如SASB ,它们分别在 2 个 RDBMS 数据库上运行,比如DADB

现在,有一个操作包含 2 个子步骤:

  1. Http 客户端将请求服务SA ,将记录RA保存到DA中。
  2. 然后, SA向服务SB发送请求,将记录RB保存到DB中。

作为一个整体,这两个子步骤应该要么都提交,要么都回滚。


分析

  • 如果将这两个操作都移到一个服务中,那么可以使用 Spring 的分布式事务通过 JTA (基于2PC协议)来解决它。
  • 但是这里,这 2 个操作在 2 个服务中,它们通过 http REST 协议进行通信。 也许可以使用mq + 补偿来解决这个问题,但我不确定是否有更好的方法。

问题是

  • 在这种情况下,JTA (基于2PC协议)是否仍然有效?
  • 如果不是,首选的解决方案是什么?
    我可以猜到的可能解决方案:
    1. 重构代码以将 2 个操作移动到单个服务中。
    2. 实施mq + 补偿架构来支持这一点。

也许这个项目对你有帮助https://github.com/apache/servicecomb-pack

Apache ServiceComb Pack 是面向微服务应用的最终数据一致性解决方案。 ServiceComb Pack 目前提供 TCC 和 Saga 分布式事务协调解决方案,使用 Alpha 作为事务协调器,Omega 作为事务代理

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM