Spring的分散式事務實現(JTA+XA/2PC)

banq發表於2017-04-12
JTA是Java Transaction API簡稱 ,即Java事務管理器,主要管理本地事務。本地事務是隻同一個資料庫源中,多次資料庫連線之間的事務,使得這多個資料表操作遵循ACID。

如果想讓JTA管理多臺資料庫操作的分散式事務,需要XA支援,Open Group設計的X / Open分散式事務處理定義了一種標準通訊架構。允許多個應用程式共享多個資源管理器提供的資源,並允許其工作協調到全域性事務中。該XA介面使資源管理者參加事務,執行2PC(兩個階段提交),並在發生故障之後恢復。

2PC(兩段提交)含義:首先, 事務協調員向每個伺服器詢問一遍,要求每個資料庫都進行precommit的操作和是否可能實現 commit. 如果所有資料庫都同意commit ,第二段開始。第二段:事務協調員要求每個資料庫commit資料. 如果任何資料庫否決commit, 那麼所有資料庫將被要求回滾。當事務對某個資料庫鎖定時,這個資料庫或列就不可用,或者響應時間很慢。犧牲可用性了。

JTA + XA能夠實現分散式事務2PC 。

Spring提供了JTA介入方式,但是沒有提供JTA實現,目前JTA實現: Java Open Transaction Manager (JOTM), JBoss TS, Bitronix Transaction Manager (BTM), 和 Atomikos。

相關文章:

XA transactions using Spring,最老的一篇文章,JBossTS提供資料來源之間的事務,但是不支援資料庫源和JMS源,而Atomikos則支援。

Spring分佈 式事務XA事務(兩段提交2PC)實現:BTM的JTA實現。

Two Phase Commit With Tomcat Spring JMS And JDBC:使用Atomikos+Spring + JMS + JDBC實現

使用1PC實現分 布式事務,這是避免使用2PC,打插邊球,雖然可靠性降低,但是效能提升,主要適合兩三個不太多的資料庫同時更新。

Configuring Spring and JTA without full Java EE:Spring官方網站的分 布式事務案例

在Weblogic伺服器中使用Spring,安裝MedRec-Spring可支援分佈 式事務

xa transaction spring:文章提供原始碼案例。

Spring JTA multiple resource transactions in Tomcat with Atomikos example:提供了Atomikos+Spring原始碼案例

[該貼被banq於2017-04-12 15:49修改過]

[該貼被banq於2017-04-12 15:50修改過]

[該貼被banq於2017-04-12 15:51修改過]

相關文章