回覆列表
-
1 # 傑哥學Java
-
2 # 大象聊科技
本質原因是傳統事務只能解決單個事務性資源的問題,而分散式事務是考慮多個事務性資源的問題,兩者適用場景不一樣,故無法用傳統事務解決分散式事務問題。
下面詳細解釋下:
1、傳統事務通常指資料庫事務,是依賴事務資源的強一致性來保障的。這種事務執行模式在傳統的單體應用中,由於事務性的資源都在同一個應用內,不存在跨越多個事務資源的呼叫方式,可以高效的工作;
2、但在分散式環境下,由於需要解決不同應用中的事務性資源的狀態一致性,通常不會採用傳統事務中的強一致性策略,而是轉而採用弱一致性,並達到最終一致性(BASE)。“BASE”其核心思想是根據業務特點,採用適當的方式來使系統達到最終一致性(Eventual consistency);在網際網路領域,通常需要犧牲強一致性來換取系統的高可用性,只需要保證資料的“最終一致”,只是這個最終時間需要在使用者可以接受的範圍內;但在金融相關的交易領域,仍然需要採用強一致性的方式來保障交易的準確性與可靠性。
3、目前分散式事務常用的方案有:
分散式事務中常見的解決方案包括兩階段提交、三階段提交、Sagas長事務、補償模式、可靠事件模式(本地事件表、外部事件表)、可靠事件模式(非事務訊息、事務訊息)、TCC等。
不同實現的優劣點參加下圖:
分散式涉及了很多技術,這兒不一一列舉了。
這兒的事務主要指的是資料庫事務
傳統事務: 指的是一個IT系統共用一個數據庫
分散式事務,同一個應用服務部署在N臺主機上,傳統的事務,只能單節點控制