W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
二階段提交2PC(Two phase Commit)是指,在分布式系統(tǒng)里,為了保證所有節(jié)點(diǎn)在進(jìn)行事務(wù)提交時(shí)保持一致性的一種算法。
在分布式系統(tǒng)里,每個(gè)節(jié)點(diǎn)都可以知曉自己操作的成功或者失敗,卻無(wú)法知道其他節(jié)點(diǎn)操作的成功或失敗。
當(dāng)一個(gè)事務(wù)跨多個(gè)節(jié)點(diǎn)時(shí),為了保持事務(wù)的原子性與一致性,需要引入一個(gè)協(xié)調(diào)者(Coordinator)來(lái)統(tǒng)一掌控所有參與者(Participant)的操作結(jié)果,并指示它們是否要把操作結(jié)果進(jìn)行真正的提交(commit)或者回滾(rollback)。
2PC顧名思義分為兩個(gè)階段,其實(shí)施思路可概括為:
(1)投票階段(voting phase):參與者將操作結(jié)果通知協(xié)調(diào)者;
(2)提交階段(commit phase):收到參與者的通知后,協(xié)調(diào)者再向參與者發(fā)出通知,根據(jù)反饋情況決定各參與者是否要提交還是回滾;
算法執(zhí)行過(guò)程中,所有節(jié)點(diǎn)都處于阻塞狀態(tài),所有節(jié)點(diǎn)所持有的資源(例如數(shù)據(jù)庫(kù)數(shù)據(jù),本地文件等)都處于封鎖狀態(tài)。
典型場(chǎng)景為:
(1)某一個(gè)參與者發(fā)出通知之前,所有參與者以及協(xié)調(diào)者都處于阻塞狀態(tài);
(2)在協(xié)調(diào)者發(fā)出通知之前,所有參與者都處于阻塞狀態(tài);
另外,如有協(xié)調(diào)者或者某個(gè)參與者出現(xiàn)了崩潰,為了避免整個(gè)算法處于一個(gè)完全阻塞狀態(tài),往往需要借助超時(shí)機(jī)制來(lái)將算法繼續(xù)向前推進(jìn),故此時(shí)算法的效率比較低。
總的來(lái)說(shuō),2PC是一種比較保守的算法。
甲乙丙丁四人要組織一個(gè)會(huì)議,需要確定會(huì)議時(shí)間,不妨設(shè)甲是協(xié)調(diào)者,乙丙丁是參與者。
投票階段:
(1)甲發(fā)郵件給乙丙丁,周二十點(diǎn)開會(huì)是否有時(shí)間;
(2)甲回復(fù)有時(shí)間;
(3)乙回復(fù)有時(shí)間;
(4)丙遲遲不回復(fù),此時(shí)對(duì)于這個(gè)活動(dòng),甲乙丙均處于阻塞狀態(tài),算法無(wú)法繼續(xù)進(jìn)行;
(5)丙回復(fù)有時(shí)間(或者沒有時(shí)間);
提交階段:
(1)協(xié)調(diào)者甲將收集到的結(jié)果反饋給乙丙?。ㄊ裁磿r(shí)候反饋,以及反饋結(jié)果如何,在此例中取決與丙的時(shí)間與決定);
(2)乙收到;
(3)丙收到;
(4)丁收到;
2PC效率很低,分布式事務(wù)很難做。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: