Java TX-LCN:(四)TX-LCN 事務模式

地球村公民發表於2020-10-24

  • Tx-LCN 5.0 開始支援三種事務模式,分別是:LCN、TCC、TXC 模式。
  • 每種模式在實際使用時有著自己對應的註解。
LCN:@LcnTransaction 
TCC:@TccTransaction 
TXC:@TxcTransaction

1.LCN 模式

1.1 原理介紹

  • LCN 模式是通過代理 JDBC 中 Connection 的方式實現對本地事務的操作,然後在由TxManager 統一協調控制事務。當本地事務提交回滾或者關閉連線時將會執行假操作,該代 理的連線將由 LCN 連線池管理

1.2 模式特點

  • 該模式對程式碼的嵌入性低。
  • 該模式僅限於本地存在連線物件且可通過連線物件控制事務的模組。
  • 該模式下的事務提交與回滾是由本地事務方控制,對於資料一致性上有較高的保障
  • 該模式缺陷在於代理的連線需要隨事務發起方一同釋放連線,增加了連線佔用的時間
  • 總結:LCN 模式適合能用 JDBC 連線的所有支援事務的資料庫

2.TCC 事務模式

2.1 原理介紹

  • TCC 事務機制相對於傳統事務機制(X/Open XA Two-Phase-Commit),其特徵在於它不依賴資源管理器(RM)對 XA 的支援,而是通過對(由業務系統提供的)業務邏輯的排程來實現分散式事務。主要由三步操作,Try: 嘗試執行業務、 Confirm:確認執行業務、 Cancel: 取消執行業務

2.2 程式碼說明

  • 每個 TCC 事務處理方法可以額外包含 confirmXxx 和 cancelXxx 的方法(),出現失敗問題,需要在 cancel 中通過業務邏輯把改變的資料還原回來
  • confirmXxx 和 cancelXxx 兩個方法會由 TxManager 進行統一協調呼叫
  • confirmXxx 和 cancelXxx 也可以在@TccTransaction 註解中通過屬性明確指定
@TccTransaction 
public String demo(){ 
	// 正常的 service 方法,也是 Try 嘗試執行執行 
}

public void confirmDemo(){ 
	// 當 demo 方法沒有出現異常時執行的方法 
	// 方法名稱必須叫做 confirm+代理方法首字母 
}

public void cancelDemo(){ 
	// 當 demo 方法出現異常時執行的方法 
	// 方法名稱必須叫做 cancel+代理方法首字母 
}

2.3 模式特點

  • 該模式對程式碼的嵌入性高,要求每個業務需要寫二個以上步驟的操作
  • 該模式對有無本地事務控制都可以支援,使用面更廣
  • 資料一致性控制幾乎完全由開發者控制,對業務開發難度要求高
  • 總結:Tcc 模式應用於所有不支援 XA 事務的軟體。例如:redis,mongodb 等

3.TXC 事務模式

3.1 原理介紹

  • TXC 模式命名來源於淘寶,實現原理是在執行 SQL 之前,先查詢 SQL 的影響資料,然後儲存執行的 SQL 資訊和建立鎖。當需要回滾的時候就採用這些記錄資料回滾資料庫,目前鎖實現依賴 redis 分散式鎖控制。(在使用 lcn 時必須要配置 redis 引數)

3.2 模式特點

  • 該模式同樣對程式碼的嵌入性低
  • 該模式僅限於對支援 SQL 方式的模組支援
  • 該模式由於每次執行 SQL 之前需要先查詢影響資料,因此相比 LCN 模式消耗資源與時間要多
  • 該模式不會佔用資料庫的連線資源
  • 總結:只能用在支援 SQL 的資料庫。對資源消耗較多。建議使用 LCN 模式

相關文章