微服務分佈式事務解決方案之TX-LCN

分佈式事務解決方案,無外乎以下幾種方式:

兩階段提交(2PC)補償事務(TCC)本地消息表(異步確保)MQ 事務消息Sagas 事務模型

本文不做原理的實現,推薦具體的能落地的實現方案之一TX-LCN 分佈式事務框架。

一、介紹

LCN通訊是基於TCP長連接的socket通訊,TxManager與事務控制方是基於netty框架完成的。該協議只描述參與Socket通訊的協議。

LCN分佈式事務框架其本身並不創建事務,而是基於對本地事務的協調從而達到事務一致性的效果。

LCN 核心採用3PC機制,採用強一致性方案,保證了事務的一致性。

二、框架特點

兼容SpringCloud、Dubbo;兼容rpc降級熔斷使用簡單,低依賴,代碼完全開源;基於切面的強一致性事務框架;高可用,模塊可以依賴Dubbo或SpringCloud的集群方式做集群化,TxManager也可以做集群化;支持本地事務和分佈式事務共存;

缺點:代理的連接需要隨事務發起方一併釋放連接,增加了連接佔用的時間;不適用於熱點數據和異步場景。

三、核心步驟

創建事務組是指在事務發起方開始執行業務代碼之前先調用TxManager創建事務組對象,然後拿到事務標示GroupId的過程。添加事務組添加事務組是指參與方在執行完業務方法以後,將該模塊的事務信息添加通知給TxManager的操作。關閉事務組是指在發起方執行完業務代碼以後,將發起方執行結果狀態通知給TxManager的動作。當執行完關閉事務組的方法以後,TxManager將根據事務組信息來通知相應的參與模塊提交或回滾事務。

TX-LCN分佈式事務架構

四、事務控制原理

TX-LCN由兩大模塊組成, TxClient、TxManager,TxClient作為模塊的依賴框架,提供TX-LCN的標準支持,TxManager作為分佈式事務的控制放。事務發起方或者參與反都由TxClient端來控制。

TxClient的代理連接池實現了javax.sql.DataSource接口,並重寫了close方法,事務模塊在提交關閉以後TxClient連接池將執行"假關閉"操作,等待TxManager協調完成事務以後在關閉連接。

分佈式事務調用流程

對於代理連接池的優化

自動超時機制任何通訊都有最大超時限制,參與模塊在等待通知的狀態下也有最大超時限制,當超過時間限制以後事務模塊將先確認事務狀態,然後再決定執行提交或者回滾操作,主要為了給最大資源佔用時間加上限制。智能識別創建不同的連接 對於只讀操作、非事務操作LCN將不開啟代理功能,返回本地連接對象,對於補償事務的啟動方將開啟回滾連接對象,執行完業務以後馬上回滾事務。LCN連接重用機制 當模塊在同一次事務下被重複執行時,連接資源會被重用,提高連接的使用率。