先進的網(wǎng)站建設(shè)百度推廣客服電話人工服務(wù)
目錄
1.分布式事務(wù)問題
1.1本地事務(wù)
1.2分布式事務(wù)
2.理論基礎(chǔ)
2.1CAP定理
2.1.1一致性
2.1.2可用性
2.1.3分區(qū)容錯
2.1.4矛盾
2.2BASE理論
2.3解決分布式事務(wù)的思路
1.分布式事務(wù)問題
1.1本地事務(wù)
本地事務(wù),也就是傳統(tǒng)的單機事務(wù)。在傳統(tǒng)數(shù)據(jù)庫事務(wù)中,必須要滿足四個原則:
1.2分布式事務(wù)
分布式事務(wù),就是指不是在單個服務(wù)或單個數(shù)據(jù)庫架構(gòu)下,產(chǎn)生的事務(wù),例如:
-
跨數(shù)據(jù)源的分布式事務(wù)
-
跨服務(wù)的分布式事務(wù)
-
綜合情況
在數(shù)據(jù)庫水平拆分、服務(wù)垂直拆分之后,一個業(yè)務(wù)操作通常要跨多個數(shù)據(jù)庫、服務(wù)才能完成。例如電商行業(yè)中比較常見的下單付款案例,包括下面幾個行為:
-
創(chuàng)建新訂單
-
扣減商品庫存
-
從用戶賬戶余額扣除金額
完成上面的操作需要訪問三個不同的微服務(wù)和三個不同的數(shù)據(jù)庫。
訂單的創(chuàng)建、庫存的扣減、賬戶扣款在每一個服務(wù)和數(shù)據(jù)庫內(nèi)是一個本地事務(wù),可以保證ACID原
則。
但是當(dāng)我們把三件事情看做一個"業(yè)務(wù)",要滿足保證“業(yè)務(wù)”的原子性,要么所有操作全部成功,要
么全部失敗,不允許出現(xiàn)部分成功部分失敗的現(xiàn)象,這就是分布式系統(tǒng)下的事務(wù)了。
此時ACID難以滿足,這是分布式事務(wù)要解決的問題
1.3演示分布式事務(wù)問題
我們通過一個案例來演示分布式事務(wù)的問題:
1)創(chuàng)建數(shù)據(jù)庫,名為seata_demo,然后導(dǎo)入課前資料提供的SQL文件:
2)導(dǎo)入課前資料提供的微服務(wù):
微服務(wù)結(jié)構(gòu)如下:
其中:
seata-demo:父工程,負(fù)責(zé)管理項目依賴
-
account-service:賬戶服務(wù),負(fù)責(zé)管理用戶的資金賬戶。提供扣減余額的接口
-
storage-service:庫存服務(wù),負(fù)責(zé)管理商品庫存。提供扣減庫存的接口
-
order-service:訂單服務(wù),負(fù)責(zé)管理訂單。創(chuàng)建訂單時,需要調(diào)用account-service和storage-service
3)啟動nacos、所有微服務(wù)
4)測試下單功能,發(fā)出Post請求:
請求如下:
curl --location --request POST 'http://localhost:8082/order?userId=user202103032042012&commodityCode=100202003032041&count=20&money=200'
如圖:
測試發(fā)現(xiàn),當(dāng)庫存不足時,如果余額已經(jīng)扣減,并不會回滾,出現(xiàn)了分布式事務(wù)問題。
2.理論基礎(chǔ)
解決分布式事務(wù)問題,需要一些分布式系統(tǒng)的基礎(chǔ)知識作為理論指導(dǎo)。
2.1CAP定理
1998年,加州大學(xué)的計算機科學(xué)家 Eric Brewer 提出,分布式系統(tǒng)有三個指標(biāo)。
Consistency(一致性)
Availability(可用性)
Partition tolerance (分區(qū)容錯性)
?
它們的第一個字母分別是 C、A、P。
Eric Brewer 說,這三個指標(biāo)不可能同時做到。這個結(jié)論就叫做 CAP 定理。
2.1.1一致性
Consistency(一致性):用戶訪問分布式系統(tǒng)中的任意節(jié)點,得到的數(shù)據(jù)必須一致。
比如現(xiàn)在包含兩個節(jié)點,其中的初始數(shù)據(jù)是一致的:
當(dāng)我們修改其中一個節(jié)點的數(shù)據(jù)時,兩者的數(shù)據(jù)產(chǎn)生了差異:
要想保住一致性,就必須實現(xiàn)node01 到 node02的數(shù)據(jù) 同步:
2.1.2可用性
Availability (可用性):用戶訪問集群中的任意健康節(jié)點,必須能得到響應(yīng),而不是超時或拒絕。
如圖,有三個節(jié)點的集群,訪問任何一個都可以及時得到響應(yīng):
當(dāng)有部分節(jié)點因為網(wǎng)絡(luò)故障或其它原因無法訪問時,代表節(jié)點不可用:
2.1.3分區(qū)容錯
Partition(分區(qū)):因為網(wǎng)絡(luò)故障或其它原因?qū)е路植际较到y(tǒng)中的部分節(jié)點與其它節(jié)點失去連接,
形成獨立分區(qū)。
Tolerance(容錯):在集群出現(xiàn)分區(qū)時,整個系統(tǒng)也要持續(xù)對外提供服務(wù)
2.1.4矛盾
在分布式系統(tǒng)中,系統(tǒng)間的網(wǎng)絡(luò)不能100%保證健康,一定會有故障的時候,而服務(wù)有必須對外保
證服務(wù)。因此Partition Tolerance不可避免。
當(dāng)節(jié)點接收到新的數(shù)據(jù)變更時,就會出現(xiàn)問題了:
如果此時要保證一致性,就必須等待網(wǎng)絡(luò)恢復(fù),完成數(shù)據(jù)同步后,整個集群才對外提供服務(wù),服務(wù)
處于阻塞狀態(tài),不可用。
如果此時要保證可用性,就不能等待網(wǎng)絡(luò)恢復(fù),那node01、node02與node03之間就會出現(xiàn)數(shù)據(jù)不
一致。
也就是說,在P一定會出現(xiàn)的情況下,A和C之間只能實現(xiàn)一個。
2.2BASE理論
BASE理論是對CAP的一種解決思路,包含三個思想:
-
Basically Available (基本可用):分布式系統(tǒng)在出現(xiàn)故障時,允許損失部分可用性,即保證核心可用。
-
Soft State(軟狀態(tài)):在一定時間內(nèi),允許出現(xiàn)中間狀態(tài),比如臨時的不一致狀態(tài)。
-
Eventually Consistent(最終一致性):雖然無法保證強一致性,但是在軟狀態(tài)結(jié)束后,最終達(dá)到數(shù)據(jù)一致。
2.3解決分布式事務(wù)的思路
分布式事務(wù)最大的問題是各個子事務(wù)的一致性問題,因此可以借鑒CAP定理和BASE理論,有兩種解決思路:
-
AP模式:各子事務(wù)分別執(zhí)行和提交,允許出現(xiàn)結(jié)果不一致,然后采用彌補措施恢復(fù)數(shù)據(jù)即可,實現(xiàn)最終一致。
-
CP模式:各個子事務(wù)執(zhí)行后互相等待,同時提交,同時回滾,達(dá)成強一致。但事務(wù)等待過程中,處于弱可用狀態(tài)。
但不管是哪一種模式,都需要在子系統(tǒng)事務(wù)之間互相通訊,協(xié)調(diào)事務(wù)狀態(tài),也就是需要一個事務(wù)協(xié)調(diào)者(TC):
這里的子系統(tǒng)事務(wù),稱為分支事務(wù);有關(guān)聯(lián)的各個分支事務(wù)在一起稱為全局事務(wù)。