傳統分布式事務

2021-10-02 06:03:28 字數 1378 閱讀 4586

兩階段提交協議

優化問題

標準事務模型

三階段提交協議

docommit

解決兩階段問題

參考協調者詢問是否可以提交。

參與者鎖住資源,開始事務操作,寫undo和redo,不提交。

參與者響應,如果執行成功,返回就緒,如果失敗,返回未準備。

提交協調者發出正式提交請求。

參與者提交本地事務,釋放資源。

參與者響應提交完成。

協調者收到所有參與者的完成後,完成事務。 回滾

協調者發出回滾請求。

參與者用undo回滾事務,釋放資源。

參與者響應回滾完成。

協調者收到所有參與者回滾後,取消事務。

同步阻塞。執行過程中,鎖住資源,吞吐量低。

單點問題。第二階段協調者故障,參與者事務一直阻塞。

資料不一致。第二階段協調者發出提交,但是部分參與者未執行或者執行失敗。

二階段固有問題:協調者發出commit後宕機,而且唯一收到的參與者也宕機,即使新選舉出協調者事務的提交狀態也是不確定的。

兩階段提交的標準化

協調者同步傳送cancommit請求。

參與者預估狀態,可以執行事務返回yes,不可以返回no,不鎖定資源。

準備協調者發出precommit請求。

參與者鎖住資源,開始事務操作,寫undo和redo,不提交。

參與者響應,如果執行成功,返回就緒,如果失敗,返回未準備。 中斷

協調者發出abort請求。

參與者收到後中斷事務,或者等待precommit超時後中斷事務。

提交協調者發出正式提交請求。

參與者提交本地事務,釋放資源。

參與者響應提交完成。(如果等待docommit請求超時,也進行提交

協調者收到所有參與者的完成後,完成事務。 回滾

協調者發出回滾請求。

參與者用undo回滾事務,釋放資源。

參與者響應回滾完成。

協調者收到所有參與者回滾後,取消事務。

同步阻塞緩解。cancommit階段不鎖資源。

單點解決。提交階段協調者故障,參與者預設提交。

資料不一致仍然存在。docommit階段協調者發出回滾,部分參與者由於網路超時未收到,執行commit,出現不一致。解決需要paxos演算法。

二階段固有問題解決:協調者發出commit後宕機,而且唯一收到的參與者也宕機,事務預設提交。

分布式 分布式事務

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...

分布式事務 分布式事務的實現

如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...

分布式之分布式事務

被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...