CAP原則(CAP定理)钠乏、BASE理論

CAP原則

CAP原則又稱CAP定理代箭,指的是在一個分布式系統(tǒng)中辕录, Consistency(一致性)、 Availability(可用性)梢卸、Partition tolerance(分區(qū)容錯性),三者不可得兼副女。CAP原則是NOSQL數(shù)據(jù)庫的基石蛤高。Consistency(一致性)。 Availability(可用性)碑幅。Partition tolerance(分區(qū)容錯性)戴陡。
分布式系統(tǒng)的CAP理論:理論首先把分布式系統(tǒng)中的三個特性進行了如下歸納:

  • 一致性(C):在分布式系統(tǒng)中的所有數(shù)據(jù)備份,在同一時刻是否同樣的值沟涨。(等同- 于所有節(jié)點訪問同一份最新的數(shù)據(jù)副本)
    可用性(A):在集群中一部分節(jié)點故障后恤批,集群整體是否還能響應客戶端的讀寫請求。(對數(shù)據(jù)更新具備高可用性)
  • 分區(qū)容忍性(P):以實際效果而言裹赴,分區(qū)相當于對通信的時限要求喜庞。系統(tǒng)如果不能在時限內(nèi)達成數(shù)據(jù)一致性,就意味著發(fā)生了分區(qū)的情況棋返,必須就當前操作在C和A之間做出選擇延都。

一致性與可用性的決擇編輯

CAP理論就是說在分布式存儲系統(tǒng)中,最多只能實現(xiàn)上面的兩點睛竣。而由于當前的網(wǎng)絡硬件肯定會出現(xiàn)延遲丟包等問題晰房,所以分區(qū)容忍性是我們必須需要實現(xiàn)的。所以我們只能在一致性和可用性之間進行權衡射沟,沒有NoSQL系統(tǒng)能同時保證這三點殊者。
對于web2.0網(wǎng)站來說,關系數(shù)據(jù)庫的很多主要特性卻往往無用武之地

  • 數(shù)據(jù)庫事務一致性需求
      很多web實時系統(tǒng)并不要求嚴格的數(shù)據(jù)庫事務验夯,對讀一致性的要求很低猖吴,有些場合對寫一致性要求并不高。允許實現(xiàn)最終一致性簿姨。
  • 數(shù)據(jù)庫的寫實時性和讀實時性需求
      對關系數(shù)據(jù)庫來說距误,插入一條數(shù)據(jù)之后立刻查詢,是肯定可以讀出來這條數(shù)據(jù)的扁位,但是對于很多web應用來說准潭,并不要求這么高的實時性,比方說發(fā)一條消息之 后域仇,過幾秒乃至十幾秒之后刑然,我的訂閱者才看到這條動態(tài)是完全可以接受的。
  • 對復雜的SQL查詢暇务,特別是多表關聯(lián)查詢的需求
      任何大數(shù)據(jù)量的web系統(tǒng)泼掠,都非常忌諱多個大表的關聯(lián)查詢怔软,以及復雜的數(shù)據(jù)分析類型的報表查詢,特別是SNS類型的網(wǎng)站择镇,從需求以及產(chǎn)品設計角 度挡逼,就避免了這種情況的產(chǎn)生。往往更多的只是單表的主鍵查詢腻豌,以及單表的簡單條件分頁查詢家坎,SQL的功能被極大的弱化了。

BASE理論

BASE是Basically Available(基本可用)吝梅、Soft state(軟狀態(tài))和Eventually consistent(最終一致性)三個短語的簡寫虱疏,BASE是對CAP中一致性和可用性權衡的結果,其來源于對大規(guī)乃招互聯(lián)網(wǎng)系統(tǒng)分布式實踐的結論做瞪,是基于CAP定理逐步演化而來的,其核心思想是即使無法做到強一致性(Strong consistency)右冻,但每個應用都可以根據(jù)自身的業(yè)務特點自赔,采用適當?shù)姆绞絹硎瓜到y(tǒng)達到最終一致性(Eventual consistency)香嗓。接下來我們著重對BASE中的三要素進行詳細講解民鼓。

基本可用

基本可用是指分布式系統(tǒng)在出現(xiàn)不可預知故障的時候屉来,允許損失部分可用性——但請注意,這絕不等價于系統(tǒng)不可用跪但,以下兩個就是“基本可用”的典型例子履羞。
響應時間上的損失:正常情況下,一個在線搜索引擎需要0.5秒內(nèi)返回給用戶相應的查詢結果屡久,但由于出現(xiàn)異常(比如系統(tǒng)部分機房發(fā)生斷電或斷網(wǎng)故障)忆首,查詢結果的響應時間增加到了1~2秒。
功能上的損失:正常情況下被环,在一個電子商務網(wǎng)站上進行購物糙及,消費者幾乎能夠順利地完成每一筆訂單,但是在一些節(jié)日大促購物高峰的時候筛欢,由于消費者的購物行為激增浸锨,為了保護購物系統(tǒng)的穩(wěn)定性,部分消費者可能會被引導到一個降級頁面版姑。
弱狀態(tài)也稱為軟狀態(tài)柱搜,和硬狀態(tài)相對,是指允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài)剥险,并認為該中間狀態(tài)的存在不會影響系統(tǒng)的整體可用性聪蘸,即允許系統(tǒng)在不同節(jié)點的數(shù)據(jù)副本之間進行數(shù)據(jù)聽不的過程存在延時。

最終一致性

最終一致性強調(diào)的是系統(tǒng)中所有的數(shù)據(jù)副本,在經(jīng)過一段時間的同步后健爬,最終能夠達到一個一致的狀態(tài)控乾。因此,最終一致性的本質是需要系統(tǒng)保證最終數(shù)據(jù)能夠達到一致娜遵,而不需要實時保證系統(tǒng)數(shù)據(jù)的強一致性

亞馬遜首席技術官Werner Vogels在于2008年發(fā)表的一篇文章中對最終一致性進行了非常詳細的介紹蜕衡。他認為最終一致性時一種特殊的弱一致性:系統(tǒng)能夠保證在沒有其他新的更新操作的情況下,數(shù)據(jù)最終一定能夠達到一致的狀態(tài)设拟,因此所有客戶端對系統(tǒng)的數(shù)據(jù)訪問都能夠胡渠道最新的值衷咽。同時,在沒有發(fā)生故障的前提下蒜绽,數(shù)據(jù)達到一致狀態(tài)的時間延遲,取決于網(wǎng)絡延遲桶现,系統(tǒng)負載和數(shù)據(jù)復制方案設計等因素躲雅。

在實際工程實踐中,最終一致性存在以下五類主要變種骡和。

  • 因果一致性:
    因果一致性是指相赁,如果進程A在更新完某個數(shù)據(jù)項后通知了進程B,那么進程B之后對該數(shù)據(jù)項的訪問都應該能夠獲取到進程A更新后的最新值慰于,并且如果進程B要對該數(shù)據(jù)項進行更新操作的話钮科,務必基于進程A更新后的最新值,即不能發(fā)生丟失更新情況婆赠。與此同時绵脯,與進程A無因果關系的進程C的數(shù)據(jù)訪問則沒有這樣的限制。

  • 讀己之所寫:
    讀己之所寫是指休里,進程A更新一個數(shù)據(jù)項之后蛆挫,它自己總是能夠訪問到更新過的最新值,而不會看到舊值妙黍。也就是說悴侵,對于單個數(shù)據(jù)獲取者而言,其讀取到的數(shù)據(jù)一定不會比自己上次寫入的值舊拭嫁。因此可免,讀己之所寫也可以看作是一種特殊的因果一致性。

  • 會話一致性:
    會話一致性將對系統(tǒng)數(shù)據(jù)的訪問過程框定在了一個會話當中:系統(tǒng)能保證在同一個有效的會話中實現(xiàn)“讀己之所寫”的一致性做粤,也就是說浇借,執(zhí)行更新操作之后,客戶端能夠在同一個會話中始終讀取到該數(shù)據(jù)項的最新值驮宴。

  • 單調(diào)讀一致性:
    單調(diào)讀一致性是指如果一個進程從系統(tǒng)中讀取出一個數(shù)據(jù)項的某個值后逮刨,那么系統(tǒng)對于該進程后續(xù)的任何數(shù)據(jù)訪問都不應該返回更舊的值。

  • 單調(diào)寫一致性:
    單調(diào)寫一致性是指,一個系統(tǒng)需要能夠保證來自同一個進程的寫操作被順序地執(zhí)行修己。
    以上就是最終一致性的五類常見的變種恢总,在時間系統(tǒng)實踐中,可以將其中的若干個變種互相結合起來睬愤,以構建一個具有最終一致性的分布式系統(tǒng)片仿。事實上,可以將其中的若干個變種相互結合起來尤辱,以構建一個具有最終一致性特性的分布式系統(tǒng)砂豌。事實上,最終一致性并不是只有那些大型分布式系統(tǒng)才設計的特性光督,許多現(xiàn)代的關系型數(shù)據(jù)庫都采用了最終一致性模型阳距。在現(xiàn)代關系型數(shù)據(jù)庫中,大多都會采用同步和異步方式來實現(xiàn)主備數(shù)據(jù)復制技術结借。在同步方式中筐摘,數(shù)據(jù)的復制國恥鞥通常是更新事務的一部分,因此在事務完成后船老,主備數(shù)據(jù)庫的數(shù)據(jù)就會達到一致咖熟。而在異步方式中,備庫的更新往往存在延時柳畔,這取決于事務日志在主備數(shù)據(jù)庫之間傳輸?shù)臅r間長短馍管,如果傳輸時間過長或者甚至在日志傳輸過程中出現(xiàn)異常導致無法及時將事務應用到備庫上,那么狠顯然薪韩,從備庫中讀取的的數(shù)據(jù)將是舊的确沸,因此就出現(xiàn)了不一致的情況。當然俘陷,無論是采用多次重試還是認為數(shù)據(jù)訂正张惹,關系型數(shù)據(jù)庫還是能搞保證最終數(shù)據(jù)達到一致——這就是系統(tǒng)提供最終一致性保證的經(jīng)典案例。

總的來說岭洲,BASE理論面向的是大型高可用可擴展的分布式系統(tǒng)宛逗,和傳統(tǒng)事務的ACID特性使相反的,它完全不同于ACID的強一致性模型盾剩,而是提出通過犧牲強一致性來獲得可用性雷激,并允許數(shù)據(jù)在一段時間內(nèi)是不一致的,但最終達到一致狀態(tài)告私。但同時屎暇,在實際的分布式場景中,不同業(yè)務單元和組件對數(shù)據(jù)一致性的要求是不同的驻粟,因此在具體的分布式系統(tǒng)架構設計過程中根悼,ACID特性與BASE理論往往又會結合在一起使用凶异。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市挤巡,隨后出現(xiàn)的幾起案子剩彬,更是在濱河造成了極大的恐慌,老刑警劉巖矿卑,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喉恋,死亡現(xiàn)場離奇詭異,居然都是意外死亡母廷,警方通過查閱死者的電腦和手機轻黑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來琴昆,“玉大人氓鄙,你說我怎么就攤上這事∫瞪幔” “怎么了玖详?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勤讽。 經(jīng)常有香客問我,道長拗踢,這世上最難降的妖魔是什么脚牍? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮巢墅,結果婚禮上诸狭,老公的妹妹穿的比我還像新娘。我一直安慰自己君纫,他們只是感情好驯遇,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蓄髓,像睡著了一般叉庐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上会喝,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天陡叠,我揣著相機與錄音,去河邊找鬼肢执。 笑死枉阵,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的预茄。 我是一名探鬼主播兴溜,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拙徽?” 一聲冷哼從身側響起刨沦,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斋攀,沒想到半個月后已卷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡淳蔼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年侧蘸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹉梨。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡讳癌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出存皂,到底是詐尸還是另有隱情晌坤,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布旦袋,位于F島的核電站骤菠,受9級特大地震影響,放射性物質發(fā)生泄漏疤孕。R本人自食惡果不足惜商乎,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祭阀。 院中可真熱鬧鹉戚,春花似錦、人聲如沸专控。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伦腐。三九已至赢底,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柏蘑,已是汗流浹背颖系。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辩越,地道東北人嘁扼。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像黔攒,于是被迫代替她去往敵國和親趁啸。 傳聞我的和親對象是個殘疾皇子强缘,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容