a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > 文庫 > 正文

分布式數據庫事務的兩階段提交介紹

2024-09-07 22:12:32
字體:
來源:轉載
供稿:網友
       在分布式系統中,各個節點之間在物理上相互獨立,通過網絡進行溝通和協調。由于存在事務機制,可以保證每個獨立節點上的數據操作可以滿足ACID。但是,相互獨立的節點之間無法準確的知道其他節點中的事務執行情況。所以從理論上講,兩臺機器理論上無法達到一致的狀態。如果想讓分布式部署的多臺機器中的數據保持一致性,那么就要保證在所有節點的數據寫操作,要不全部都執行,要么全部的都不執行。但是,一臺機器在執行本地事務的時候無法知道其他機器中的本地事務的執行結果。所以他也就不知道本次事務到底應該commit還是 roolback。所以,常規的解決辦法就是引入一個“協調者”的組件來統一調度所有分布式節點的執行。
  
      二階段提交(Two-phaseCommit)是指,在計算機網絡以及數據庫領域內,為了使基于分布式系統架構下的所有節點在進行事務提交時保持一致性而設計的一種算法(Algorithm)。通常,二階段提交也被稱為是一種協議(Protocol))。在分布式系統中,每個節點雖然可以知曉自己的操作時成功或者失敗,卻無法知道其他節點的操作的成功或失敗。當一個事務跨越多個節點時,為了保持事務的ACID特性,需要引入一個作為協調者的組件來統一掌控所有節點(稱作參與者)的操作結果并最終指示這些節點是否要把操作結果進行真正的提交(比如將更新后的數據寫入磁盤等等)。因此,二階段提交的算法思路可以概括為:參與者將操作成敗通知協調者,再由協調者根據所有參與者的反饋情報決定各參與者是否要提交操作還是中止操作。
所謂的兩個階段是指:第一階段:準備階段(投票階段)和第二階段:提交階段(執行階段)。
 
準備階段
 
      事務協調者(事務管理器)給每個參與者(資源管理器)發送Prepare消息,每個參與者要么直接返回失敗(如權限驗證失敗),要么在本地執行事務,寫本地的redo和undo日志,但不提交,到達一種“萬事俱備,只欠東風”的狀態。
 
     可以進一步將準備階段分為以下三個步驟:
 
1)協調者節點向所有參與者節點詢問是否可以執行提交操作(vote),并開始等待各參與者節點的響應。
 
2)參與者節點執行詢問發起為止的所有事務操作,并將Undo信息和Redo信息寫入日志。(注意:若成功這里其實每個參與者已經執行了事務操作)
 
3)各參與者節點響應協調者節點發起的詢問。如果參與者節點的事務操作實際執行成功,則它返回一個”同意”消息;如果參與者節點的事務操作實際執行失敗,則它返回一個”中止”消息。
提交階段
 
     如果協調者收到了參與者的失敗消息或者超時,直接給每個參與者發送回滾(Rollback)消息;否則,發送提交(Commit)消息;參與者根據協調者的指令執行提交或者回滾操作,釋放所有事務處理過程中使用的鎖資源。(注意:必須在最后階段釋放鎖資源)
 
     接下來分兩種情況分別討論提交階段的過程。
 
當協調者節點從所有參與者節點獲得的相應消息都為”同意”時:
分布式數據庫事務的兩階段提交介紹
1)協調者節點向所有參與者節點發出”正式提交(commit)”的請求。
 
2)參與者節點正式完成操作,并釋放在整個事務期間內占用的資源。
 
3)參與者節點向協調者節點發送”完成”消息。
 
4)協調者節點受到所有參與者節點反饋的”完成”消息后,完成事務。
 
如果任一參與者節點在第一階段返回的響應消息為”中止”,或者 協調者節點在第一階段的詢問超時之前無法獲取所有參與者節點的響應消息時:
分布式數據庫事務的兩階段提交介紹
  
1)協調者節點向所有參與者節點發出”回滾操作(rollback)”的請求。
  
2)參與者節點利用之前寫入的Undo信息執行回滾,并釋放在整個事務期間內占用的資源。
  
3)參與者節點向協調者節點發送”回滾完成”消息。
  
4)協調者節點受到所有參與者節點反饋的”回滾完成”消息后,取消事務。
不管最后結果如何,第二階段都會結束當前事務。
  
二階段提交看起來確實能夠提供原子性的操作,但是不幸的事,二階段提交還是有幾個缺點的:
  
1、同步阻塞問題。執行過程中,所有參與節點都是事務阻塞型的。當參與者占有公共資源時,其他第三方節點訪問公共資源不得不處于阻塞狀態。
  
2、單點故障。由于協調者的重要性,一旦協調者發生故障。參與者會一直阻塞下去。尤其在第二階段,協調者發生故障,那么所有的參與者還都處于鎖定事務資源的狀態中,而無法繼續完成事務操作。(如果是協調者掛掉,可以重新選舉一個協調者,但是無法解決因為協調者宕機導致的參與者處于阻塞狀態的問題)
  
3、數據不一致。在二階段提交的階段二中,當協調者向參與者發送commit請求之后,發生了局部網絡異常或者在發送commit請求過程中協調者發生了故障,這回導致只有一部分參與者接受到了commit請求。而在這部分參與者接到commit請求之后就會執行commit操作。但是其他部分未接到commit請求的機器則無法執行事務提交。于是整個分布式系統便出現了數據部一致性的現象。
 
4、二階段無法解決的問題:協調者再發出commit消息之后宕機,而唯一接收到這條消息的參與者同時也宕機了。那么即使協調者通過選舉協議產生了新的協調者,這條事務的狀態也是不確定的,沒人知道事務是否被已經提交。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产一区二区三区四区五区加勒比 | 中文字幕视频在线 | 久草在线中文888 | 国内精品久久久久久影视8 久久亚洲精品国产一区最新章节 | 麻豆专区一区二区三区四区五区 | 大片黄网站 | 免费在线一区二区 | 银杏成人影院在线观看 | 日韩一级免费 | 狠狠色噜噜狠狠色综合久 | 久草成人网 | 狠狠天天 | 久久久精品国产 | 毛片国产 | 国产精品三级久久久久久电影 | 精品91| 成人看的免费视频 | 成人不卡 | 天天舔天天干天天操 | 久久草视频| 免费观看性欧美大片无片 | 91高清免费 | 欧美国产日韩精品 | 玖玖视频 | 九九久久久 | 国产精品久久久久久久久久久久久 | 色站综合| 亚洲国产精品成人无久久精品 | 成人福利在线观看 | 欧美一级在线观看视频 | 日韩精品亚洲一区 | 精品成人 | 久久久久久久久久久一区二区 | 亚洲精品在线播放 | 一本一道久久a久久精品综合蜜臀 | 国产精品一区在线 | 精品久久ai| 精品影视| 一级a性色生活片久久毛片明星 | www亚洲免费国内精品 | 日本性视频 |