事務(wù)是數(shù)據(jù)庫執(zhí)行過程中的一個邏輯單位脯丝,由一個有限的數(shù)據(jù)庫操作序列構(gòu)成脓钾。
事務(wù)有四個特性尼夺,習慣上被稱為 ACID 特性:
- Atomicity(原子性)
- Consistency(一致性)
- Isolation(隔離性)
- Durability(持久性)
本地事物
在系統(tǒng)發(fā)展初期斩跌,單體應(yīng)用對應(yīng)一個數(shù)據(jù)庫绍些,整個服務(wù)操作只涉及一個數(shù)據(jù)庫資源,通過數(shù)據(jù)庫自帶的事務(wù)很容易實現(xiàn) ACID耀鸦,這類基于單個服務(wù)單一數(shù)據(jù)庫資源訪問的事務(wù)柬批,被稱為本地事務(wù)(Local Transaction)。
分布式事務(wù)
隨著互聯(lián)網(wǎng)的發(fā)展袖订,微服務(wù)架構(gòu)大規(guī)模的普及氮帐,軟件系統(tǒng)由原來的單體應(yīng)用轉(zhuǎn)變?yōu)榉植际綉?yīng)用。分布式系統(tǒng)一般由多個獨立的子系統(tǒng)組成洛姑,多個子系統(tǒng)通過網(wǎng)絡(luò)通信互相協(xié)作配合完成各個功能上沐。
分布式事務(wù)是指事務(wù)的參與者、支持事務(wù)的服務(wù)器楞艾、資源服務(wù)器以及事務(wù)管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點之上参咙。比如在一個電商系統(tǒng)中,一條訂單的生成涉及庫存硫眯、訂單蕴侧、支付等不同的服務(wù),不同的服務(wù)之間要么全成功两入、要么全失敗净宵,保證事務(wù)的 ACID 特性。
本質(zhì)上來說裹纳,分布式事務(wù)就是為了保證不同數(shù)據(jù)庫的數(shù)據(jù)一致性择葡。
在分布式系統(tǒng)中數(shù)據(jù)一致性又可以劃分出多個一致性模型
強一致性:任何一次讀都能讀到某個數(shù)據(jù)的最近一次寫的數(shù)據(jù)。系統(tǒng)中的所有進程痊夭,看到的操作順序刁岸,都和全局時鐘下的順序一致。簡言之她我,在任意時刻虹曙,所有節(jié)點中的數(shù)據(jù)是一樣的迫横。
弱一致性:數(shù)據(jù)更新后,如果能容忍后續(xù)的訪問只能訪問到部分或者全部訪問不到酝碳,則是弱一致性矾踱。
最終一致性:不保證在任意時刻任意節(jié)點上的同一份數(shù)據(jù)都是相同的,但是隨著時間的遷移疏哗,不同節(jié)點上的同一份數(shù)據(jù)總是在向趨同的方向變化呛讲。簡單說,就是在一段時間后返奉,節(jié)點間的數(shù)據(jù)會最終達到一致狀態(tài)贝搁。
在解決分布式事物的數(shù)據(jù)一致性問題上,產(chǎn)生了多個相關(guān)的理論芽偏。
CAP 理論
CAP 定理又被稱作布魯爾定理雷逆,是加州大學的計算機科學家布魯爾在 2000 年提出的一個猜想。2002 年污尉,麻省理工學院的賽斯·吉爾伯特和南习蛘埽·林奇發(fā)表了布魯爾猜想的證明,使之成為分布式計算領(lǐng)域公認的一個定理被碗。
- C : Consistency 一致性 , 所有實例節(jié)點同一時間看到是相同的數(shù)據(jù)
- A : Availability 可用性 , 不管是否成功某宪,確保每一個請求都能接收到響應(yīng)
- P : Partition tolerance 分區(qū)容錯性 , 系統(tǒng)任意分區(qū)后,在網(wǎng)絡(luò)故障時锐朴,仍能操作
CAP 理論是指在一個分布式系統(tǒng)(指互相連接并共享數(shù)據(jù)的節(jié)點的集合)中兴喂,當涉及讀寫操作時,只能保證一致性焚志、可用性瞻想、分區(qū)容錯性者中的兩個,另外一個必須被犧牲。
在真實的分布式環(huán)境下滴肿,如果我們選擇了 CA(一致性 + 可用性) 而放棄了 P(分區(qū)容錯性),那么當發(fā)生分區(qū)現(xiàn)象時泼差,為了保證 C(一致性),系統(tǒng)需要禁止寫入堆缘,當有寫入請求時滔灶,系統(tǒng)返回 error(例如,當前系統(tǒng)不允許寫入)吼肥,這又和 A(可用性) 沖突了麻车,因為 A(可用性)要求返回 no error 和 no timeout。因此雖然在 CAP 理論定義是三個要素中只能取兩個动猬,但放到分布式環(huán)境下來,必須選擇 P(分區(qū)容錯)要素表箭,因為網(wǎng)絡(luò)本身無法做到 100% 可靠赁咙,有可能出故障,所以分區(qū)是一個必然的現(xiàn)象免钻。
也就說在真是環(huán)境下我們只能選擇 CP(一致性 + 分區(qū)容錯性) 或者 AP (可用性 + 分區(qū)容錯性)架構(gòu)彼水,在一致性和可用性做折中選擇极舔。
雖然 CAP 理論告訴我們分布式系統(tǒng)只能選擇 AP 或者 CP,但實際上并不是說整個系統(tǒng)只能選擇 AP 或者 CP姆怪,在 CAP 理論落地實踐時,我們需要將系統(tǒng)內(nèi)的數(shù)據(jù)按照不同的應(yīng)用場景和要求進行分類稽揭,每類數(shù)據(jù)選擇不同的策略(CP 還是 AP),而不是直接限定整個系統(tǒng)所有數(shù)據(jù)都是同一策略事镣。
BASE 理論--CAP 理論的延伸
由于在分布式系統(tǒng)中 C、A揪胃、P 三者都無法拋棄,但 CAP 定理限制三者無法同時滿足随闪,這種情況,我們會選擇盡量靠近 CAP 定理铐伴,即盡量讓 C、A当宴、P 都滿足泽疆,在此所趨下户矢,出現(xiàn)了 BASE 定理殉疼。
BASE 是 Basically Available(基本可用)捌年、Soft state(軟狀態(tài))和 Eventually consistent (最終一致性)三個短語的縮寫驱证。核心思想是即使無法做到強一致性(CAP 的一致性就是強一致性)延窜,但應(yīng)用可以采用適合的方式達到最終一致性抹锄。
- BA:Basically Available 基本可用,分布式系統(tǒng)在出現(xiàn)故障的時候伙单,允許損失部分可用性,即保證核心可用吻育。
電商大促時,為了應(yīng)對訪問量激增布疼,部分用戶可能會被引導(dǎo)到降級頁面,服務(wù)層也可能只提供降級服務(wù)游两。這就是損失部分可用性的體現(xiàn)。 - S:Soft State 軟狀態(tài)贱案,允許系統(tǒng)存在中間狀態(tài),而該中間狀態(tài)不會影響系統(tǒng)整體可用性宝踪。
分布式存儲中一般一份數(shù)據(jù)至少會有三個副本,允許不同節(jié)點間副本同步的延時就是軟狀態(tài)的體現(xiàn)瘩燥。mysql replication 的異步復(fù)制也是一種體現(xiàn)。 - E: Eventual Consistency 最終一致性厉膀, 系統(tǒng)中的所有數(shù)據(jù)副本經(jīng)過一定時間后,最終能夠達到一致的狀態(tài)。
BASE 理論本質(zhì)上是對 CAP 的延伸和補充卓鹿,更具體地說,是對 CAP 中 AP 方案的一個補充吟孙。
BASE和ACID的區(qū)別與聯(lián)系
- ACID是傳統(tǒng)數(shù)據(jù)庫常用的設(shè)計理念, 追求強一致性模型聚蝶。
- BASE支持的是大型分布式系統(tǒng)藻治,提出通過犧牲強一致性獲得高可用性
ACID和BASE代表了兩種截然相反的設(shè)計哲學。
總的來說桩卵,BASE 理論面向大型高可用可擴展的分布式系統(tǒng),與ACID這種強一致性模型不同雏节,常常是犧牲強一致性來獲得可用性,并允許數(shù)據(jù)在一段時間是不一致的钩乍。雖然兩者處于(一致性-可用性)分布圖的兩級,但兩者并不是孤立的寥粹,對于分布式系統(tǒng)來說,往往依據(jù)業(yè)務(wù)的不同和使用的系統(tǒng)組件不同涝涤,而需要靈活的調(diào)整一致性要求,也因此妄痪,常常會組合使用ACID和BASE。
柔性事務(wù)
不同于 ACID 的剛性事務(wù)裳瘪,在分布式場景下基于 BASE 理論,就出現(xiàn)了柔性事務(wù)的概念彭羹。柔性事務(wù)下,在不影響系統(tǒng)整體可用性的情況下(Basically Available 基本可用)派殷,允許系統(tǒng)存在數(shù)據(jù)不一致的中間狀態(tài)(Soft State 軟狀態(tài))墓阀,在經(jīng)過數(shù)據(jù)同步的延時之后毡惜,最終數(shù)據(jù)能夠達到一致斯撮。并不是完全放棄了 ACID,而是通過放寬一致性要求勿锅,借助本地事務(wù)來實現(xiàn)最終分布式事務(wù)一致性的同時也保證系統(tǒng)的吞吐枣氧。