1.什么是BASE理論
???BASE全稱:Basically Available(基本可用),Soft state(軟狀態(tài)),和 Eventually consistent(最終一致性)汉匙。
???CAP 不可能同時(shí)滿足逼庞,而分區(qū)容錯(cuò)是對于分布式系統(tǒng)而言又是必須的威根。
???Base 理論是對 CAP 中一致性和可用性權(quán)衡的結(jié)果终娃,是基于 CAP 定理逐步演化而來的肿男。其核心思想是:既是無法做到強(qiáng)一致性(Strong consistency)纲堵,但每個(gè)應(yīng)用都可以根據(jù)自身的業(yè)務(wù)特點(diǎn)幸逆,采用適當(dāng)?shù)姆绞絹硎瓜到y(tǒng)達(dá)到最終一致性(Eventual consistency)棍辕。
2.Basically Available(基本可用)
???什么是基本可用呢?假設(shè)系統(tǒng)还绘,出現(xiàn)了不可預(yù)知的故障楚昭,但還是能用,相比較正常的系統(tǒng)而言:
???響應(yīng)時(shí)間上的損失:正常情況下的一個(gè)請求 0.5 秒即返回給用戶結(jié)果拍顷,而基本可用的請求可以在 1 秒作用返回結(jié)果抚太。
???功能上的損失:在一個(gè)電商網(wǎng)站上,正常情況下昔案,用戶可以順利完成每一筆訂單尿贫,但是到了大促期間,為了保護(hù)購物系統(tǒng)的穩(wěn)定性踏揣,可以關(guān)閉一些不重要的功能或者部分消費(fèi)者可能會(huì)被引導(dǎo)到一個(gè)降級頁面庆亡。
- Soft state(軟狀態(tài))
???什么是軟狀態(tài)呢?相對于原子性而言捞稿,要求多個(gè)節(jié)點(diǎn)的數(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ù)延時(shí)。
- Eventually consistent(最終一致性)
???系統(tǒng)能夠保證在沒有其他新的更新操作的情況下铃辖,數(shù)據(jù)最終一定能夠達(dá)到一致的狀態(tài),因此所有客戶端對系統(tǒng)的數(shù)據(jù)訪問最終都能夠獲取到最新的值猪叙。
???上面說軟狀態(tài)娇斩,然后不可能一直是軟狀態(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ì)等等因素背蟆。
???最終一致性分為 5 種:
???1. 因果一致性(Causal consistency)如果節(jié)點(diǎn) A 在更新完某個(gè)數(shù)據(jù)后通知了節(jié)點(diǎn) B鉴分,那么節(jié)點(diǎn) B 之后對該數(shù)據(jù)的訪問和修改都是基于 A 更新后的值哮幢。于此同時(shí),和節(jié)點(diǎn) A 無因果關(guān)系的節(jié)點(diǎn) C 的數(shù)據(jù)訪問則沒有這樣的限制志珍。
???2. 讀己之所寫(Read your writes)節(jié)點(diǎn) A 更新一個(gè)數(shù)據(jù)后橙垢,它自身總是能訪問到自身更新過的最新值,而不會(huì)看到舊值伦糯。其實(shí)也算一種因果一致性柜某。
???3. 會(huì)話一致性(Session consistency)會(huì)話一致性將對系統(tǒng)數(shù)據(jù)的訪問過程框定在了一個(gè)會(huì)話當(dāng)中:系統(tǒng)能保證在同一個(gè)有效的會(huì)話中實(shí)現(xiàn) “讀己之所寫” 的一致性,也就是說敛纲,執(zhí)行更新操作之后喂击,客戶端能夠在同一個(gè)會(huì)話中始終讀取到該數(shù)據(jù)項(xiàng)的最新值。
???4. 單調(diào)讀一致性(Monotonic read consistency)如果一個(gè)節(jié)點(diǎn)從系統(tǒng)中讀取出一個(gè)數(shù)據(jù)項(xiàng)的某個(gè)值后淤翔,那么系統(tǒng)對于該節(jié)點(diǎn)后續(xù)的任何數(shù)據(jù)訪問都不應(yīng)該返回更舊的值翰绊。
???5. 單調(diào)寫一致性(Monotonic write consistency)指一個(gè)系統(tǒng)要能夠保證來自同一個(gè)節(jié)點(diǎn)的寫操作被順序的執(zhí)行。
???然而办铡,在實(shí)際的實(shí)踐中辞做,這 5 種系統(tǒng)往往會(huì)結(jié)合使用,以構(gòu)建一個(gè)具有最終一致性的分布式系統(tǒng)寡具。實(shí)際上秤茅,不只是分布式系統(tǒng)使用最終一致性,關(guān)系型數(shù)據(jù)庫在某個(gè)功能上童叠,也是使用最終一致性的框喳,比如備份,數(shù)據(jù)庫的復(fù)制過程是需要時(shí)間的厦坛,這個(gè)復(fù)制過程中五垮,業(yè)務(wù)讀取到的值就是舊的。當(dāng)然杜秸,最終還是達(dá)成了數(shù)據(jù)一致性放仗。