簡體   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