eBay發佈分佈式事務協議GRIT,多數據庫微服務的福音

在2019年IEEE數據工程國際會議(ICDE)上,eBay工程師提交了一篇論文,介紹了分佈式數據庫ACID事務協議——GRIT。GRIT的關鍵點在於支持跨微服務使用多個數據庫,這些微服務通常用不同的語言實現,並且可能使用多個底層數據庫。

eBay的工程師在論文中寫道,GRIT的目標是填補現有ACID事務機制的空白,現有的事務機制在多數據庫的情況下難以伸縮。

在涉及多個數據庫的環境中,傳統的兩階段提交(2PC)協議基本上是實現系統分佈式事務的惟一選擇。然而,由於路徑太長,通常涉及多個協調參與者和階段鎖定,在需要伸縮的平臺上表現不佳。另一方面,使用事務日誌框架(如Saga)要求應用程序做出複雜的補償邏輯,並且可能會出現不可逆的部分成功事務,這會對業務產生影響。

下圖顯示了使用了兩個數據庫的微服務應用程序的GRIT架構。

如上圖所示,GRIT包括兩個主要模塊:一組對應於每個數據庫的組件——數據庫事務管理器(DBTM)、一個數據庫事務日誌(DBTL)、一個LogPlayer和兩個負責協調的全局組件——全局事務管理器(GTM)和全局事務日誌(GTL)。

GRIT事務分爲三個階段。在事務執行期間,數據庫服務收集事務的讀操作和寫操作,實際不修改任何數據。當事務被提交時,每個數據庫將其讀操作和寫操作提交給它的DBTM,DBTM將對它們進行本地提交決策分析。所有參與的DBTM都將它們的本地決策提交給GTM,GTM做出全局提交決策。最後,如果事務成功,LogPlayer將把DBTL中收集的條目發送給數據庫。

總的來說,我們的方法在執行和提交過程中都避免了悲觀鎖定,也避免了等待物理提交。我們採用了更爲樂觀的方式,利用了邏輯提交日誌,並使用確定性數據庫技術將物理數據庫變更移出提交決策過程,使得提交過程變得非常高效。

值得一提的是,GRIT也可以用於單數據庫應用程序。對於這種情況,不需要使用全局組件,提交事務的複雜性也小得多。eBay工程師提供了一個GRIT示例,可用於擴展現有數據庫,支持跨多個可用性區域的ACID事務。如果你對完整的細節感興趣,不要錯過他們發佈的文章。

原文鏈接

GRIT Protocol Enables Distributed Transactions Across Multi-Database Microservices

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章