使用saga管理微服務事務

2021-09-26 09:27:21 字數 956 閱讀 8926

使用saga管理事務:

在微服務架構中,單個服務中的事務仍然可以使用acid事務。然而,在對更新多個服務所擁有的資料的操作實現事務時,我們面臨著新的挑戰。

跨服務的操作必須使用所謂的saga(一種訊息驅動的本地事務序列)來維護資料一致性,而不是acid事務。saga的乙個挑戰在於只滿足acd(原子性,一致性和永續性)特性,缺乏隔離性。因此,應用程式必須使用所謂的對稱,找到辦法來防止或減少由於缺乏隔離而導致的併發異常。

微服務架構下的事務管理:

微服務架構下的事務往往需要橫跨多個服務,每個服務都有屬於自己的私有資料庫。在這種情況下,應用程式必須使用一些更為高階的事務管理機制來管理事務。微服務應用程式需要使用saga機制管理事務。

服務的資料是私有的,外部只能通過服務暴露的api訪問這些資料,因此在資料庫層面實現分布式事務是不可行的。

使用saga模式維護資料一致性:

saga是一種微服務架構中維護資料一致性的機制,它可以避免分布式事務所帶來的問題。乙個saga表示需要更新多個服務中資料的乙個系統操作。saga由一連串本地事務組成。每乙個本地事務負責更新它所在服務的私有資料庫,這些操作仍舊依賴於acid事務框架和函式庫。

系統操作啟動了saga的第一步。完成本地事務會觸發下乙個本地事務的執行。使用非同步訊息實現saga步驟的協調。

使用非同步訊息不僅可以確保saga參與方直接的松耦合,另乙個重要好處是它確保saga的所有步驟都被執行,即使乙個或多個saga的參與方暫時不可用。這是因為如果訊息的接收方暫時不可用,則訊息**會快取訊息,直到訊息可以被傳送為止。

saga使用補償事務來回滾所作出的改變:

資料庫acid事務,可用自動地回滾事務。但是,saga無法自動回滾,因為每個步驟都會將其更改提交到本地資料庫。這意味,某個步驟執行失敗了,必須對之前執行過的步驟進行回滾。我們必須編寫補償事務。

saga按照正常事務的反向順序來執行補償事務:例如 執行事務的步驟是a、b、c。那麼執行補償事務回滾的順序則是c、b、a。

微服務之saga模式

你已經使用 database ber service 模式。每個service擁有自己的database。一些業務事務會跨越多個service,所以你需要來確保data consistency。例如,假設你正在構建乙個電子商務 這個 的使用者的會有乙個最大欠款限制,應用程式必須確保乙個新訂單不能超過...

微服務事務

事務是由一組操作組成的乙個工作單元。怎麼去理解這個問題呢?我們從現實生活中去理解 那麼事務有哪些特性呢?事務特性 原子性 事務內部的一組操作要麼同時成功,要麼同時失敗 隔離性 不同事務之間是互相不影響的 一致性 事務內部一組操作,各自操作產生的結果資料,要能夠保證都是預期的狀態 永續性 事務內部一組...

微服務 事務 高併發優化

讓人頭痛的大事務問題到底要如何解決?mysql 事務及資料的一致性處理 mysql事務的實現原理 長事務優化 mysql同乙個事務中先插入再查詢與先刪除再查詢結果分析 面試問爛的 mysql 四種隔離級別 查詢mysql事務隔離級別 select tx isolation 查詢正在進行的事務id s...