【分布式】一致性協(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ù)不一致,太過保守。

同步阻塞:在二階段