溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

web一致性協(xié)議提交的過(guò)程是什么

發(fā)布時(shí)間:2021-12-20 15:39:49 來(lái)源:億速云 閱讀:116 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“web一致性協(xié)議提交的過(guò)程是什么”,在日常操作中,相信很多人在web一致性協(xié)議提交的過(guò)程是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”web一致性協(xié)議提交的過(guò)程是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

        web一致性協(xié)議提交的過(guò)程是什么    

與兩階段提交不同的是,三階段提交有兩個(gè)改動(dòng)點(diǎn)。

  1. 引入超時(shí)機(jī)制 - 同時(shí)在協(xié)調(diào)者和參與者中都引入超時(shí)機(jī)制。

  2. 在第一階段和第二階段中插入一個(gè)準(zhǔn)備階段,保證了在最后提交階段之前各參與節(jié)點(diǎn)的狀態(tài)是一致的。

定義

三階段提交(Three-phase commit),也叫三階段提交協(xié)議(Three-phase commit protocol),是二階段提交(2PC)的改進(jìn)版本。

所謂的三個(gè)階段分別是:詢(xún)問(wèn),然后再鎖資源,最后真正提交。

  • 第一階段:CanCommit

  • 第二階段:PreCommit

  • 第三階段:Do Commit

提交的過(guò)程

事務(wù)詢(xún)問(wèn)階段/CanCommit

3PC的CanCommit階段其實(shí)和2PC的準(zhǔn)備階段很像。協(xié)調(diào)者向參與者發(fā)送commit請(qǐng)求,參與者如果可以提交就返回Yes響應(yīng),否則返回No響應(yīng)。

a. 事務(wù)詢(xún)問(wèn)

協(xié)調(diào)者向參與者發(fā)送CanCommit請(qǐng)求。詢(xún)問(wèn)是否可以執(zhí)行事務(wù)提交操作。然后開(kāi)始等待參與者的響應(yīng)。

b. 響應(yīng)反饋

參與者接到CanCommit請(qǐng)求之后,正常情況下,如果其自身認(rèn)為可以順利執(zhí)行事務(wù),則返回Yes響應(yīng),并進(jìn)入預(yù)備狀態(tài);否則反饋No。

這個(gè)和 2PC 階段不同的是,此時(shí)參與者沒(méi)有鎖定資源,沒(méi)有寫(xiě) redo,undo,執(zhí)行回滾日志?;貪L代價(jià)低

事務(wù)準(zhǔn)備階段/PreCommit

協(xié)調(diào)者在得到所有參與者的響應(yīng)之后,會(huì)根據(jù)結(jié)果執(zhí)行2種操作:執(zhí)行事務(wù)預(yù)提交,或者中斷事務(wù)。

執(zhí)行事務(wù)預(yù)提交

a. 發(fā)送預(yù)提交請(qǐng)求

協(xié)調(diào)者向所有參與者節(jié)點(diǎn)發(fā)出 preCommit 的請(qǐng)求,并進(jìn)入 prepared 狀態(tài)。

b. 事務(wù)預(yù)提交

參與者受到 preCommit 請(qǐng)求后,會(huì)執(zhí)行事務(wù)操作,對(duì)應(yīng) 2PC 準(zhǔn)備階段中的 “執(zhí)行事務(wù)”,也會(huì) Undo 和 Redo 信息記錄到事務(wù)日志中。

c. 各參與者響應(yīng)反饋

如果參與者成功執(zhí)行了事務(wù),就反饋 ACK 響應(yīng),同時(shí)等待指令:提交(commit) 或終止(abort)。

中斷事務(wù)

a. 發(fā)送中斷請(qǐng)求

協(xié)調(diào)者向所有參與者節(jié)點(diǎn)發(fā)出 abort 請(qǐng)求 。

b. 中斷事務(wù)

參與者如果收到 abort 請(qǐng)求或者超時(shí)了,都會(huì)中斷事務(wù)。

執(zhí)行事務(wù)階段/Do Commit

該階段進(jìn)行真正的事務(wù)提交,也可以分為以下兩種情況。

執(zhí)行提交

a. 發(fā)送提交請(qǐng)求

協(xié)調(diào)者接收到各參與者發(fā)送的ACK響應(yīng),那么他將從預(yù)提交狀態(tài)進(jìn)入到提交狀態(tài)。并向所有參與者發(fā)送 doCommit 請(qǐng)求。

b. 事務(wù)提交

參與者接收到 doCommit 請(qǐng)求之后,執(zhí)行正式的事務(wù)提交。并在完成事務(wù)提交之后釋放所有事務(wù)資源。

c. 響應(yīng)反饋

事務(wù)提交完之后,向協(xié)調(diào)者發(fā)送 ACK 響應(yīng)。

d. 完成事務(wù)

協(xié)調(diào)者接收到所有參與者的 ACK 響應(yīng)之后,完成事務(wù)。

中斷事務(wù)

協(xié)調(diào)者沒(méi)有接收到參與者發(fā)送的 ACK 響應(yīng)(可能是接受者發(fā)送的不是ACK響應(yīng),也可能響應(yīng)超時(shí)),那么就會(huì)執(zhí)行中斷事務(wù)。

a. 發(fā)送中斷請(qǐng)求

協(xié)調(diào)者向所有參與者發(fā)送 abort 請(qǐng)求。

b. 事務(wù)回滾

參與者接收到 abort 請(qǐng)求之后,利用其在階段二記錄的 undo 信息來(lái)執(zhí)行事務(wù)的回滾操作,并在完成回滾之后釋放所有的事務(wù)資源。

c. 反饋結(jié)果

參與者完成事務(wù)回滾之后,向協(xié)調(diào)者發(fā)送 ACK 消息。

d. 中斷事務(wù)

協(xié)調(diào)者接收到參與者反饋的 ACK 消息之后,完成事務(wù)的中斷。

在此階段參與者如果在一定時(shí)間內(nèi)沒(méi)有收到docommit消息,觸發(fā)超時(shí)機(jī)制,會(huì)自己提交事務(wù)。此番處理的邏輯是,能夠進(jìn)入此階段,說(shuō)明在事務(wù)詢(xún)問(wèn)階段所有節(jié)點(diǎn)都是好的。即使在提交的時(shí)候部分失敗,有理由相信,此時(shí)大部分節(jié)點(diǎn)都是好的。是可以提交的.

優(yōu)點(diǎn)

相對(duì)于二階段提交,三階段提交主要解決的單點(diǎn)故障問(wèn)題,并減少了阻塞的時(shí)間。

因?yàn)橐坏﹨⑴c者無(wú)法及時(shí)收到來(lái)自協(xié)調(diào)者的信息之后,他會(huì)默認(rèn)執(zhí)行 commit。而不會(huì)一直持有事務(wù)資源并處于阻塞狀態(tài)。

缺點(diǎn)

三階段提交也會(huì)導(dǎo)致數(shù)據(jù)一致性問(wèn)題。由于網(wǎng)絡(luò)原因,協(xié)調(diào)者發(fā)送的 abort 響應(yīng)沒(méi)有及時(shí)被參與者接收到,那么參與者在等待超時(shí)之后執(zhí)行了 commit 操作。

這樣就和其他接到 abort 命令并執(zhí)行回滾的參與者之間存在數(shù)據(jù)不一致的情況。

到此,關(guān)于“web一致性協(xié)議提交的過(guò)程是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

web
AI