LCN分佈式事務框架解決分佈式事務一致性問題

LCN分佈式事務框架

框架介紹

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

核心步驟

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

事務控制原理

LCN事務控制原理是由事務模塊TxClient下的代理連接池與TxManager的協調配合完成的事務協調控制。

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

對於代理連接池的優化

  1. 自動超時機制
    任何通訊都有最大超時限制,參與模塊在等待通知的狀態下也有最大超時限制,當超過時間限制以後事務模塊將先確認事務狀態,然後再決定執行提交或者回滾操作,主要爲了給最大資源佔用時間加上限制。

  2. 智能識別創建不同的連接 對於只讀操作、非事務操作LCN將不開啓代理功能,返回本地連接對象,對於補償事務的啓動方將開啓回滾連接對象,執行完業務以後馬上回滾事務。

  3. LCN連接重用機制 當模塊在同一次事務下被重複執行時,連接資源會被重用,提高連接的使用率。

事務補償機制

爲什麼需要事務補償?

事務補償是指在執行某個業務方法時,本應該執行成功的操作卻因爲服務器掛機或者網絡抖動等問題導致事務沒有正常提交,此種場景就需要通過補償來完成事務,從而達到事務的一致性。

補償機制的觸發條件?

當執行關閉事務組步驟時,若發起方接受到失敗的狀態後將會把該次事務識別爲待補償事務,然後發起方將該次事務數據異步通知給TxManager。TxManager接受到補償事務以後先通知補償回調地址,然後再根據是否開啓自動補償事務狀態來補償或保存該次切面事務數據。

補償事務機制?
LCN的補償事務原理是模擬上次失敗事務的請求,然後傳遞給TxClient模塊然後再次執行該次請求事務。

模擬場景演示

若存在事務發起方、參與方A、參與方B。調用關係圖如下

那麼他們正常執行業務的時序圖爲:

若參與方B出現異常,那麼他們的業務時序圖爲:

若他們的調用關係是這樣的情況

此時發生參與方B出現異常時他們的時序圖爲:


LCN框架原理及使用參考:https://github.com/codingapi/tx-lcn/wiki/LCN%E5%8E%9F%E7%90%86

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