TX-LCN分散式事務原理介紹
框架介紹
LCN分散式事務框架其本身並不建立事務,而是基於對本地事務的協調從而達到事務一致性的效果
核心步驟
建立事務組
是指在事務發起方開始執行業務程式碼之前先呼叫TxManager建立事務組物件,然後拿到事務標示GroupId的過程。
新增事務組
新增事務組是指參與方在執行完業務方法以後,將該模組的事務資訊新增通知給TxManager的操作。
關閉事務組
是指在發起方執行完業務程式碼以後,將發起方執行結果狀態通知給TxManager的動作。當執行完關閉事務組的方法以後,TxManager將根據事務組資訊來通知相應的參與模組提交或回滾事務。
事務控制原理
LCN事務控制原理是由事務模組TxClient下的代理連線池與TxManager的協調配合完成的事務協調控制。
TxClient的代理連線池實現了javax.sql.DataSource介面,並重寫了close方法,事務模組在提交關閉以後TxClient連線池將執行"假關閉"操作,等待TxManager協調完成事務以後在關閉連線。
對於代理連線池的優化
自動超時機制
任何通訊都有最大超時限制,參與模組在等待通知的狀態下也有最大超時限制,當超過時間限制以後事務模組將先確認事務狀態,然後再決定執行提交或者回滾操作,主要為了給最大資源佔用時間加上限制。
智慧識別建立不同的連線 對於只讀操作、非事務操作LCN將不開啟代理功能,返回本地連線物件,對於補償事務的啟動方將開啟回滾連線物件,執行完業務以後馬上回滾事務。
LCN連線重用機制 當模組在同一次事務下被重複執行時,連線資源會被重用,提高連線的使用率。
事務補償機制
為什麼需要事務補償?
事務補償是指在執行某個業務方法時,本應該執行成功的操作卻因為伺服器掛機或者網路抖動等問題導致事務沒有正常提交,此種場景就需要通過補償來完成事務,從而達到事務的一致性。
補償機制的觸發條件?
當執行關閉事務組步驟時,若發起方接受到失敗的狀態後將會把該次事務識別為待補償事務,然後發起方將該次事務資料非同步通知給TxManager。TxManager接受到補償事務以後先通知補償回調地址,然後再根據是否開啟自動補償事務狀態來補償或儲存該次切面事務資料。
補償事務機制?
LCN的補償事務原理是模擬上次失敗事務的請求,然後傳遞給TxClient模組然後再次執行該次請求事務。
模擬場景演示
若存在事務發起方、參與方A、參與方B。呼叫關係圖如下
那麼他們正常執行業務的時序圖為:
若參與方B出現異常,那麼他們的業務時序圖為:
若他們的呼叫關係是這樣的情況
此時發生參與方B出現異常時他們的時序圖為: