掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
作者:58沈劍 2018-10-29 08:44:29
分布式 上一篇《分布式事務(wù),原來可以這么玩?》引起了不少討論,后續(xù)準(zhǔn)備開一個(gè)新系列,講一講分布式的東西,今天就從相對(duì)容易理解的“兩階段提交”談起。

成都創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元柳州做網(wǎng)站,已為上家服務(wù),為柳州各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
上一篇《分布式事務(wù),原來可以這么玩?》引起了不少討論,后續(xù)準(zhǔn)備開一個(gè)新系列,講一講分布式的東西,今天就從相對(duì)容易理解的“兩階段提交”談起。
畫外音:給自己定了一個(gè)目標(biāo),用通俗的語言把Paxos講懂。
分布式事務(wù)為什么難?
在分布式環(huán)境下,每個(gè)節(jié)點(diǎn)都可以知曉自己操作的成功或者失敗,卻無法知道其他節(jié)點(diǎn)操作的成功或失敗。當(dāng)一個(gè)分布式事務(wù)跨多個(gè)節(jié)點(diǎn)時(shí),保持事務(wù)的原子性與一致性,是非常困難的。
什么是兩階段提交?
二階段提交2PC(Two phase Commit)是一種,在分布式環(huán)境下,所有節(jié)點(diǎn)進(jìn)行事務(wù)提交,保持一致性的算法。
它通過引入一個(gè)協(xié)調(diào)者(Coordinator)來統(tǒng)一掌控所有參與者(Participant)的操作結(jié)果,并指示它們是否要把操作結(jié)果進(jìn)行真正的提交(commit)或者回滾(rollback)。
為什么叫兩階段提交?
顧名思義,2PC分為兩個(gè)階段:
畫外音:可以理解為單機(jī)事務(wù)的trx.exec()。
畫外音:可以理解為單機(jī)事務(wù)的trx.commit() 或者 trx.rollback()。
舉個(gè)栗子:
甲乙丙丁四人要組織一個(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è)事務(wù),甲乙丙均處于阻塞狀態(tài),算法無法繼續(xù)進(jìn)行;
提交階段
(1)協(xié)調(diào)者甲將收集到的結(jié)果通知給乙丙丁;
畫外音:什么時(shí)候通知,以及反饋結(jié)果如何,在此例中取決與丁的時(shí)間與決定,
(2)乙收到通知,并ack協(xié)調(diào)者;
(3)丙收到通知,并ack協(xié)調(diào)者;
(4)丁收到通知,并ack協(xié)調(diào)者;
畫外音:如果甲沒有收到所有ack,則分布式事務(wù)遲遲不會(huì)結(jié)束,下一輪投票則遲遲不會(huì)開展。
兩階段提交的缺陷?
2PC在執(zhí)行過程中,所有節(jié)點(diǎn)都處于阻塞狀態(tài),所有節(jié)點(diǎn)所持有的資源(例如數(shù)據(jù)庫數(shù)據(jù),本地文件等)都處于封鎖狀態(tài)。
典型情況為:
另外,如有協(xié)調(diào)者或者某個(gè)參與者出現(xiàn)了崩潰,為了避免整個(gè)算法處于一個(gè)完全阻塞狀態(tài),往往需要借助超時(shí)機(jī)制來將算法繼續(xù)向前推進(jìn)。
總的來說,2PC是一種比較保守并且低效的算法,分布式事務(wù)真的很難做。
【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流