BASE理論
BASE理論是Basically Available(基本可用),Soft state(軟狀態(tài))和Eventually consistent(最終一致性)的簡稱鳞上。BASE理論是對CAP中一致性和可用性權(quán)衡的結(jié)果摔竿,是基于CAP定理演化過來的,其核心思想是即使無法做到強一致性(Strong consistency),但是每個應(yīng)用都可以根據(jù)自身的業(yè)務(wù)特點,采取適當?shù)姆绞絹硎瓜到y(tǒng)達到最終一致性(Eventually consistent)懒浮。
基本可用
基本可用是指分布式系統(tǒng)在出現(xiàn)不可預(yù)知故障的時候,允許損失部分可用性--但是不等價于系統(tǒng)不可用腕巡。
- 響應(yīng)時間上的損失:正常情況下骚烧,搜索引擎會在0.5秒內(nèi)返回給客戶查詢結(jié)果,但是如果出現(xiàn)故障夸政,查詢結(jié)果會延遲1-2秒元旬,但是在客戶的可接受的范圍內(nèi)
- 功能上的損失:大促時,因為并發(fā)量變高守问,為了保證購物系統(tǒng)的穩(wěn)定性匀归,部分消費者會被引導(dǎo)到一個降級的頁面,這樣能保證一部分消費者能正常使用耗帕。
弱狀態(tài)
弱狀態(tài)也稱做軟狀態(tài)穆端,軟狀態(tài)是與硬狀態(tài)是相對的,是允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài)仿便,并認為中間狀態(tài)不會影響系統(tǒng)的整體可用性体啰,就是允許系統(tǒng)在不同節(jié)點的數(shù)據(jù)副本之間進行數(shù)據(jù)同步的過程存在延遲攒巍。
最終一致性
指系統(tǒng)中所有的數(shù)據(jù)副本,在經(jīng)過一段時間的同步后荒勇,最終能夠達到一個一致的狀態(tài)柒莉。所以,最終一致性的本質(zhì)是需要系統(tǒng)保證最終數(shù)據(jù)能夠達成一致沽翔,而不需要實時保證系統(tǒng)數(shù)據(jù)的強一致性兢孝。
最終一致性是一種特殊的弱一致性:系統(tǒng)能夠保證在沒有其他的更新操作的情況下,數(shù)據(jù)最終一定能夠達到一致的狀態(tài)仅偎,因此所有客戶端對系統(tǒng)的數(shù)據(jù)訪問都能夠獲取到最新的值跨蟹。同時,在沒有發(fā)生故障的前提下哨颂,數(shù)據(jù)達到一致狀態(tài)的時間延遲喷市,取決于網(wǎng)絡(luò)延遲,系統(tǒng)負載和數(shù)據(jù)復(fù)制方案設(shè)計等因素威恼。
最終一致性的變種:
- 因果一致性(Causal consistency):
如果進程A在更新完某個數(shù)據(jù)后通知了進程B,那么進程B之后對該數(shù)據(jù)項的訪問都應(yīng)該能夠獲取到進程A更新后的最新值品姓,并且如果進程B要更新數(shù)據(jù)項,務(wù)必是基于進程A更新后的最新值箫措,即不能發(fā)生丟失更新情況腹备。同時,與進程A無因果關(guān)系的進程C的數(shù)據(jù)訪問則沒有這樣的限制斤蔓。 - 讀己之所寫(Read your writes)
進程A更新一個數(shù)據(jù)項后植酥,它自己總是能訪問到更新過的最新值,而不會看到舊的值弦牡。也就是說友驮,對于單個數(shù)據(jù)獲取來說,讀取到的數(shù)據(jù)一定不會比自己上次寫入的值舊驾锰。所以讀己之所寫也可以看做是一種特殊的因果一致性卸留。 - 會話一致性(Session consistency)
會話一致性將對系統(tǒng)數(shù)據(jù)的訪問過程框定在了一個會話中:系統(tǒng)能保證在同一個有效的會話中實現(xiàn)“讀己之所寫”的一致性,就是說椭豫,執(zhí)行更新操作后耻瑟,客戶端能夠在同一個會話中始終能夠讀到該數(shù)據(jù)項的最新值。 - 單調(diào)讀一致性(Monotonic read consistency)
指如果一個進程從系統(tǒng)中讀取一個數(shù)據(jù)項的某個值后赏酥,那么系統(tǒng)對于該進程后續(xù)的任何數(shù)據(jù)訪問都不應(yīng)該返回更舊的值喳整。 - 單調(diào)寫一致性(Monotonic write consistency)
一個系統(tǒng)需要保證來自同一個進程的寫操作被順序地執(zhí)行。
在實際系統(tǒng)實踐中裸扶,可以將其中的若干個變種互相結(jié)合起來框都,以構(gòu)建一個具有最終一致性特征的分布式系統(tǒng)。除了大型分布式系統(tǒng)會涉及最終一致性呵晨,關(guān)系型數(shù)據(jù)庫也都采用了最終一致性模型瞬项。關(guān)系型數(shù)據(jù)庫大多數(shù)都會采用同步和異步方式來實現(xiàn)主備數(shù)據(jù)復(fù)制技術(shù)蔗蹋。在同步方式中,數(shù)據(jù)的復(fù)制過程通常是更新事務(wù)的一部分囱淋,所以在事務(wù)完成后,主備數(shù)據(jù)庫的數(shù)據(jù)就會達到一致餐塘。在異步方式中妥衣,備庫的更新往往會存在延遲,這取決于事務(wù)日志在主備數(shù)據(jù)庫之間傳輸?shù)臅r間長短戒傻,如果傳輸時間過長甚至在日志傳輸過程中出現(xiàn)異常無法及時將事務(wù)應(yīng)用到備庫上税手,顯然,從備庫中讀取的數(shù)據(jù)將是舊的需纳,這樣就出現(xiàn)了數(shù)據(jù)不一致的情況芦倒。采用多次重試或人為的數(shù)據(jù)訂正,關(guān)系型數(shù)據(jù)庫還是能夠保證最終數(shù)據(jù)達到一致--這就是系統(tǒng)提供最終一致性保證的經(jīng)典案例不翩。
總之兵扬,BASE理論面向的是大型高可用可擴展的分布式系統(tǒng),和傳統(tǒng)的ACID特性是相反的口蝠,不是ACID的強一致性器钟,而是通過犧牲強一致性來獲得可用性,并允許數(shù)據(jù)在一段時間內(nèi)是不一致的妙蔗,但最終會達到一致狀態(tài)傲霸。同時,在實際的分布式場景中眉反,不同的業(yè)務(wù)單元和組件對數(shù)據(jù)一致性的要求是不同的昙啄,在具體的分布式系統(tǒng)架構(gòu)設(shè)計中,ACID特性和BASE理論會結(jié)合在一起用寸五。