更新時(shí)間:2023年06月30日15時(shí)22分 來(lái)源:傳智教育 瀏覽次數(shù):
BASE理論是eBay的架構(gòu)師Dan Pritchett在ACM上發(fā)表文章提出的,它是對(duì)CAP原則中一致性和可用性權(quán)衡的結(jié)果,也是對(duì)CAP原則的延伸。BASE理論的核心思想是即使無(wú)法保證系統(tǒng)的強(qiáng)一致性(strong consistency,即CAP的一致性就是強(qiáng)一致性),但每個(gè)應(yīng)用都可以根據(jù)自身的業(yè)務(wù)特點(diǎn),采用適當(dāng)?shù)姆绞絹?lái)使系統(tǒng)達(dá)到最終一致性(eventual consistency)。
BASE理論與CAP原則類似,也包含三大要素,即基本可用(Basically Available)、軟狀態(tài)(Soft-State)和最終一致性(Eventually Consistent),具體含義如下:
• 基本可用,是指分布式系統(tǒng)在出現(xiàn)不可預(yù)知故障的時(shí)候,允許損失部分可用性,保證系統(tǒng)的核心可用即可。需要注意的是,基本可用不等價(jià)于系統(tǒng)不可用。
• 軟狀態(tài),也稱為弱狀態(tài),和硬狀態(tài)是相對(duì)的,它是指允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該中間狀態(tài)的存在不會(huì)影響系統(tǒng)的整體可用性,即允許系統(tǒng)在不同結(jié)點(diǎn)的數(shù)據(jù)副本之間進(jìn)行數(shù)據(jù)同步的過(guò)程存在延時(shí)。
• 最終一致性,是指系統(tǒng)中的所有數(shù)據(jù)副本經(jīng)過(guò)一定時(shí)間后,最終能夠達(dá)到一致的狀態(tài)。因此,最終一致性的本質(zhì)是需要系統(tǒng)保證最終數(shù)據(jù)能夠達(dá)到一致,而不需要實(shí)時(shí)保證系統(tǒng)數(shù)據(jù)的強(qiáng)一致性。
BASE理論與關(guān)系數(shù)據(jù)庫(kù)中的ACID理論是兩種截然相反的理論。下面,我們通過(guò)一張表來(lái)分析BASE理論和ACID理論的區(qū)別,具體如表1所示。
最終一致性
數(shù)據(jù)的一致性可以根據(jù)強(qiáng)度的不同分為兩種,即強(qiáng)一致性和弱一致性。其中,強(qiáng)一致性要求集群中的所有結(jié)點(diǎn)的狀態(tài)實(shí)時(shí)保持一致;弱一致性不要求系統(tǒng)各結(jié)點(diǎn)狀態(tài)實(shí)時(shí)保持一致,而最終一致性是弱一致性的一種特殊形式。NoSQL.數(shù)據(jù)庫(kù)通常選擇放棄強(qiáng)一致性,用最終一致性的思想設(shè)計(jì)分布式系統(tǒng),從而使得系統(tǒng)達(dá)到高可用性和高擴(kuò)展性。
最終一致性,指的是保證用戶最終能夠讀取到某操作對(duì)系統(tǒng)特定數(shù)據(jù)的更新。但是隨著時(shí)間的遷移,不同結(jié)點(diǎn)上的同一份數(shù)據(jù)總是在向趨同的方向變化。也可以簡(jiǎn)單地理解為,在一段時(shí)間后,結(jié)點(diǎn)之間的數(shù)據(jù)會(huì)最終達(dá)到一致狀態(tài)。實(shí)現(xiàn)最終一致性最常見的系統(tǒng)是DNS域名系統(tǒng),由于DNS是多級(jí)緩存的實(shí)現(xiàn),所以修改DNS記錄后不會(huì)立刻在全球所有的DNS服務(wù)結(jié)點(diǎn)生效,需要等DNS服務(wù)器緩存過(guò)期后,再向源服務(wù)器更新新的記錄才能生效。
最終一致性可以分為“因果”一致性、“讀己之所寫”一到性、“會(huì)話”一致性、“單調(diào)讀”一致性以及“單調(diào)寫”一致性,具體介紹如下:
• “因果”一致性:如果進(jìn)程A通知進(jìn)程B它已更新了一個(gè)數(shù)據(jù)項(xiàng),那么進(jìn)程B的后續(xù)訪問(wèn)將返回更新后的值,且一次寫入將保證取代前一次寫入。與進(jìn)程A無(wú)因果關(guān)系的進(jìn)程C的訪問(wèn)遵循一般的最終一致性規(guī)則。
• “讀己之所寫”一致性:指的是進(jìn)程A在修改了數(shù)據(jù)后,它總能讀取到修改過(guò)的數(shù)據(jù)值,而不會(huì)讀取到原始值。讀己之所寫一致性是因果一致性的一個(gè)特例。
• “會(huì)話”一致性:指的是將訪問(wèn)存儲(chǔ)系統(tǒng)的進(jìn)程放到會(huì)話的上下文中,若是會(huì)話存在,則系統(tǒng)就保證“讀己之所寫”一致性;若是由于系統(tǒng)宕機(jī)或者網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致會(huì)話終止,則需要建立新的會(huì)話。
• “單調(diào)讀”一致性:指的是進(jìn)程已經(jīng)讀取過(guò)數(shù)據(jù)對(duì)象的某個(gè)值,則任何后續(xù)訪問(wèn)都不會(huì)返回在這個(gè)值之前的值,這樣就可以保證每個(gè)客戶端在之后的請(qǐng)求中獲取到的數(shù)據(jù)是最新的數(shù)據(jù)。
• “單調(diào)寫”一致性:指的是系統(tǒng)保證來(lái)自同一個(gè)進(jìn)程的寫操作是順序執(zhí)行的。上述最終一致性的不同形式可以進(jìn)行組合,例如“單調(diào)讀”一致性和“讀己之所寫”一致性進(jìn)行組合,就可以讀取自己更新的數(shù)據(jù)和一旦讀取到最新的數(shù)據(jù)就不會(huì)再讀到舊版本的數(shù)據(jù),這樣可以使得存儲(chǔ)系統(tǒng)降低了一致性的要求并提供了高可用性。
北京校區(qū)