事務的一階段提交協議和二階段提交協議

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   使用   ar   strong   for   

    因為事務需要實現ACID,即原子性、一致性、隔離性、持久性,所以需要採用一定的機制來保證,通常採用的是分階段提交的方式。

    XA:XA協議,規定交易管理員和資源管理員介面,採用二階段提交協議。

一階段提交協議

    一階段提交協議相對簡單,如:

    

    當然,前提是開啟了事務,然後在應用程式發出提交/復原請求後,資料庫執行操作,而後將成功/失敗返回給應用程式,程式繼續執行。

    一階段提交協議相對簡單,簡單帶來的優點就是,它不用再與其他的對象互動,節省了判斷步驟和時間,所以在效能上是在階段提交協議中對好的。

二階段提交協議

    一階段提交協議有其優點,但缺點也很明顯:

  • 資料庫確認執行事務的時間較長,出問題的可能性就隨之增大。
  • 如果有多個資料來源,一階段提交協議無法協調他們之間的關係。

   所以在一階段協議的基礎上,有了二階段協議,二階段協議的好處是添加了一個管理者角色,如下:

    

    很明顯,二階段協議通過將兩層變為三層,增加了中間的管理者角色,從而協調多個資料來源之間的關係,二階段提交協議分為兩個階段。

    第一階段

    

    應用程式調用了交易管理員的提交方法,此後第一階段分為兩個步驟:

  • 交易管理員通知參與該事務的各個資源管理員,通知他們開始準備事務。
  • 資源管理員接收到訊息後開始準備階段,寫好交易記錄並執行事務,但不提交,然後將是否就緒的訊息返回給交易管理員(此時已經將事務的大部分事情做完,以後的內容耗時極小)。

    第二階段

    

    第二階段也分為兩個步驟:    

  • 交易管理員在接受各個訊息後,開始分析,如果有任意其一失敗,則發送復原命令,否則發送提交命令。
  • 各個資源管理員接收到命令後,執行(耗時很少),並將提交訊息返回給交易管理員。
    交易管理員接受訊息後,事務結束,應用程式繼續執行。    為什麼要分兩步執行?一是因為分兩步,就有了交易管理員統一管理的機會;二儘可能晚地提交事務,讓事務在提交前儘可能地完成所有能完成的工作,這樣,最後的提交階段將是耗時極短,耗時極短意味著操作失敗的可能性也就降低。
    同時,二階段提交協議為了保證事務的一致性,不管是交易管理員還是各個資源管理員,每執行一步操作,都會記錄日誌,為出現故障後的恢複準備依據。    二階段提交協議的存在的弊端是阻塞,因為交易管理員要收集各個資源管理員的響應訊息,如果其中一個或多個一直不返回訊息,則交易管理員一直等待,應用程式也被阻塞,甚至可能永久阻塞。事務與協議    那麼本地事務和分散式交易,分別採用的是哪些協議?我在RedBooks的一個文檔中看到的是:Global transactions
    Although the XAResource interface is intended to support two phase commit, the specification does not force an adapter to support two phase commit. However, if the resource adapter does implement XAResource it must also implement support for one phase commit. This allows the transaction manager to do one phase commit optimization (explained later) by setting the onePhase flag to true when doing acommit.……
Local transactions
    A local transaction is managed by the resource manager without the need for an 
external transaction manager, and can be utilized when only one resource is 
involved. Local transactions only support one phase commit, because they only 
reference one EIS.……
    大意是:雖然實現XA介面的目的是為了支援二階段提交協議,但是它也支援一階段提交協議。本地事務只支援一階段提交;分散式交易預設採用的是二階段提交,如果在分散式交易中非得使用一階段提交協議,那麼只要資料來源多餘一個就會拋出異常,如果只有一個資料來源則正確執行。總結    一階段提交協議和二階段提交協議只是比較常用的兩個,此外還有其他協議,可自行研究。





事務的一階段提交協議和二階段提交協議

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.