cmu440(8) Distributed Concurrency Management 2

Distributed Transactions

  1. 與以前類似的想法,但是:
    • 狀態(tài)遍布服務(wù)器(甚至可能是WAN)
    • 希望啟用單個(gè)事務(wù)來讀取和更新全局狀態(tài),同時(shí)保持ACID屬性
  2. 總體思路:
    • 客戶端啟動(dòng)事務(wù)。利用“協(xié)調(diào)員”
    • 所有其他相關(guān)的服務(wù)器作為“參與者”
    • 協(xié)調(diào)員分配唯一的交易ID(TID)

2-Phase commit

  1. 準(zhǔn)備和投票
    • 參與者找出所有狀態(tài)變化
    • 每個(gè)決定是否可以完成交易
    • 與協(xié)調(diào)員溝通
  2. 提交
    • 協(xié)調(diào)員向參與者進(jìn)行廣播:COMMIT / ABORT
    • 如果COMMIT,參與者進(jìn)行相應(yīng)的狀態(tài)更改

實(shí)現(xiàn)

  1. 作為一組消息來實(shí)現(xiàn)
    • 協(xié)調(diào)員和參與者之間
  2. 消息在第一階段
    • A:協(xié)調(diào)員向參與者發(fā)送“CanCommit?”
    • B:參與者回應(yīng):“投票提交”或“投票棄權(quán)”
  3. 消息在第二階段
    • A: 如果任何參與者“VoteAbort”交易中止。 協(xié)調(diào)員向所有人發(fā)送“DoAbort”=>釋放鎖定
    • B:否則,向所有人發(fā)送“DoCommit”=>完成交易

Example for 2PC

  1. 服務(wù)器A處銀行的帳戶“i”,服務(wù)器B處的“j”。
Server A would implement transaction
iServer B would implement transaction

服務(wù)器B可以假設(shè)“i”的賬戶有足夠的錢,否則整個(gè)交易將中止
怎么鎖定? 個(gè)人參與者鎖

  • 在準(zhǔn)備過程開始時(shí)獲取鎖定,在提交/中止釋放

Deadlocks and Livelocks

  1. 分布式的死鎖
    • 跨服務(wù)器的事務(wù)對鎖的循環(huán)依賴性
    • 在2PC中,如果參與者不能響應(yīng)投票請求(例如仍在等待其本地資源上的鎖)
    • 處理超時(shí)。 參與者超時(shí),然后投票中止。 再次重試交易。
      • 解決死鎖問題
      • 但是,LIVELOCK的危險(xiǎn) - 不斷嘗試!

總結(jié)

  1. 分布式一致性管理
  2. ACID屬性可取
  3. 單個(gè)服務(wù)器的情況:使用鎖,在使用兩階段鎖定(嚴(yán)格的2PL,嚴(yán)格的2PL嚴(yán)格)的情況下,對鎖的事務(wù)性支持
  4. 多服務(wù)器分布式情況:使用分階段事務(wù)的兩階段提交。 需要協(xié)調(diào)員來管理來自參與者的消息。

Two-Phase Commit (1)

The finite state machine

(a) The finite state machine for the coordinator in 2PC.
(b) The finite state machine for a participant.

Coordinator/Participant can be blocked in 3 states:

  • Participant: Waiting in INIT state for VOTE_REQUEST
  • Coordinator: Blocked in WAIT state, listening for votes
  • Participant: blocked in READY state, waiting for global vote

Two-Phase Commit (2)

  1. 如果“READY”參與者沒有收到全局提交呢? 不能中止=>找出協(xié)調(diào)員可能發(fā)送了什么消息。
  2. 方法:詢問其他參與者
    • 對任何參與者的回應(yīng)采取行動(dòng)
      • 例如。 P處于READY狀態(tài),詢問其他“Q”參與者


        image.png

如果每個(gè)人都處于“ready”狀態(tài),則協(xié)議模塊用于協(xié)調(diào)員(例如,如果協(xié)調(diào)員沒有響應(yīng)或已經(jīng)崩潰?。?。

Two-Phase Commit (3)

  1. 為了恢復(fù),必須將狀態(tài)保存到永久存儲(chǔ)器(例如日志),以在故障之后重新啟動(dòng)/恢復(fù)。
    • 參與者(INIT):安全到當(dāng)?shù)刂兄?,通知協(xié)調(diào)員
    • 參與者(READY):聯(lián)系其他人
    • 協(xié)調(diào)器(WAIT):重新發(fā)送VOTE_REQ
    • 協(xié)調(diào)員(等待/決定):重新傳送VOTE_COMMIT

協(xié)調(diào)員必須小心跟蹤兩個(gè)狀態(tài):
如果它記錄了進(jìn)入等待狀態(tài)并且沒有回來所有的響應(yīng),它可以重新發(fā)送VOTE_REQ
如果它已經(jīng)恢復(fù)已經(jīng)在第二階段做出決定,那么這個(gè)決定必須被記錄下來并且被重新發(fā)送。

2PC: Actions by Coordinator

iActions by Coordinator
Actions by Participant

Handling Decision Request

Handling Decision Request

請注意,參與者只有在達(dá)成全球決定并將其付諸日志時(shí)才能幫助他人。
如果每個(gè)人都收到VOTE_REQ,協(xié)調(diào)員崩潰怎么辦?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容