分佈式事務(一)原理概覽html
分佈式事務(二)JTA規範mysql
分佈式事務(四)簡單樣例spring
分佈式事務(五)源碼詳解sql
分佈式事務(六)總結提升數據庫
分佈式歷來都不是簡單的東西。爲此寫本系列文章也耗費了筆者大量腦細胞,從第一節3月底到總結篇的6月初,耗時2個多月...用經驗,結合學習、測試,總算完結了。編程
本系列從原理、規範、組件支撐、簡單樣例、源碼剖析多角度分析分佈式事務,讓你們對分佈式事務有正確的概念,行之有效的實操能力、經常使用解決方案,底層源碼的深刻剖析。服務器
若是說分佈式事務這一塊100分的話,理論最少佔了40%,實踐只佔60%甚至更少。一個成熟的程序員應該清楚,分佈式這一塊有哪些概念原理,常看法決方案。遇到問題能夠一眼就看破虛妄,找到問題所在,甚至直接腦子裏就有對應的實現方案。異步
對於分佈式事務,常見問題:數據庫設計
事務(Transaction)是數據庫區別於文件系統的重要特性之一。目前國際承認的數據庫設計原則是ACID特性,用以保證數據庫事務的正確執行。Mysql的innodb引擎中的事務就徹底符合ACID特性。
事務根據業務場景不一樣可分爲本地事務,分佈式事務。
當須要多個增刪改業務操做,同時成功或失敗回滾時。若是操做的是一個RM(資源管理器),那麼就是本地事務。若是操做多個RM,那就是分佈式事務。
大部分狀況下,一個服務操做一個數據庫,這就是本地事務(本地事務飛機票)。ACID特性由數據庫提供支持,好比mysql innodb引擎。以下圖所示(網上的圖,挺好直接用):
spring 提供了2種方式實現:
當遇到複雜業務調用時,可能會出現跨庫多資源調用(一個事務管理器,多個資源)/多服務調用(多個事務管理器,多個資源),指望所有成功或失敗回滾,這就是分佈式事務,用以保證「操做多個隔離資源的數據一致性」。
分佈式業務場景下,誕生了DTP模型、XA協議,以及引伸出來的TM與RM之間的二階段提交、三階段提交。以及後來的CAP理論,BASE理論,大部分狀況下爲了追求性能,咱們不會追求強一致性。
強一致性:若是應用服務器不支持分佈式事務,那麼能夠藉助第三方事務管理器實現,好比分佈式事務(四)簡單樣例Spring Boot+Atomikos(TM)+Mybatis(ORM)+Mysql(DB)。
最終一致性:多種解決方案(具體見分佈式事務(一)原理概覽第六節)
1.分佈式的場景不少,不可能把每種源碼都寫出來。好比第一章的」最終一致性解決方案「,沒有附上相關源碼,讀者能夠根據方案介紹自行實現。
2.我的能力有限,有寫的不對的地方,煩請指出,共同提升,壯哉我大Java!