CAP原則與BASE理論

CAP 原則

CAP 原則又稱 CAP 定理,指的是在一個(gè)分布式系統(tǒng)中住闯, Consistency(一致性)笋额、 Availability(可用性)、Partition tolerance(分區(qū)容錯(cuò)性),三者不可得兼竟痰。

CAP 由 Eric Brewer 在 2000 年 PODC 會議上提出盘榨。該猜想在提出兩年后被證明成立,成為我們熟知的 CAP 定理。CAP 三者不可兼得井佑。

特性 定理
Consistency 一致性属铁,也叫做數(shù)據(jù)原子性,系統(tǒng)在執(zhí)行某項(xiàng)操作后仍然處于一致的狀態(tài)躬翁。在分布式系統(tǒng)中焦蘑,更新操作執(zhí)行成功后所有的用戶都應(yīng)該讀到最新的值,這樣的系統(tǒng)被認(rèn)為是具有強(qiáng)一致性的盒发。等同于所有節(jié)點(diǎn)訪問同一份最新的數(shù)據(jù)副本例嘱。
Availability 可用性,每一個(gè)操作總是能夠在一定的時(shí)間內(nèi)返回結(jié)果宁舰,這里需要注意的是"一定時(shí)間內(nèi)"和"返回結(jié)果”拼卵。一定時(shí)間內(nèi)指的是在可以容忍的范圍內(nèi)返回結(jié)果,結(jié)果可以是成功或者是失敗明吩,且不保證獲取的數(shù)據(jù)為最新數(shù)據(jù)间学。
Partition tolerance 分區(qū)容錯(cuò)性,分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)分區(qū)故障的時(shí)候印荔,仍然能夠?qū)ν馓峁M足一致性和可用性的服務(wù)低葫,除非整個(gè)網(wǎng)絡(luò)環(huán)境都發(fā)生了故障。

取舍策略

CAP 三個(gè)特性只能滿足其中兩個(gè)仍律,那么取舍的策略就共有三種:

  • CA without P:如果不要求P(不允許分區(qū))嘿悬,則C(強(qiáng)一致性)和A(可用性)是可以保證的。但放棄 P 的同時(shí)也就意味著放棄了系統(tǒng)的擴(kuò)展性水泉,也就是分布式節(jié)點(diǎn)受限善涨,沒辦法部署子節(jié)點(diǎn),這是違背分布式系統(tǒng)設(shè)計(jì)的初衷的草则。

  • CP without A:如果不要求A(可用)钢拧,相當(dāng)于每個(gè)請求都需要在服務(wù)器之間保持強(qiáng)一致,而P(分區(qū))會導(dǎo)致同步時(shí)間無限延長(也就是等待數(shù)據(jù)同步完才能正常訪問服務(wù))炕横,一旦發(fā)生網(wǎng)絡(luò)故障或者消息丟失等情況源内,就要犧牲用戶的體驗(yàn),等待所有數(shù)據(jù)全部一致了之后再讓用戶訪問系統(tǒng)份殿。設(shè)計(jì)成 CP 的系統(tǒng)其實(shí)不少膜钓,最典型的就是分布式數(shù)據(jù)庫,如 Redis卿嘲、HBase 等颂斜。對于這些分布式數(shù)據(jù)庫來說,數(shù)據(jù)的一致性是最基本的要求拾枣,因?yàn)槿绻B這個(gè)標(biāo)準(zhǔn)都達(dá)不到沃疮,那么直接采用關(guān)系型數(shù)據(jù)庫就好盒让,沒必要再浪費(fèi)資源來部署分布式數(shù)據(jù)庫。

  • AP without C:要高可用并允許分區(qū)忿磅,則需放棄一致性糯彬。一旦分區(qū)發(fā)生,節(jié)點(diǎn)之間可能會失去聯(lián)系葱她,為了高可用撩扒,每個(gè)節(jié)點(diǎn)只能用本地?cái)?shù)據(jù)提供服務(wù),而這樣會導(dǎo)致全局?jǐn)?shù)據(jù)的不一致性吨些。典型的應(yīng)用就如某米的搶購手機(jī)場景搓谆,可能前幾秒你瀏覽商品的時(shí)候頁面提示是有庫存的,當(dāng)你選擇完商品準(zhǔn)備下單的時(shí)候豪墅,系統(tǒng)提示你下單失敗泉手,商品已售完。這其實(shí)就是先在 A(可用性)方面保證系統(tǒng)可以正常的服務(wù)偶器,然后在數(shù)據(jù)的一致性方面做了些犧牲斩萌,雖然多少會影響一些用戶體驗(yàn),但也不至于造成用戶購物流程的嚴(yán)重阻塞屏轰。

總結(jié)

現(xiàn)如今颊郎,對于多數(shù)大型互聯(lián)網(wǎng)應(yīng)用的場景,主機(jī)眾多霎苗、部署分散姆吭,而且現(xiàn)在的集群規(guī)模越來越大,節(jié)點(diǎn)只會越來越多唁盏,所以節(jié)點(diǎn)故障内狸、網(wǎng)絡(luò)故障是常態(tài),因此分區(qū)容錯(cuò)性也就成為了一個(gè)分布式系統(tǒng)必然要面對的問題厘擂。那么就只能在 C 和 A 之間進(jìn)行取舍昆淡。但對于傳統(tǒng)的項(xiàng)目就可能有所不同,拿銀行的轉(zhuǎn)賬系統(tǒng)來說刽严,涉及到金錢的對于數(shù)據(jù)一致性不能做出一絲的讓步昂灵,C 必須保證,出現(xiàn)網(wǎng)絡(luò)故障的話港庄,寧可停止服務(wù)倔既,可以在 A 和 P 之間做取舍恕曲。而互聯(lián)網(wǎng)非金融項(xiàng)目普遍都是基于 AP 模式鹏氧。

總而言之,沒有最好的策略佩谣,好的系統(tǒng)應(yīng)該是根據(jù)業(yè)務(wù)場景來進(jìn)行架構(gòu)設(shè)計(jì)的把还,只有適合的才是最好的。

BASE 理論

CAP 理論已經(jīng)提出好多年了,難道真的沒有辦法解決這個(gè)問題嗎吊履?也許可以做些改變安皱。比如 C 不必使用那么強(qiáng)的一致性,可以先將數(shù)據(jù)存起來艇炎,稍后再更新酌伊,實(shí)現(xiàn)所謂的 “最終一致性”。

這個(gè)思路又是一個(gè)龐大的問題缀踪,同時(shí)也引出了第二個(gè)理論 BASE 理論居砖。

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

BASE 理論是對 CAP 中一致性和可用性權(quán)衡的結(jié)果唇敞,其來源于對大型互聯(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)。

Basically Available(基本可用)

基本可用是指分布式系統(tǒng)在出現(xiàn)故障的時(shí)候婆硬,允許損失部分可用性(例如響應(yīng)時(shí)間狠轻、功能上的可用性)。需要注意的是彬犯,基本可用絕不等價(jià)于系統(tǒng)不可用向楼。

  • 響應(yīng)時(shí)間上的損失:正常情況下搜索引擎需要在 0.5 秒之內(nèi)返回給用戶相應(yīng)的查詢結(jié)果,但由于出現(xiàn)故障(比如系統(tǒng)部分機(jī)房發(fā)生斷電或斷網(wǎng)故障)谐区,查詢結(jié)果的響應(yīng)時(shí)間增加到了 1~2 秒湖蜕。

  • 功能上的損失:購物網(wǎng)站在購物高峰(如雙十一)時(shí),為了保護(hù)系統(tǒng)的穩(wěn)定性宋列,部分消費(fèi)者可能會被引導(dǎo)到一個(gè)降級頁面昭抒。

Soft state(軟狀態(tài))

什么是軟狀態(tài)呢?相對于原子性而言炼杖,要求多個(gè)節(jié)點(diǎn)的數(shù)據(jù)副本都是一致的灭返,這是一種 “硬狀態(tài)”。

軟狀態(tài)是指允許系統(tǒng)存在中間狀態(tài)坤邪,而該中間狀態(tài)不會影響系統(tǒng)整體可用性熙含。分布式存儲中一般一份數(shù)據(jù)會有多個(gè)副本,允許不同副本數(shù)據(jù)同步的延時(shí)就是軟狀態(tài)的體現(xiàn)艇纺。

Eventually consistent(最終一致性)

系統(tǒng)不可能一直是軟狀態(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ì)等等因素与纽。

實(shí)際上,不只是分布式系統(tǒng)使用最終一致性塘装,關(guān)系型數(shù)據(jù)庫在某個(gè)功能上渣锦,也是使用最終一致性的,比如備份氢哮,數(shù)據(jù)庫的復(fù)制都是需要時(shí)間的袋毙,這個(gè)復(fù)制過程中,業(yè)務(wù)讀取到的值就是舊值冗尤。當(dāng)然听盖,最終還是達(dá)成了數(shù)據(jù)一致性。這也算是一個(gè)最終一致性的經(jīng)典案例裂七。

總結(jié)

總的來說皆看,BASE 理論面向的是大型高可用可擴(kuò)展的分布式系統(tǒng),和傳統(tǒng)事務(wù)的 ACID 是相反的背零,它完全不同于 ACID 的強(qiáng)一致性模型腰吟,而是通過犧牲強(qiáng)一致性來獲得可用性,并允許數(shù)據(jù)在一段時(shí)間是不一致的徙瓶。

今天要說的CAP原則與BASE理論篇暫時(shí)先說這么多毛雇,了解更多技術(shù)干貨,關(guān)注公眾號【樂字節(jié)發(fā)送123可了解我們一起學(xué)習(xí)吖】侦镇,我是哩哩灵疮,一個(gè)有趣的靈魂!下期見壳繁!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末震捣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子闹炉,更是在濱河造成了極大的恐慌蒿赢,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渣触,死亡現(xiàn)場離奇詭異羡棵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)昵观,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門晾腔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啊犬,你說我怎么就攤上這事灼擂。” “怎么了觉至?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵剔应,是天一觀的道長。 經(jīng)常有香客問我语御,道長峻贮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任应闯,我火速辦了婚禮纤控,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碉纺。我一直安慰自己船万,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布骨田。 她就那樣靜靜地躺著耿导,像睡著了一般。 火紅的嫁衣襯著肌膚如雪态贤。 梳的紋絲不亂的頭發(fā)上舱呻,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機(jī)與錄音悠汽,去河邊找鬼箱吕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛柿冲,可吹牛的內(nèi)容都是我干的殖氏。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼姻采,長吁一口氣:“原來是場噩夢啊……” “哼雅采!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起慨亲,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤婚瓜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后刑棵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巴刻,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年蛉签,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胡陪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沥寥。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖柠座,靈堂內(nèi)的尸體忽然破棺而出邑雅,到底是詐尸還是另有隱情,我是刑警寧澤妈经,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布淮野,位于F島的核電站,受9級特大地震影響吹泡,放射性物質(zhì)發(fā)生泄漏骤星。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一爆哑、第九天 我趴在偏房一處隱蔽的房頂上張望洞难。 院中可真熱鬧,春花似錦揭朝、人聲如沸廊营。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽露筒。三九已至,卻和暖如春敌卓,著一層夾襖步出監(jiān)牢的瞬間慎式,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工趟径, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘪吏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓蜗巧,卻偏偏與公主長得像掌眠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子幕屹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

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