跨微服務的 ACID 事務
大規模分散式系統上的分散式事務被認為本質上是邪惡的,需要按照CAP 定理,為了避免走彎路,請參考:分散式事務可能是個偽概念以及Shopify如何使用Saga等模式實現電子商務:Shopify如何使用Ruby實現每小時銷售1億美元?。
本文是atomikos商家自己的宣傳文章:
如何跨 REST 微服務實現經典的 ACID 事務?你們中的一些人可能知道我們的TCC用於預訂式互動的基於補償的 REST 事務。它很好而且鬆散耦合,但它不適合想要使用經典回滾而不是補償的場景。這篇文章介紹了另一種設計,我們目前在 Atomikos 正在研究這種設計。
我們將在本文的其餘部分逐步完善規範,以便更容易理解這些概念。
我們將使用以下角色和職責:
REST 應用程式
想象一個(複合)REST 應用程式:
- 協調整個工作流程
- 呼叫多個參與者服務
- 透過協調器服務(如下所述)提交(或回滾)所有參與者服務的工作。
參與服務
參與者服務實際上是一個微服務,它:
- 呼叫時建立本地 ACID 事務
- 執行本地資料庫工作
- 在呼叫結束時保持事務開啟,以便 REST 應用程式稍後提交(如下所述)。
協調員服務
協調器服務是一種專門的實用程式服務,用於協調跨多個參與者服務的兩階段提交。它還在發生故障和/或重新啟動時執行日誌記錄和恢復。更多詳情如下…
最小用例:一起提交或回滾 REST 微服務
最小用例實際上是在這種情況下可以做的最基本的事情:兩個或多個微服務呼叫一起提交或回滾。它是這樣的:
- REST 應用程式執行並呼叫任意數量的參與者服務。
- 每個參與者服務返回(作為其響應的一部分)AcidParticipantLink 資訊:基本上是可以提交事務的 URI。
- REST 應用程式在整個“事務”邏輯中進行時收集所有 AcidParticipantLinks。
- REST 應用程式然後要求協調器服務提交(或者,回滾)其工作的所有相關 AcidParticipantLinks
更精細的用例:重複呼叫可以共享相同的鎖
前面的場景有效,但同一參與者的重複呼叫將使用不同的本地 ACID 事務,這意味著他們無法看到/訪問資料庫中的相同資料。後續呼叫之間沒有鎖共享。在某些情況下,這可能是可取的,可以按如下方式完成:
- REST 應用程式首次呼叫參與者服務並返回一個 AcidParticipantLink。
- REST 應用程式提取參與者的事務識別符號(包含在 AcidParticipantLink 中)。
- REST 應用程式現在可以第二次呼叫參與者服務,並將事務識別符號作為呼叫的引數。
- 參與者服務檢測現有交易識別符號並允許呼叫“加入”現有交易。
其他一切都像前面的場景一樣工作。
高階用例:共享資料庫中呼叫者的服務共享鎖
在某些情況下,參與者服務可能需要加入存在於呼叫方的事務,特別是當它們訪問某個共享資料庫時。詳情將在稍後制定,因此請繼續檢視更多資訊!
...
相關文章
- 事務的性質(ACID)
- Redis 事務支援 ACID 麼?Redis
- 最受歡迎的微服務語錄:不要試圖跨微服務構建分散式事務微服務分散式
- ACID之I:事務隔離
- mysql淺談--事務ACID特性MySql
- MySQL是如何實現事務的ACIDMySql
- eBay推出首個微服務架構下可實現ACID的分散式事務協議:GRIT微服務架構分散式協議
- Apache Hudi Timeline:支援 ACID 事務的基礎Apache
- 微服務的那些事微服務
- Redis 中的事務分析,Redis 中的事務可以滿足ACID屬性嗎?Redis
- 事務ACID特性與隔離級別
- 搞懂MySQL InnoDB事務ACID實現原理MySql
- 面試題:MySQL事務的ACID如何實現?面試題MySql
- 【原創】Mysql中事務ACID實現原理MySql
- 深入學習MySQL事務:ACID特性的實現原理MySql
- 談談MySQL InnoDB儲存引擎事務的ACID特性MySql儲存引擎
- 關於Delta Lake的ACID事務機制簡介
- MySQL 學習筆記(一)MySQL 事務的ACID特性MySql筆記
- 微服務架構中的分散式事務全面詳解 -DZone微服務微服務架構分散式
- PHP 微服務之 [分散式事務]PHP微服務分散式
- PHP 微服務之【分散式事務】PHP微服務分散式
- SpringCloud微服務的那點事SpringGCCloud微服務
- 帶你瞭解資料庫中事務的ACID特性資料庫
- 比較微服務中的分散式事務模式微服務分散式模式
- 微服務的分散式事務模式比較 | RedHat微服務分散式模式Redhat
- 併發程式設計的原子性 != 事務ACID的原子性程式設計
- 微服務分散式事務元件 Seata(一)微服務分散式元件
- Spring Cloud 微服務的那點事SpringCloud微服務
- 分散式事務處理方案,微服事務處理方案分散式
- 微服務架構 | 11. 分散式事務微服務架構分散式
- 跨Mysql、Redis、Mongo的分散式事務MySqlRedisGo分散式
- Rama透過拓撲通用語言實現ACID事務
- GRIT:eBay基於微服務的分散式事務協議微服務分散式協議
- DTM:Golang中微服務架構的分散式事務框架Golang微服務架構分散式框架
- PHP 微服務之【分散式事務】閱讀提示PHP微服務分散式
- PHP 微服務之 [分散式事務] 閱讀提示PHP微服務分散式
- 微服務架構分散式事務管理問題微服務架構分散式
- Java資料庫事務管理:ACID屬性的實現與應用Java資料庫