兩階段提交協議
優化問題
標準事務模型
三階段提交協議
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.分布式...