分布式事務(wù)

大綱

1.本地事物
?- ACID
?- 本地事務(wù)模型
2.分布式事物
?- 分布式事務(wù)概念
?- 跨庫事務(wù)
?- 服務(wù)化事務(wù)
3.LCN框架及演示
4.分布式事物原理分析

1 本地事務(wù)
1.1ACID

原子性(Atomicity)
??即是數(shù)據(jù)庫一個(gè)事務(wù)內(nèi)的sql語句,要么全部成功,要么全部失敗。例如老李給胖子轉(zhuǎn)賬100元,需求上應(yīng)該是老李減去100元,胖子加上100元,流水記錄是100元,如果老李減去了100元后,事務(wù)提交失敗,則全部回滾,老李恢復(fù)100元(回滾操作在mysql中是通過日志來完成的(undo log))只有當(dāng)整個(gè)事務(wù)全成功了,轉(zhuǎn)賬才會(huì)完成。

一致性(Consistency)
??數(shù)據(jù)庫事務(wù)的一致性是指:在事務(wù)執(zhí)行前和執(zhí)行后,數(shù)據(jù)庫的數(shù)據(jù)完整性不被破壞.這個(gè)完整性是個(gè)抽象的說法,舉個(gè)例子在老李給胖子轉(zhuǎn)賬的事務(wù)中,老李-100,胖子+100,數(shù)據(jù)庫中的金錢總數(shù)保持了完整性。

例如在銀行的轉(zhuǎn)賬事務(wù)中,老李+100,胖子+100,滿足了原子性(事務(wù)的操作完整),但是違背了一致性(銀行轉(zhuǎn)賬的一致性要保證金錢總數(shù)不變)。

隔離性(Isolation)
數(shù)據(jù)庫事務(wù)有隔離性,讓并發(fā)的事務(wù)一個(gè)一個(gè)的執(zhí)行,達(dá)到串行的效果.但是這在并發(fā)中會(huì)很大的影響數(shù)據(jù)庫的性能,所以需要在安全與并發(fā)的效率之間尋求一個(gè)平衡。

持久性(Durability)
事務(wù)提交完成將永久性的改變數(shù)據(jù)庫,即使數(shù)據(jù)庫出錯(cuò)了,也不會(huì)丟失數(shù)據(jù)。

反過來可以理解為如果出了嚴(yán)重錯(cuò)誤,事務(wù)是無法提交完成的,但只要他提交完成就被持久化了。

1.2 本地事務(wù)模型

本地事務(wù)是基于鎖對(duì)并發(fā)的事務(wù)進(jìn)行一個(gè)一個(gè)執(zhí)行,以達(dá)到了串行執(zhí)行效果。

2 分布式事務(wù)
2.1 分布式事務(wù)概念

一個(gè)大的操作由兩個(gè)或者更多的小的操作共同完成。而這些小的操作又分布在不同的網(wǎng)絡(luò)主機(jī)上。這些操作,要么全部成功執(zhí)行,要么全部不執(zhí)行。

2.2 分布式事務(wù)場(chǎng)景一:跨庫事務(wù)

同時(shí)操作多少個(gè)數(shù)據(jù)源,這就是跨庫事務(wù)


image.png

難點(diǎn):
一個(gè)數(shù)據(jù)源對(duì)應(yīng)一個(gè)事務(wù),事務(wù)和事務(wù)之間是互相不可見,因此無法做到同時(shí)失敗,同時(shí)成功。
解決方案:
使用分布式事務(wù)解決分布式事務(wù)。
####### 2.3 服務(wù)化事務(wù)

image.png

特點(diǎn):
面向服務(wù)架構(gòu),微服務(wù)架構(gòu)中,把項(xiàng)目拆分一個(gè)個(gè)子項(xiàng)目,每一個(gè)項(xiàng)目都存在本地事務(wù),本地事務(wù)和其他服務(wù)器中的事務(wù)中相互隔離的關(guān)系。
存在問題:
無法保證多個(gè)項(xiàng)目中,一個(gè)操作要么都成功,要么都失敗。
解決方案:
使用分布式事務(wù),2PC可解決。

3 分布式事物事務(wù)模型
3.1 X/open

X/open組織制定分布式事務(wù)接口規(guī)范及事務(wù)模型

  • DTP(distributed transaction processing):事務(wù)模型
  • DTP XA 接口規(guī)范
3.2 DTP模型組件
  • 應(yīng)用程序:定義事務(wù)的邊界(事務(wù)的開始、結(jié)束)
  • 資源管理器:任何用來存儲(chǔ)數(shù)據(jù)的服務(wù)。
  • 事務(wù)管理器:監(jiān)控事務(wù)進(jìn)度,負(fù)責(zé)事務(wù)提交,回滾。
  • 通信資源管理器
  • 通信協(xié)議:負(fù)責(zé)事務(wù)模型之間的通信協(xié)議。
3.3 事務(wù)模型圖
image.png

全局事務(wù)樹模型:


image.png
3.4 XA規(guī)范

定義了事務(wù)管理器與資源管理器交互接口的規(guī)范。(事務(wù)注冊(cè),事務(wù)開始,回滾,提交......)

3.5 2PC

數(shù)據(jù)庫2PC(Two Phase Commit,兩階段提交)又叫XA Transaction,遵循強(qiáng)一致性,性能不高。兩階段提交是指將提交過程分為兩個(gè)階段,即準(zhǔn)備階段(投票階段)和提交階段(執(zhí)行階段)。兩階段提交流程:


image.png

應(yīng)用場(chǎng)景:

  • 強(qiáng)一致性
  • 分布式事務(wù)
4 CAP理論
4.1、Partition tolerance

先看 Partition tolerance,中文叫做"分區(qū)容錯(cuò)"。

大多數(shù)分布式系統(tǒng)都分布在多個(gè)子網(wǎng)絡(luò)。每個(gè)子網(wǎng)絡(luò)就叫做一個(gè)區(qū)(partition)。分區(qū)容錯(cuò)的意思是,區(qū)間通信可能失敗。比如,一臺(tái)服務(wù)器放在中國,另一臺(tái)服務(wù)器放在美國,這就是兩個(gè)區(qū),它們之間可能無法通信。

image

上圖中,G1 和 G2 是兩臺(tái)跨區(qū)的服務(wù)器。G1 向 G2 發(fā)送一條消息,G2 可能無法收到。系統(tǒng)設(shè)計(jì)的時(shí)候,必須考慮到這種情況。

一般來說,分區(qū)容錯(cuò)無法避免,因此可以認(rèn)為 CAP 的 P 總是成立。CAP 定理告訴我們,剩下的 C 和 A 無法同時(shí)做到。

4.2、Consistency

Consistency 中文叫做"一致性"。意思是,寫操作之后的讀操作,必須返回該值。舉例來說,某條記錄是 v0,用戶向 G1 發(fā)起一個(gè)寫操作,將其改為 v1。

image

接下來,用戶的讀操作就會(huì)得到 v1。這就叫一致性。

image

問題是,用戶有可能向 G2 發(fā)起讀操作,由于 G2 的值沒有發(fā)生變化,因此返回的是 v0。G1 和 G2 讀操作的結(jié)果不一致,這就不滿足一致性了。

image

為了讓 G2 也能變?yōu)?v1,就要在 G1 寫操作的時(shí)候,讓 G1 向 G2 發(fā)送一條消息,要求 G2 也改成 v1。

image

這樣的話,用戶向 G2 發(fā)起讀操作,也能得到 v1。

image
4.3、Availability

Availability 中文叫做"可用性",意思是只要收到用戶的請(qǐng)求,服務(wù)器就必須給出回應(yīng)。

用戶可以選擇向 G1 或 G2 發(fā)起讀操作。不管是哪臺(tái)服務(wù)器,只要收到請(qǐng)求,就必須告訴用戶,到底是 v0 還是 v1,否則就不滿足可用性。

4.4、Consistency 和 Availability 的矛盾

一致性和可用性,為什么不可能同時(shí)成立?答案很簡(jiǎn)單,因?yàn)榭赡芡ㄐ攀。闯霈F(xiàn)分區(qū)容錯(cuò))。

如果保證 G2 的一致性,那么 G1 必須在寫操作時(shí),鎖定 G2 的讀操作和寫操作。只有數(shù)據(jù)同步后,才能重新開放讀寫。鎖定期間,G2 不能讀寫,沒有可用性不。

如果保證 G2 的可用性,那么勢(shì)必不能鎖定 G2,所以一致性不成立。

綜上所述,G2 無法同時(shí)做到一致性和可用性。系統(tǒng)設(shè)計(jì)時(shí)只能選擇一個(gè)目標(biāo)。如果追求一致性,那么無法保證所有節(jié)點(diǎn)的可用性;如果追求所有節(jié)點(diǎn)的可用性,那就沒法做到一致性。

5 BASE理論
5.1 BASE理論概述

BASE:全稱:Basically Available(基本可用),Soft state(軟狀態(tài)),和 Eventually consistent(最終一致性)三個(gè)短語的縮寫,來自 ebay 的架構(gòu)師提出。

Base 理論是對(duì) CAP 中一致性和可用性權(quán)衡的結(jié)果,其來源于對(duì)大型互聯(lián)網(wǎng)分布式實(shí)踐的總結(jié),是基于 CAP 定理逐步演化而來的。其核心思想是:既是無法做到強(qiáng)一致性(Strong consistency),但每個(gè)應(yīng)用都可以根據(jù)自身的業(yè)務(wù)特點(diǎn),采用適當(dāng)?shù)姆绞絹硎瓜到y(tǒng)達(dá)到最終一致性(Eventual consistency)。

5.2特性

1 Basically Available(基本可用)

什么是基本可用呢?假設(shè)系統(tǒng),出現(xiàn)了不可預(yù)知的故障,但還是能用,相比較正常的系統(tǒng)而言:
響應(yīng)時(shí)間上的損失:正常情況下的搜索引擎 0.5 秒即返回給用戶結(jié)果,而基本可用的搜索引擎可以在 1 秒作用返回結(jié)果。
功能上的損失:在一個(gè)電商網(wǎng)站上,正常情況下,用戶可以順利完成每一筆訂單,但是到了大促期間,為了保護(hù)購物系統(tǒng)的穩(wěn)定性,部分消費(fèi)者可能會(huì)被引導(dǎo)到一個(gè)降級(jí)頁面。
2. Soft state(軟狀態(tài))
什么是軟狀態(tài)呢?相對(duì)于原子性而言,要求多個(gè)節(jié)點(diǎn)的數(shù)據(jù)副本都是一致的,這是一種 “硬狀態(tài)”。

軟狀態(tài)指的是:允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該狀態(tài)不影響系統(tǒng)的整體可用性,即允許系統(tǒng)在多個(gè)不同節(jié)點(diǎn)的數(shù)據(jù)副本存在數(shù)據(jù)延時(shí)。
3. Eventually consistent(最終一致性)
上面說軟狀態(tài),然后不可能一直是軟狀態(tài),必須有個(gè)時(shí)間期限。在期限過后,應(yīng)當(dāng)保證所有副本保持?jǐn)?shù)據(jù)一致性。從而達(dá)到數(shù)據(jù)的最終一致性。這個(gè)時(shí)間期限取決于網(wǎng)絡(luò)延時(shí),系統(tǒng)負(fù)載,數(shù)據(jù)復(fù)制方案設(shè)計(jì)等等因素。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容