分佈式系統中保證不一樣節點之間的數據一致性的事物,叫作分佈式事物。html
微服務,SOA等服務架構模式,一個是service產生多個節點,另外一個是resource產生多個節點。數據庫
系統故障、網絡錯誤等狀況下,都會致使數據存儲不一致的狀況,這種狀況就須要分佈式事物來處理。網絡
XA二階段提交多線程
1.性能問題架構
XA協議遵循強一致性。在事務執行過程當中,各個節點佔用着數據庫資源,只有當全部節點準備完畢,事務協調者纔會通知提交,參與者提交後釋放資源。這樣的過程有着很是明顯的性能問題。異步
2.協調者單點故障問題分佈式
事務協調者是整個XA模型的核心,一旦事務協調者節點掛掉,參與者收不到提交或是回滾通知,參與者會一直處於中間狀態沒法完成事務。微服務
3.丟失消息致使的不一致問題。性能
在XA協議的第二個階段,若是發生局部網絡問題,一部分事務參與者收到了提交消息,另外一部分事務參與者沒收到提交消息,那麼就致使了節點之間數據的不一致。
測試
XA三階段提交
XA三階段提交在兩階段提交的基礎上增長了CanCommit階段,而且引入了超時機制。一旦事物參與者遲遲沒有接到協調者的commit請求,會自動進行本地commit。這樣有效解決了協調者單點故障的問題。可是性能問題和不一致的問題仍然沒有根本解決。
MQ事務
利用消息中間件來異步完成事務的後一半更新,實現系統的最終一致性。這個方式避免了像XA協議那樣的性能問題。不過因爲會出現網絡延遲的問題,消息重複、消息順序沒法保證的狀況也會出現。須要業務機制進行補償。
本地消息表
將須要分佈式處理的任務經過消息日誌的方式來異步執行。消息日誌能夠存儲到本地文本、數據庫或消息隊列,再經過業務規則自動或人工發起重試。人工重試更多的是應用於支付場景,經過對帳系統對過後問題的處理。
Saga事務
將長事務拆分爲多個本地短事務,由Saga事務協調器協調,若是正常結束那就正常完成,若是某個步驟失敗,則根據相反順序一次調用補償操做。saga模式沒有隔離性的影響仍是較大。
LCN事務
LCN模式是經過代理Connection的方式實現對本地事務的操做,而後在由TxManager統一協調控制事務。當本地事務提交回滾或者關閉鏈接時將會執行假操做,該代理的鏈接將由LCN鏈接池管理。
該模式對代碼的嵌入性爲低。
該模式僅限於本地存在鏈接對象且可經過鏈接對象控制事務的模塊。
該模式下的事務提交與回滾是由本地事務方控制,對於數據一致性上有較高的保障。
該模式缺陷在於代理的鏈接須要隨事務發起方一共釋放鏈接,增長了鏈接佔用的時間
Atomikos事務
優勢:
缺點:
1. Atomikos從池裏取得connection時,每次都會去進行select test,這個對獲取鏈接的影響很大,取消這個測試,TPS大概能提升近1倍;
2. Atomilos對池中connection的管理效率隨着鏈接數的上升,呈現指數級的降低,測試環境中,鏈接最大配置爲300,但實際上最大值沒有超過70,線程dump發現鏈接池管理對象上存在激烈的鎖競爭,致使不少線程等待前面的線程釋放鎖對象;
3. 因爲Atomikos支持JTA事務,而c3p0則不支持,這致使atomikos在獲取connection時,首先須要從線程上下文去檢索是否已經存在着connection,這個檢測從atomikos的實現上看,會遍歷鏈接池中全部connection對象,因此當鏈接數上升時,鏈接池的效率顯著降低;
TCC事務
TCC事務是Try、Commit、Cancel三種指令的縮寫,其邏輯模式相似於XA兩階段提交,可是實現方式是在代碼層面來人爲實現。
該模式對代碼的嵌入性高,要求每一個業務須要寫三種步驟的操做。
該模式對有無本地事務控制均可以支持使用面廣。
數據一致性控制幾乎徹底由開發者控制,對業務開發難度要求高。
TCC事務機制相比於上面介紹的XA,解決了其幾個缺點:
1.解決了協調者單點,由主業務方發起並完成這個業務活動。業務活動管理器也變成多點,引入集羣。
2.同步阻塞:引入超時,超時後進行補償,而且不會鎖定整個資源,將資源轉換爲業務邏輯形式,粒度變小。
3.數據一致性,有了補償機制以後,由業務活動管理器控制一致性 。
TCC事務的缺點,主要就一個:
到底要不要使用TCC到底要不要使用TCC事務,取決於如下幾點:
Fescar
優勢
高效 而且對業務 0 侵入 的方式,解決 微服務 場景下面臨的分佈式事務問題。
缺點
存在一些侷限,好比:事務隔離級別最高支持到 讀已提交 的水平,SQL 的解析還不能涵蓋所有的語法等。
分爲AT模式和MT模式,默認的是AT模式,可是最好是AT模式和MT模式結合使用,由於MT模式能夠將非關係型數據庫也歸入全局事務管理中。
AT模式的行爲分支
業務邏輯不須要關注事務機制,分支與全局事務的交互過程自動進行。
MT模式的行爲分支
業務邏輯須要被分解爲 Prepare/Commit/Rollback 3 部分,造成一個 MT 分支,加入全局事務。
MT 模式一方面是 AT 模式的補充。另外,更重要的價值在於,經過 MT 模式能夠把衆多非事務性資源歸入全局事務的管理中。
詳細瞭解網址https://blog.csdn.net/qq924862077/article/details/86556559
參考網址:
https://blog.csdn.net/bjweimengshu/article/details/79607522
https://www.cnblogs.com/bigben0123/p/9453830.html
https://blog.csdn.net/jl19861101/article/details/54864019