分布式事務(wù)和CAP,BASE理論(一)

分布式事務(wù)

對(duì)于單機(jī)系統(tǒng)我們很容易實(shí)現(xiàn)一套滿足ACID的事務(wù)處理系統(tǒng),但是在分布式數(shù)據(jù)庫中枪芒,數(shù)字分散在各臺(tái)不同的機(jī)器上边坤,如何對(duì)這些數(shù)據(jù)進(jìn)行分布式的事務(wù)處理具有非常大的調(diào)整。在分布式環(huán)境中會(huì)碰到很多問題讼稚,比如機(jī)器宕機(jī)和各種網(wǎng)絡(luò)異常等括儒。雖然問題很多,但是為了保證分布式應(yīng)用程序的可靠性锐想,分布式事務(wù)是無法回避的帮寻。
分布式事務(wù)是指事務(wù)的參與者,支持事務(wù)的服務(wù)器赠摇,資源服務(wù)器以及事務(wù)管理器分別位于分布式系統(tǒng)的不同節(jié)點(diǎn)上固逗。一個(gè)分布式事務(wù)中會(huì)涉及多個(gè)數(shù)據(jù)源或業(yè)務(wù)系統(tǒng)的操作。

分布式事務(wù)場(chǎng)景

一個(gè)跨銀行的轉(zhuǎn)賬操作涉及調(diào)用兩個(gè)異地的銀行服務(wù)蝉稳,其中一個(gè)是本地銀行提供的取款服務(wù)抒蚜,另一個(gè)則是目標(biāo)銀行提供的存款服務(wù),這兩個(gè)服務(wù)本身是無狀態(tài)并且是相互獨(dú)立的耘戚,共同構(gòu)成了一個(gè)完整的分布式事務(wù)嗡髓。如果從本地銀行取款成功,但是因?yàn)槟撤N原因存款服務(wù)失敗了收津,那么就必須回滾到取款前的狀態(tài)饿这,否則用戶可能會(huì)發(fā)現(xiàn)自己的錢消失了。

CAP和BASE理論

對(duì)于本地事務(wù)或集中式事務(wù)處理系統(tǒng)撞秋,顯然我們可以采用被實(shí)踐證明很成熟的ACID模型來保證數(shù)據(jù)的嚴(yán)格一致性长捧。但是隨著分布式事務(wù)的出現(xiàn),傳統(tǒng)的單機(jī)事務(wù)已經(jīng)無法勝任了吻贿。特別是對(duì)于高并發(fā)的互聯(lián)網(wǎng)分布式系統(tǒng)來說串结,如果我們期望實(shí)現(xiàn)一套嚴(yán)格滿足ACID特性的分布式事務(wù),很可能出現(xiàn)在系統(tǒng)可用性和嚴(yán)格一致性之間的沖突----因?yàn)楫?dāng)我們要求分布式系統(tǒng)具有嚴(yán)格一致性時(shí),就很可能會(huì)犧牲掉系統(tǒng)的可用性肌割。但是卧蜓,可用性又是所有消費(fèi)者不允許我們討價(jià)還價(jià)的系統(tǒng)屬性。而對(duì)于一致性則是消費(fèi)者對(duì)一個(gè)軟件系統(tǒng)的剛需把敞。因此弥奸,在可用性和一致性之間我們無法存在一個(gè)兩全其美的方案,如何構(gòu)建一個(gè)兼顧可用性和一致性的分布式系統(tǒng)呢奋早?于是出現(xiàn)了CAP和BASE理論盛霎。

CAP理論

根據(jù)CAP理論,一個(gè)分布式系統(tǒng)不可能同時(shí)滿足一致性(C:Consistency),可用性(A:Availability)和分區(qū)容錯(cuò)性(P:Partition tolerance)這三個(gè)基本需求耽装,最多只能同時(shí)滿足其中的兩項(xiàng)愤炸。

一致性

在分布式環(huán)境中,一致性指數(shù)據(jù)在多個(gè)副本之間保持一致的特性剂邮。當(dāng)一個(gè)系統(tǒng)在數(shù)據(jù)一致的狀態(tài)下執(zhí)行更新操作后摇幻,應(yīng)該保證系統(tǒng)的數(shù)據(jù)仍然處于一致的狀態(tài)。
對(duì)于一個(gè)將數(shù)據(jù)副本分布在不同分布式節(jié)點(diǎn)上的系統(tǒng)來說挥萌,如果對(duì)第一個(gè)節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行了更新操作并且更新成功后绰姻,并沒有使其它的節(jié)點(diǎn)上的數(shù)據(jù)得到相應(yīng)的更新,于是對(duì)其它節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行讀取的時(shí)候引瀑,獲取的依然是老的數(shù)據(jù)(臟數(shù)據(jù))狂芋,這就是典型的分布式數(shù)據(jù)不一致的情況。在分布式系統(tǒng)中如果能做到針對(duì)一個(gè)數(shù)據(jù)項(xiàng)的更新操作執(zhí)行成功后憨栽,所有的用戶都可以讀取到最新的值帜矾,那么這樣的系統(tǒng)就被認(rèn)為具有強(qiáng)一致性(或嚴(yán)格的一致性)。

可用性

可用性是指系統(tǒng)提供的服務(wù)必須一致處于可用的狀態(tài)屑柔,對(duì)于用戶的每一個(gè)操作請(qǐng)求總是在有限的時(shí)間內(nèi)返回結(jié)果屡萤。
“有限的時(shí)間內(nèi)”是指,對(duì)于用戶的一個(gè)操作的請(qǐng)求掸宛,系統(tǒng)必須能夠在指定的時(shí)間(即響應(yīng)時(shí)間)內(nèi)返回對(duì)應(yīng)的處理結(jié)果死陆,如果超過了這個(gè)時(shí)間范圍,那么系統(tǒng)就被認(rèn)為是不可用的唧瘾。而且措译,“有限的時(shí)間內(nèi)”是一個(gè)系統(tǒng)設(shè)計(jì)之初就設(shè)定好的系統(tǒng)運(yùn)行指標(biāo),不同的系統(tǒng)之間會(huì)有很大的不同饰序。比如领虹,在支付系統(tǒng)中要求能夠在3秒返回,這樣不會(huì)影響用戶的體驗(yàn)求豫。而在搜索引擎中塌衰,比如Google要在0.3秒鐘返回上千萬個(gè)檢索結(jié)果诉稍,否則用戶會(huì)很失望,影響用戶的體驗(yàn)猾蒂。所以均唉,“有限的時(shí)間內(nèi)”在不同的系統(tǒng)差別很大。
“返回結(jié)果”是可用性另一個(gè)非常重要的指標(biāo)肚菠,它要求系統(tǒng)在完成對(duì)用戶請(qǐng)求的處理后,返回一個(gè)正常的響應(yīng)結(jié)果罩缴。正常的響應(yīng)結(jié)果通常能夠明確地反映出對(duì)請(qǐng)求的處理結(jié)果蚊逢,即成功或失敗,而不是一個(gè)令用戶感到困惑的結(jié)果箫章。比如烙荷,返回結(jié)果是一個(gè)系統(tǒng)錯(cuò)誤,如“OutOfMemoryError”等提示語檬寂,那么我們就認(rèn)為此時(shí)這個(gè)系統(tǒng)不可用终抽。

分區(qū)容錯(cuò)性

約束了一個(gè)分布式系統(tǒng)需要具有如下特征:分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)分區(qū)故障的時(shí)候,需要能夠保證對(duì)外提供滿足一致性和可用性的服務(wù)桶至,除非整個(gè)網(wǎng)絡(luò)環(huán)境都發(fā)送了故障昼伴。
網(wǎng)絡(luò)分區(qū)是指在分布式系統(tǒng)中,不同的節(jié)點(diǎn)分布在不同的自網(wǎng)絡(luò)(機(jī)房或異地網(wǎng)絡(luò)等)中镣屹,由于一些特殊的原因?qū)е逻@些自網(wǎng)絡(luò)之間出現(xiàn)網(wǎng)絡(luò)不連通的狀況圃郊,但是各個(gè)自網(wǎng)絡(luò)的內(nèi)部網(wǎng)絡(luò)是正常的,這樣會(huì)導(dǎo)致整個(gè)系統(tǒng)的網(wǎng)絡(luò)被切分成了若干孤立的區(qū)域女蜈。


CAP定理.png

CAP定理應(yīng)用

放棄CAP定理 說明
放棄P 如果希望能夠避免系統(tǒng)出現(xiàn)分區(qū)容錯(cuò)性的問題持舆,簡(jiǎn)單做法就是將所有的數(shù)據(jù)(或者那些僅僅與事務(wù)相關(guān)的數(shù)據(jù))都放到一個(gè)分布式節(jié)點(diǎn)上。這樣的做法雖然無法100%地保證系統(tǒng)不會(huì)出錯(cuò)伪窖,但至少不會(huì)碰到由于網(wǎng)絡(luò)分區(qū)帶來的負(fù)面影響逸寓。但同時(shí)需要注意的是,放棄P就放棄了系統(tǒng)的可擴(kuò)展性
放棄A 相對(duì)于放棄“分區(qū)容錯(cuò)性”來說覆山,放棄可用性則正好相反竹伸,做法是一旦系統(tǒng)遇到網(wǎng)絡(luò)分區(qū)或其他故障時(shí),那么受到影響的服務(wù)需要等待一定的時(shí)間汹买,因此在等待期間系統(tǒng)無法對(duì)外提供正常的服務(wù)佩伤,即不可用
放棄C 這里的放棄一致性,并不是完全不要數(shù)據(jù)的一致性了晦毙,如果這樣的話生巡,那么系統(tǒng)的數(shù)據(jù)就都沒有意義了,整個(gè)系統(tǒng)就沒有意義了见妒。事實(shí)上孤荣,放棄一致性指的是放棄數(shù)據(jù)的強(qiáng)一致性,而保留數(shù)據(jù)的最終一致性。這樣的系統(tǒng)無法保證數(shù)據(jù)保持實(shí)時(shí)一致性盐股,但是能夠保證的是:數(shù)據(jù)最終會(huì)達(dá)到一致的狀態(tài)钱豁,這就引入了一個(gè)時(shí)間窗口的概念,具體多久能夠達(dá)到數(shù)據(jù)一致性取決于系統(tǒng)的設(shè)計(jì)疯汁,主要包括數(shù)據(jù)副本在不同節(jié)點(diǎn)之間的復(fù)制時(shí)間長(zhǎng)短

CAP定理結(jié)論

一個(gè)分布式系統(tǒng)不可能同時(shí)滿足一致性牲尺,可用性和分區(qū)容錯(cuò)性這三個(gè)需求。另一個(gè)方面幌蚊,對(duì)于一個(gè)分布式系統(tǒng)而言谤碳,分區(qū)容錯(cuò)性可以說是一個(gè)最基本的要求。因?yàn)榧热皇且粋€(gè)分布式系統(tǒng)溢豆,那么必然出現(xiàn)子網(wǎng)絡(luò)蜒简,網(wǎng)絡(luò)問題是一個(gè)必定會(huì)出現(xiàn)的異常情況,因此分區(qū)容錯(cuò)性也就成為了一個(gè)分布式系統(tǒng)必然要面對(duì)和解決的問題漩仙。因此搓茬,對(duì)于分布式系統(tǒng)而言,我們要把精力用在如何根據(jù)業(yè)務(wù)特點(diǎn)在C(一致性)和A(可用性)之間尋求平衡队他。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卷仑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子漱挎,更是在濱河造成了極大的恐慌系枪,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磕谅,死亡現(xiàn)場(chǎng)離奇詭異私爷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)膊夹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門衬浑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人放刨,你說我怎么就攤上這事焰望∠就伲” “怎么了乖菱?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵静陈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我螟碎,道長(zhǎng)眉菱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任掉分,我火速辦了婚禮俭缓,結(jié)果婚禮上克伊,老公的妹妹穿的比我還像新娘。我一直安慰自己华坦,他們只是感情好愿吹,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惜姐,像睡著了一般犁跪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上歹袁,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天耘拇,我揣著相機(jī)與錄音,去河邊找鬼宇攻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛倡勇,可吹牛的內(nèi)容都是我干的逞刷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼妻熊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼夸浅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扔役,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤帆喇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后亿胸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坯钦,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年侈玄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了婉刀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡序仙,死狀恐怖突颊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情潘悼,我是刑警寧澤律秃,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站治唤,受9級(jí)特大地震影響棒动,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肝劲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一迁客、第九天 我趴在偏房一處隱蔽的房頂上張望郭宝。 院中可真熱鬧,春花似錦掷漱、人聲如沸粘室。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衔统。三九已至,卻和暖如春海雪,著一層夾襖步出監(jiān)牢的瞬間锦爵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工奥裸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留险掀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓湾宙,卻偏偏與公主長(zhǎng)得像樟氢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侠鳄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344