分布式事務指事務的參與者、支援事務的伺服器、資源伺服器以及事務管理器分別位於不同的分布式系統的不同節點之上。
簡單的說,就是一次大的操作由不同的小操作組成,這些小的操作分布在不同的伺服器上,且屬於不同的應用,分布式事務需要保證這些小操作要麼全部成功,要麼全部失敗。
本質上來說,分布式事務就是為了保證不同資料庫的資料一致性。
最早的分布式事務模型是 x/open 國際聯盟提出的 x/open distributed transaction processing(dtp)模型,也就是大家常說的 x/open xa 協議,簡稱xa 協議。
x/open dtp(x/open distributed transaction processing reference model) 是x/open 這個組織定義的一套分布式事務的標準,也就是了定義了規範和api介面,由各個廠商進行具體的實現。 x/open dtp 定義了三個元件: ap,tm,rm
dtp通過兩階段提交協議來控制事務。
第一階段:準備階段 tm事務管理器通知rm資源管理器準備分支事務,rm資源管理器告之tm事務管理器準備結果
第二階段:提交階段 tm事務管理器通知rm資源管理器提交分支事務,rm資源管理器告之tm事務管理器結果
原子性:xa議使用2pc原子提交協議來保證分布式事務原子性
隔離性:xa要求每個rms實現本地的事務隔離,子事務的隔離來保證整個事務的隔離。
一致性:通過原子性、隔離性以及自身一致性的實現來保證「資料庫從乙個一致狀態轉變為另乙個一致狀態」;通過mvcc來保證中間狀態不能被觀察到。
實現簡單,但是相應問題多,實際使用的很少
在參與者和協調者提交階段,有參與者節點崩潰導致無法與協調者正常通訊,這時協調者將只能依賴協調者自身的超時機制來生效。但往往超時機制生效時,協調者都會指示參與者進行回滾操作,這樣的策略顯得比較保守。
三階段提交是為解決兩階段提交協議的缺點而設計的
與兩階段提交不同的是,三階段提交是「非阻塞」協議。三階段提交在兩階段提交的第一階段與第二階段之間插入了乙個準備階段,使得原先在兩階段提交中,參與者在投票之後,由於協調者發生崩潰或錯誤,而導致參與者處於無法知曉是否提交或者中止的「不確定狀態」所產生的可能相當長的延時的問題得以解決。
階段1:can commit協調者向參與者傳送commit請求,參與者如果可以提交就返回yes響應(參與者不執行事務操作),否則返回no響應
階段2:pre commit協調者根據階段1 cancommit參與者的反應情況來決定是否可以基於事務的precommit操作。根據響應情況,有以下兩種情況發生。
階段3:do commit該階段進行真正的事務提交
優點相比二階段提交,三階段貼近降低了阻塞範圍,階段2在等待超時後協調者或參與者會中斷事務。避免了協調者單點問題,階段3中協調者出現問題時,參與者會繼續提交事務。
缺點資料不一致問題依然存在,當在參與者收到precommit請求後等待do commite指令時,此時如果協調者請求中斷事務,而協調者無法與參與者正常通訊,會導致參與者繼續提交事務,造成資料不一致。
tcc是服務化的二階段程式設計模型,其try、confirm、cancel 3個方法均由業務編碼實現;
tcc事務的try、confirm、cancel可以理解為sql事務中的lock、commit、rollback。
優點:缺點: tcc的try、confirm和cancel操作功能要按具體業務來實現,業務耦合度較高,提高了開發成本。
分布式 分布式事務
是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...
分布式事務 分布式事務的實現
如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...
分布式之分布式事務
被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...