Spring的分散式事務實現(JTA+XA/2PC)
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。
相關文章:
如果想讓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修改過]
相關文章
- 使用Spring Boot實現分散式事務Spring Boot分散式
- 分散式事務-2PC和3PC分散式
- 分散式事務(3)---RocketMQ實現分散式事務原理分散式MQ
- 分散式事務(4)---RocketMQ實現分散式事務專案分散式MQ
- PHP分散式事務-兩段式提交 2PC(二)PHP分散式
- Spring Cloud Seata系列:基於AT模式實現分散式事務SpringCloud模式分散式
- 分散式事務(1)---2PC和3PC理論分散式
- 分散式事務的幾種實現方式分散式
- 分散式事務之Spring事務與JMS事務(二)分散式Spring
- 使用Spring Boot + Kafka實現Saga分散式事務模式的原始碼 - vinsguruSpring BootKafka分散式模式原始碼
- 基於RocketMQ實現分散式事務MQ分散式
- SpringCloud+RocketMQ實現分散式事務SpringGCCloudMQ分散式
- Apache ShardingSphere 如何實現分散式事務Apache分散式
- 分散式事務(一)—分散式事務的概念分散式
- 資料庫分散式事務的實現原理!資料庫分散式
- 分散式鎖和spring事務管理分散式Spring
- Oracle Gateway for SQL Server時2PC分散式事務異常處理OracleGatewaySQLServer分散式
- 分散式事務實戰分散式
- 分散式事務之資料庫事務與JDBC事務實現(一)分散式資料庫JDBC
- AspNetCore&MassTransit Courier實現分散式事務NetCore分散式
- Golang 實現 Redis(8): TCC分散式事務GolangRedis分散式
- php基於dtm分散式事務管理器實現tcc模式分散式事務demoPHP分散式模式
- Spring宣告式事務的兩種實現方式Spring
- MySQL 中基於 XA 實現的分散式事務MySql分散式
- 分散式事務(八)Spring Cloud微服務系統基於Rocketmq可靠訊息最終一致性實現分散式事務分散式SpringCloud微服務MQ
- Seata 無侵入式分散式事務服務的實現基石-JDBC篇分散式JDBC
- 分散式事務之JTA原理與實現(三)分散式
- kratos分散式事務實踐分散式
- 分散式事務之事務實現模式與技術(四)分散式模式
- 使用CRDT實現分散式事務的資料推薦分散式
- 基於Seata探尋分散式事務的實現方案分散式
- 使用Spring實現反應式事務(Reactive Transactions)SpringReact
- 【Spring】事務實現原理Spring
- Spring事務實現原理Spring
- Dubbo 分散式事務一致性實現分散式
- Laravel基於reset機制實現分散式事務Laravel分散式
- Asp.Net Core&CAP實現分散式事務ASP.NET分散式
- MassTransit | 基於StateMachine實現Saga編排式分散式事務Mac分散式
- 微服務架構 | 11.1 整合 Seata AT 模式實現分散式事務微服務架構模式分散式