Base理論及其一致性模型

對(duì)于CAP來(lái)說(shuō)图毕,放棄強(qiáng)一致性盈匾,追求分區(qū)容錯(cuò)性和可用性,這是很多分布式系統(tǒng)設(shè)計(jì)時(shí)的選擇淑仆。在工程實(shí)際中,基于CAP定理逐步演化加叁,就提出了Base理論倦沧。

1 .Base 理論

Base 是三個(gè)短語(yǔ)的簡(jiǎn)寫(xiě),即基本可用(Basically Available)它匕、軟狀態(tài)(Soft State) 和最終一致性(Eventually Consistent)
Base 理論的核心思想是最終一致性展融,即使無(wú)法做法強(qiáng)一致性,但每個(gè)應(yīng)用都可以根據(jù)自身的業(yè)務(wù)特點(diǎn)采用適當(dāng)?shù)姆椒▉?lái)使系統(tǒng)達(dá)到最終一致性豫柬。

1) 基本可用
就是不追求CAP中的【任何時(shí)候告希,讀寫(xiě)都是成功的】,而是系統(tǒng)能夠基本運(yùn)行烧给,一直提供服務(wù)燕偶。基本可用強(qiáng)調(diào)了分布式系統(tǒng)在出現(xiàn)不可預(yù)知的故障的時(shí)候础嫡,允許損失部分可用性指么,相比正常系統(tǒng),可能響應(yīng)時(shí)間延長(zhǎng)驰吓,或者服務(wù)被降級(jí)涧尿。
比如:在雙十一秒殺活動(dòng)中,如果搶購(gòu)人數(shù)太多超過(guò)了系統(tǒng)的QPS峰值檬贰,可能會(huì)排隊(duì)或者提示限流姑廉,這就是通過(guò)合理的手段保護(hù)系統(tǒng)的穩(wěn)定性,保證主要的服務(wù)正常翁涤,保證基本可用桥言。
2) 軟狀態(tài)
軟狀態(tài)可以對(duì)應(yīng)ACID事務(wù)中的原子性,在ACID的事務(wù)中葵礼,實(shí)現(xiàn)的是強(qiáng)一致性号阿,要么全做要么全不做,所有用戶看到的數(shù)據(jù)一致鸳粉。其中原子性要求多個(gè)節(jié)點(diǎn)的數(shù)據(jù)副本都是一致的扔涧,強(qiáng)調(diào)數(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ù)延遲艰山。
3) 最終一致性
數(shù)據(jù)不可能一直是軟狀態(tài)湖雹,必須在一個(gè)時(shí)間期限之后達(dá)到各個(gè)節(jié)點(diǎn)的一致性,在期限過(guò)后曙搬,應(yīng)當(dāng)保證所有的副本數(shù)據(jù)保持一致性摔吏,也就是達(dá)到數(shù)據(jù)的最終一致性鸽嫂。
在系統(tǒng)設(shè)計(jì)中,最終一致性實(shí)現(xiàn)的時(shí)間取決于網(wǎng)絡(luò)延時(shí)征讲,系統(tǒng)負(fù)載据某、不同的存儲(chǔ)選型、不同的數(shù)據(jù)復(fù)制方案設(shè)計(jì)等因素稳诚。

2. 不同數(shù)據(jù)一致性模型

一般來(lái)說(shuō)哗脖,數(shù)據(jù)一致性模型可以分為強(qiáng)一致性和弱一致性瀑踢,強(qiáng)一致性也叫做線性一致性扳还,除此之外,所有其他的一致性都是弱一致性的特殊情況橱夭。弱一致性根據(jù)不同的業(yè)務(wù)場(chǎng)景氨距,又可以分解為更細(xì)分的模型,不同一致性模型又有不同的應(yīng)用場(chǎng)景棘劣。
在互聯(lián)網(wǎng)領(lǐng)域的絕大多數(shù)場(chǎng)景中俏让,都需要犧牲強(qiáng)一致性來(lái)?yè)Q取系統(tǒng)的高可用性,系統(tǒng)往往值需要保證“最終一致性”茬暇,只要在這個(gè)最終時(shí)間是在用戶可以接受范圍內(nèi)即可首昔。
1) 強(qiáng)一致性
當(dāng)數(shù)據(jù)更新完成之后,任何多個(gè)后續(xù)進(jìn)程的訪問(wèn)都會(huì)返回最新的更新過(guò)的值糙俗,這種是對(duì)用戶最友好的勒奇,就是用戶上一次寫(xiě)什么,下一次就保證能讀到什么巧骚,根據(jù)CAP理論赊颠,這種實(shí)現(xiàn)需要犧牲可用性。
2)弱一致性
系統(tǒng)在數(shù)據(jù)寫(xiě)入成功之后劈彪,不承諾立即可以讀到最新寫(xiě)入的數(shù)據(jù)竣蹦,也不會(huì)具體的承諾多久可以讀到。用戶讀到某一操作對(duì)系統(tǒng)數(shù)據(jù)的更新需要一段時(shí)間沧奴,我們稱這段時(shí)間為“不一致性窗口”痘括。
3) 最終一致性
最終一致性是弱一致性的特例,強(qiáng)調(diào)的是所有的數(shù)據(jù)副本在經(jīng)過(guò)一段時(shí)間的同步之后滔吠,最終能夠達(dá)到一個(gè)一致的狀態(tài)纲菌。因此,最終一致性的本質(zhì)是需要系統(tǒng)保證最終數(shù)據(jù)能夠達(dá)到一致屠凶,而不需要實(shí)時(shí)保證系統(tǒng)數(shù)據(jù)的強(qiáng)一致性驰后。
達(dá)到最終一致性的時(shí)間,就是不一致窗口時(shí)間矗愧,在沒(méi)有故障發(fā)生的前提下灶芝,不一致性窗口的時(shí)間主要受通信延遲郑原,系統(tǒng)負(fù)載和副本的個(gè)數(shù)影響。
最終一致性模型根據(jù)其提供的不同保證可以劃分為更多的模型夜涕,包括因果一致性和會(huì)話一致性等犯犁。
因果一致性
因果一致性要求有因果關(guān)系的操作順序得到保證,非因果關(guān)系的操作順序無(wú)所謂女器。
比如:在微博或者微信進(jìn)行評(píng)論的時(shí)候酸役,比如你在朋友圈發(fā)了一張照片,朋友給你評(píng)論了驾胆,而你對(duì)朋友的評(píng)論進(jìn)行了回復(fù)涣澡,這條朋友圈的顯示中,你的回復(fù)必須在朋友之后丧诺,這是一個(gè)因果關(guān)系入桂,而其他沒(méi)有因果關(guān)系的數(shù)據(jù),可以允許不一致驳阎。
會(huì)話一致性
會(huì)話一致性對(duì)系統(tǒng)數(shù)據(jù)的訪問(wèn)過(guò)程框定在了一個(gè)會(huì)話中抗愁,約定了系統(tǒng)能保證在同一個(gè)有效的會(huì)話中實(shí)現(xiàn)“讀己之所寫(xiě)”的一致性,就是在你的一次訪問(wèn)中呵晚,執(zhí)行更新操作之后蜘腌,客戶端能夠在同一會(huì)話中始終讀取到該數(shù)據(jù)項(xiàng)的最新值。
比如:分布式的Session 一致性問(wèn)題饵隙,可以認(rèn)為是會(huì)話一致性的一個(gè)應(yīng)用撮珠。

3. CAP及Base的關(guān)系

Base 理論是在CAP上發(fā)展的,CAP理論描述了分布式系統(tǒng)中數(shù)據(jù)一致性癞季、可用性劫瞳、分區(qū)容錯(cuò)性之間的制約關(guān)系,當(dāng)你選擇了其中的兩個(gè)時(shí)绷柒,就不得不對(duì)剩下的一個(gè)做一定程度的犧牲志于。
Base理論是對(duì)CAP理論的實(shí)際應(yīng)用,也就是在分區(qū)和副本存在的前提下废睦,通過(guò)一定的系統(tǒng)設(shè)計(jì)方案伺绽,放棄強(qiáng)一致性,實(shí)現(xiàn)基本可用嗜湃,這是絕大部分分布式系統(tǒng)的選擇奈应。比如NoSQL系統(tǒng)、為服務(wù)架構(gòu)购披。在這個(gè)前提下杖挣,如何把基本可用做到最好,就是分布式工程師追求的刚陡。
除了 CAP 和 Base惩妇,上面還提到了 ACID 原理株汉,ACID 是一種強(qiáng)一致性模型,強(qiáng)調(diào)原子性歌殃、一致性乔妈、隔離性和持久性,主要用于在數(shù)據(jù)庫(kù)實(shí)現(xiàn)中氓皱。Base 理論面向的是高可用路召、可擴(kuò)展的分布式系統(tǒng),ACID 適合傳統(tǒng)金融等業(yè)務(wù)波材,在實(shí)際場(chǎng)景中股淡,不同業(yè)務(wù)對(duì)數(shù)據(jù)的一致性要求不一樣,ACID 和 Base 理論往往會(huì)結(jié)合使用各聘。

4. 邏輯時(shí)鐘

分布式解決了傳統(tǒng)單體架構(gòu)的單點(diǎn)問(wèn)題和性能問(wèn)題揣非,另一方面也帶來(lái)了很多新的問(wèn)題,其中一個(gè)問(wèn)題就是多節(jié)點(diǎn)的時(shí)間同步問(wèn)題:不同機(jī)器上的物理時(shí)鐘難以同步躲因,導(dǎo)致無(wú)法區(qū)分在分布式中多個(gè)節(jié)點(diǎn)的事件時(shí)序。
比如:兩臺(tái)機(jī)同時(shí)發(fā)送消息忌傻,由于機(jī)器A上的時(shí)間要比機(jī)器B上的時(shí)間快大脉,即使機(jī)器B后發(fā)送消息,最終看到的還是A上發(fā)送的消息是最新的水孩,這樣就有可能導(dǎo)致問(wèn)題的出現(xiàn)镰矿。
于是就有人提出了邏輯時(shí)鐘的概念。
1) 什么是邏輯時(shí)鐘
邏輯時(shí)鐘是為了區(qū)分現(xiàn)實(shí)中的物理時(shí)鐘提出來(lái)的概念俘种,一般情況下我們提到的時(shí)間都是指物理時(shí)間秤标,但在實(shí)際很多應(yīng)用中,只要所有的機(jī)器有相同的時(shí)間就夠了宙刘,這個(gè)時(shí)間不一定要跟實(shí)際的時(shí)間相同苍姜。更進(jìn)一步,如果兩個(gè)節(jié)點(diǎn)之間不進(jìn)行交互悬包,那么它們的時(shí)間甚至都不需要同步衙猪。因此問(wèn)題的關(guān)鍵點(diǎn)在于節(jié)點(diǎn)間的交互要在事件的發(fā)生順序上達(dá)成一致,而不是對(duì)于時(shí)間達(dá)成一致布近。
2)可以對(duì)不同的節(jié)點(diǎn)的物理時(shí)鐘做同步么垫释?
方法是有的,NTP就是常用的時(shí)間同步算法撑瞧。比如

/usr/sbin/ntpdate 10.8.1.2 10.8.1.3 10.8.1.4

通過(guò)上面的命令可以同步三臺(tái)機(jī)的時(shí)間棵譬,但是這樣也不是完全沒(méi)有誤差,這種誤差在某些場(chǎng)景下(金融分布式事務(wù))是不能接受的预伺。
因此订咸,Lamport提出邏輯時(shí)鐘就是為了解決分布式系統(tǒng)中的時(shí)序問(wèn)題琅束,即如何定義a在b之前發(fā)生。值得注意的是算谈,并不是說(shuō)分布式系統(tǒng)只能用邏輯時(shí)鐘來(lái)解決這個(gè)問(wèn)題涩禀,如果以后有某種技術(shù)能夠讓不同節(jié)點(diǎn)的時(shí)鐘完全保持一致,那么使用物理時(shí)鐘來(lái)區(qū)分先后是一個(gè)更簡(jiǎn)單有效的方式然眼。
參考資料:不同數(shù)據(jù)一致性模型有哪些應(yīng)用艾船?
這里關(guān)于邏輯時(shí)鐘的原理就不詳細(xì)介紹了,后面會(huì)補(bǔ)充上高每。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屿岂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鲸匿,更是在濱河造成了極大的恐慌爷怀,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件带欢,死亡現(xiàn)場(chǎng)離奇詭異运授,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)乔煞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)吁朦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人渡贾,你說(shuō)我怎么就攤上這事逗宜。” “怎么了空骚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵纺讲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我囤屹,道長(zhǎng)熬甚,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任牺丙,我火速辦了婚禮则涯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冲簿。我一直安慰自己粟判,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布峦剔。 她就那樣靜靜地躺著档礁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吝沫。 梳的紋絲不亂的頭發(fā)上呻澜,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天递礼,我揣著相機(jī)與錄音,去河邊找鬼羹幸。 笑死脊髓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的栅受。 我是一名探鬼主播将硝,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼屏镊!你這毒婦竟也來(lái)了依疼?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤而芥,失蹤者是張志新(化名)和其女友劉穎律罢,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體棍丐,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡误辑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骄酗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稀余。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖趋翻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盒蟆,我是刑警寧澤踏烙,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站历等,受9級(jí)特大地震影響讨惩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寒屯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一荐捻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寡夹,春花似錦处面、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至智绸,卻和暖如春野揪,著一層夾襖步出監(jiān)牢的瞬間访忿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工斯稳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留海铆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓挣惰,卻偏偏與公主長(zhǎng)得像卧斟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子通熄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359