微服務設計模式 - Saga
問題陳述
微服務架構將應用程式構建為一組松耦合的微服務,每個服務都可以以敏捷的方式獨立開發,以實現持續交付/部署。如果我們使用了每個服務一個數據庫的設計模式,那麼如何實現跨越多個服務的交易?
解決方案
我們可以使用 Saga 模式。Saga 是一系列本地事務。在此模式中,每個事務更新資料庫並觸發事件或釋出訊息以進行 Saga 中的下一個事務。如果任何本地事務失敗,Saga 將觸發一系列事務以撤消迄今為止本地事務所做的更改。
考慮訂單服務和客戶服務的示例。訂單服務可以建立訂單,然後詢問客戶服務信用額度是否已超過。如果信用額度已超過,則客戶服務將向訂單服務引發事件以取消訂單,否則成功下單。
為了實現此模式,我們通常需要基於編排的 Saga 或基於協調器的 Saga。
在基於編排的 Saga 中,服務在本地事務期間處理域事件,並完成事務或撤消事務,而在基於協調器的 Saga 中,協調器物件在本地事務期間處理事件,然後協調要執行哪個本地事務。
廣告