【分布式】一致性協(xié)議
一、前言
繼續(xù)前面的學(xué)習(xí),這篇我們來學(xué)習(xí)在分布式系統(tǒng)中最重要的一塊,一致性協(xié)議,其中就包括了大名鼎鼎的Paxos算法。
二、2PC與3PC
在分布式系統(tǒng)中,每一個(gè)機(jī)器節(jié)點(diǎn)雖然能夠明確知道自己在進(jìn)行事務(wù)操作過程中的結(jié)果是成功或是失敗,但是卻無法直接獲取到其他分布式節(jié)點(diǎn)的操作結(jié)果,因此,當(dāng)一個(gè)事務(wù)操作需要跨越多個(gè)分布式節(jié)點(diǎn)的時(shí)候,為了保持事務(wù)處理的ACID的特性,需要引入?yún)f(xié)調(diào)者的組件來統(tǒng)一調(diào)度所有分布式節(jié)點(diǎn)的執(zhí)行邏輯,而被調(diào)度的節(jié)點(diǎn)則被稱為參與者,協(xié)調(diào)者負(fù)責(zé)調(diào)度參與者的行為并最終決定這些參與者是否要把事務(wù)真正進(jìn)行提交,基于這個(gè)思想,衍生出了二階段提交和三階段提交兩種協(xié)議。
2.1 2PC
2PC為Two-Phase Commit的簡(jiǎn)寫,為二階段提交協(xié)議將事務(wù)的提交過程分成了兩個(gè)階段來進(jìn)行處理,并執(zhí)行如下流程:
階段一:提交事務(wù)請(qǐng)求
① 事務(wù)詢問,協(xié)調(diào)者向所有的參與者發(fā)送事務(wù)內(nèi)容,詢問是否可以執(zhí)行事務(wù)提交操作,并開始等待各參與者的響應(yīng)。
② 執(zhí)行事務(wù),各參與者節(jié)點(diǎn)執(zhí)行事務(wù)操作(已經(jīng)執(zhí)行),并將Undo和Redo信息記入事務(wù)日志中。
③ 各參與者向協(xié)調(diào)者反饋事務(wù)詢問的響應(yīng),如果參與者成功執(zhí)行了事務(wù)操作,那么就反饋給協(xié)調(diào)者Yes響應(yīng),表示事務(wù)可以執(zhí)行;如果參與者沒有成功執(zhí)行事務(wù),那么就反饋給協(xié)調(diào)者No響應(yīng),表示事務(wù)不可以執(zhí)行。
第一階段近似于是協(xié)調(diào)者組織各參與者對(duì)一次事務(wù)操作的投票表態(tài)的過程,因此二階段提交協(xié)議的階段一也被稱為投票階段。
階段二:執(zhí)行事務(wù)提交
協(xié)調(diào)者會(huì)根據(jù)各參與者的反饋情況來決定最終是否可以進(jìn)行事務(wù)提交操作,正常情況包含如下兩種可能:
1. 執(zhí)行事務(wù)提交,假如協(xié)調(diào)者從所有的參與者獲得的反饋都是Yes響應(yīng),那么就會(huì)執(zhí)行事務(wù)提交。
① 發(fā)送提交請(qǐng)求,協(xié)調(diào)者向所有參與者節(jié)點(diǎn)發(fā)出Commit請(qǐng)求。
② 事務(wù)提交,參與者接收到Commit請(qǐng)求后,會(huì)正式執(zhí)行事務(wù)提交操作,并在完成提交之后釋放在整個(gè)事務(wù)執(zhí)行期間占用的事務(wù)資源。
③ 反饋事務(wù)提交結(jié)果,參與者在完成事務(wù)提交之后,向協(xié)調(diào)者發(fā)送Ack消息。
④ 完成事務(wù),協(xié)調(diào)者接收到所有參與者反饋的Ack消息后,完成事務(wù)。
2. 中斷事務(wù),假如任意一個(gè)參與者向協(xié)調(diào)者反饋了No響應(yīng),或者在等待超時(shí)之后,協(xié)調(diào)者尚無法接收到參與者的反饋響應(yīng),就會(huì)中斷事務(wù)。
① 發(fā)送回滾請(qǐng)求,協(xié)調(diào)者向所有參與者節(jié)點(diǎn)發(fā)出Rollback請(qǐng)求。
② 事務(wù)回滾,參與者接收到Rollback請(qǐng)求后,會(huì)利用其在階段一中記錄的Undo信息來執(zhí)行事務(wù)回滾,并在完成回滾之后釋放在整個(gè)事務(wù)執(zhí)行期間占用的資源。
③ 反饋事務(wù)回滾結(jié)果,參與者在完成事務(wù)回滾后,向協(xié)調(diào)者發(fā)送Ack消息。
④ 中斷事務(wù),協(xié)調(diào)者接收所有參與者反饋的Ack消息后,完成事務(wù)中斷。
二階段提交協(xié)議的優(yōu)點(diǎn):原理簡(jiǎn)單,實(shí)現(xiàn)方便。缺點(diǎn):同步阻塞,單點(diǎn)問題,數(shù)據(jù)不一致,太過保守。
同步阻塞:在二階段