分布式事務(wù)
1.分布式事務(wù)問(wèn)題
1.1.本地事務(wù)
本地事務(wù),也就是傳統(tǒng)的單機(jī)事務(wù)。在傳統(tǒng)數(shù)據(jù)庫(kù)事務(wù)中,必須要滿足四個(gè)原則:

1.2.分布式事務(wù)
分布式事務(wù),就是指不是在單個(gè)服務(wù)或單個(gè)數(shù)據(jù)庫(kù)架構(gòu)下,產(chǎn)生的事務(wù),例如:
跨數(shù)據(jù)源的分布式事務(wù)
跨服務(wù)的分布式事務(wù)
綜合情況
在數(shù)據(jù)庫(kù)水平拆分、服務(wù)垂直拆分之后,一個(gè)業(yè)務(wù)操作通常要跨多個(gè)數(shù)據(jù)庫(kù)、服務(wù)才能完成。例如電商行業(yè)中比較常見(jiàn)的下單付款案例,包括下面幾個(gè)行為:
創(chuàng)建新訂單
扣減商品庫(kù)存
從用戶賬戶余額扣除金額
完成上面的操作需要訪問(wèn)三個(gè)不同的微服務(wù)和三個(gè)不同的數(shù)據(jù)庫(kù)。

訂單的創(chuàng)建、庫(kù)存的扣減、賬戶扣款在每一個(gè)服務(wù)和數(shù)據(jù)庫(kù)內(nèi)是一個(gè)本地事務(wù),可以保證ACID原則。
但是當(dāng)我們把三件事情看做一個(gè)"業(yè)務(wù)",要滿足保證“業(yè)務(wù)”的原子性,要么所有操作全部成功,要么全部失敗,不允許出現(xiàn)部分成功部分失敗的現(xiàn)象,這就是分布式系統(tǒng)下的事務(wù)了。
此時(shí)ACID難以滿足,這是分布式事務(wù)要解決的問(wèn)題
2.理論基礎(chǔ)
解決分布式事務(wù)問(wèn)題,需要一些分布式系統(tǒng)的基礎(chǔ)知識(shí)作為理論指導(dǎo)。
2.1.CAP定理
1998年,加州大學(xué)的計(jì)算機(jī)科學(xué)家 Eric Brewer 提出,分布式系統(tǒng)有三個(gè)指標(biāo)。
Consistency(一致性)
Availability(可用性)
Partition tolerance (分區(qū)容錯(cuò)性)

它們的第一個(gè)字母分別是 C、A、P。
Eric Brewer 說(shuō),這三個(gè)指標(biāo)不可能同時(shí)做到。這個(gè)結(jié)論就叫做 CAP 定理。
2.1.1.一致性
Consistency(一致性):用戶訪問(wèn)分布式系統(tǒng)中的任意節(jié)點(diǎn),得到的數(shù)據(jù)必須一致。
比如現(xiàn)在包含兩個(gè)節(jié)點(diǎn),其中的初始數(shù)據(jù)是一致的:
?當(dāng)我們修改其中一個(gè)節(jié)點(diǎn)的數(shù)據(jù)時(shí),兩者的數(shù)據(jù)產(chǎn)生了差異:

?要想保住一致性,就必須實(shí)現(xiàn)node01 到 node02的數(shù)據(jù) 同步:

2.1.2.可用性
Availability (可用性):用戶訪問(wèn)集群中的任意健康節(jié)點(diǎn),必須能得到響應(yīng),而不是超時(shí)或拒絕。
如圖,有三個(gè)節(jié)點(diǎn)的集群,訪問(wèn)任何一個(gè)都可以及時(shí)得到響應(yīng):

?當(dāng)有部分節(jié)點(diǎn)因?yàn)榫W(wǎng)絡(luò)故障或其它原因無(wú)法訪問(wèn)時(shí),代表節(jié)點(diǎn)不可用:

2.1.3.分區(qū)容錯(cuò)
Partition(分區(qū)):因?yàn)榫W(wǎng)絡(luò)故障或其它原因?qū)е路植际较到y(tǒng)中的部分節(jié)點(diǎn)與其它節(jié)點(diǎn)失去連接,形成獨(dú)立分區(qū)。

Tolerance(容錯(cuò)):在集群出現(xiàn)分區(qū)時(shí),整個(gè)系統(tǒng)也要持續(xù)對(duì)外提供服務(wù)
2.1.4.矛盾
在分布式系統(tǒng)中,系統(tǒng)間的網(wǎng)絡(luò)不能100%保證健康,一定會(huì)有故障的時(shí)候,而服務(wù)有必須對(duì)外保證服務(wù)。因此Partition Tolerance不可避免。
當(dāng)節(jié)點(diǎn)接收到新的數(shù)據(jù)變更時(shí),就會(huì)出現(xiàn)問(wèn)題了:

如果此時(shí)要保證一致性,就必須等待網(wǎng)絡(luò)恢復(fù),完成數(shù)據(jù)同步后,整個(gè)集群才對(duì)外提供服務(wù),服務(wù)處于阻塞狀態(tài),不可用。
如果此時(shí)要保證可用性,就不能等待網(wǎng)絡(luò)恢復(fù),那node01、node02與node03之間就會(huì)出現(xiàn)數(shù)據(jù)不一致。
也就是說(shuō),在P一定會(huì)出現(xiàn)的情況下,A和C之間只能實(shí)現(xiàn)一個(gè)。
2.2.BASE理論
BASE理論是對(duì)CAP的一種解決思路,包含三個(gè)思想:
Basically Available (基本可用):分布式系統(tǒng)在出現(xiàn)故障時(shí),允許損失部分可用性,即保證核心可用。
Soft State(軟狀態(tài)):在一定時(shí)間內(nèi),允許出現(xiàn)中間狀態(tài),比如臨時(shí)的不一致?tīng)顟B(tài)。
Eventually Consistent(最終一致性):雖然無(wú)法保證強(qiáng)一致性,但是在軟狀態(tài)結(jié)束后,最終達(dá)到數(shù)據(jù)一致。
2.3.解決分布式事務(wù)的思路
分布式事務(wù)最大的問(wèn)題是各個(gè)子事務(wù)的一致性問(wèn)題,因此可以借鑒CAP定理和BASE理論,有兩種解決思路:
AP模式:各子事務(wù)分別執(zhí)行和提交,允許出現(xiàn)結(jié)果不一致,然后采用彌補(bǔ)措施恢復(fù)數(shù)據(jù)即可,實(shí)現(xiàn)最終一致。
CP模式:各個(gè)子事務(wù)執(zhí)行后互相等待,同時(shí)提交,同時(shí)回滾,達(dá)成強(qiáng)一致。但事務(wù)等待過(guò)程中,處于弱可用狀態(tài)。
但不管是哪一種模式,都需要在子系統(tǒng)事務(wù)之間互相通訊,協(xié)調(diào)事務(wù)狀態(tài),也就是需要一個(gè)事務(wù)協(xié)調(diào)者(TC):

?這里的子系統(tǒng)事務(wù),稱為分支事務(wù);有關(guān)聯(lián)的各個(gè)分支事務(wù)在一起稱為全局事務(wù)。