一文讀懂分布式事務(wù)原理
上一篇文章《3分鐘讀懂分布式CAP理論》中,我們講到了CAP理論的特點,三者中只能存兩。而基于分布式系統(tǒng)的特點,分區(qū)容錯性是必要的選擇。所以我們只能在CP與AP兩者之間做權(quán)衡。而BASE理論在此之上進行了擴展,放寬了強一致性的保證,通過最終一致性來盡可能提高服務(wù)的可用性。
BASE理論
Base理論組成
1.Basically Available:(基本可用)
2.Soft state(軟狀態(tài))
3.Eventually consistent(最終一致性)
Base理論由這3個特性組成,什么意思呢,別急,來讓我們看一則故事吧。
新龜兔賽跑
動物森林新一年度的賽跑大賽開始了, 與 再次報名了比賽,熊二與鴿子每人負責一只,進行實時播報。這時鴿子不愧它的名字,它鴿了。播報員少了一個,比賽要不要繼續(xù),那必須的呀(這就是基本可用,碰到故障時,允許損失部分可用功能,保證核心功能可用)。
與 再次跑開了差距,熊二只有一只熊,他先采訪完兔子,才能掉過頭采訪烏龜,整合完兩人的狀況后,再統(tǒng)一向觀眾播報。這就導致他播報的不是最新的狀況,他在鏡頭前說兔子已經(jīng)跑到了操場附近,實際上兔子又在哪睡著了。(這就是軟狀態(tài),允許系統(tǒng)中存在中間狀態(tài),這個狀態(tài)不影響系統(tǒng)可用性)
經(jīng)過一場激烈的角逐,最終烏龜還是戰(zhàn)勝了兔子,熊二也終于完成播報,把最終的結(jié)果呈現(xiàn)給了觀眾。(這就是最終一致性,經(jīng)過一段時間后,所有節(jié)點數(shù)據(jù)都將會達到一致)
說了上面的理論,讓我們來看看對于保證CP與AP都有哪些實現(xiàn)方式吧。
基于 XA 協(xié)議的兩階段提交
為了保持CP, 基于XA協(xié)議兩階段提交的分布式事務(wù)被提了出來。原理很簡單,我專門獨立出來一個協(xié)調(diào)者,它就對事務(wù)進行統(tǒng)一管理,其他啥事都丟給參與者去做。大家都知道《紅樓夢》里面,秦可卿死后,王熙鳳協(xié)理寧國府這件事吧。王熙鳳就是這個協(xié)調(diào)者,她安排的吹號子的、撒紙錢的、哭喪的都是參與者。
階段一:王熙鳳首先問這幾個參與者,你們都知道要干啥了嗎?能開始干了嗎?參與者都回答了yes,才能下一步,只要有一個人回答No,就停止下一步。
階段二:王熙鳳給這些撒紙錢,哭喪、吹喇叭的發(fā)出具體指令,動起來。這些下人(參與者),把執(zhí)行的結(jié)果同步給她。如果發(fā)現(xiàn)有人執(zhí)行出錯了,她直接叫所有人停下手中所有動作,回寧國府重新開始(回滾)。
這個二階段提交的缺點也很明顯,階段一完成了,王熙鳳有事情走開了(協(xié)調(diào)者宕機),作為下人就只能一直在邊上等她回來,執(zhí)行階段二,不敢離開也不知道什么時候能離開(阻塞住了)。

三階段提交協(xié)議
我們充滿的王熙鳳肯定想到了上面的問題,所以她想出了更好的解決方案——三階段提交。
第一階段:跟上面一模一樣,也是王熙鳳大姐詢問下人們能干活了嗎
第二階段:王熙鳳大姐發(fā)出執(zhí)行讓下人們動起來
第三階段:下人們?nèi)绻l(fā)現(xiàn)聯(lián)系不上王熙鳳,就停止手中的活回去寧國府(回滾)。王熙鳳如果發(fā)現(xiàn)其中一個下人聯(lián)系不上了,就給所有人發(fā)通知,回寧國府重新從長計議(回滾)。
