BASE 是指基本可用(Basically Available)、軟狀態(tài)( Soft State)、最終一致性( Eventual Consistency),核心思想是即使無法做到強(qiáng)一致性(CAP 的一致性就是強(qiáng)一致性),但應(yīng)用可以采用適合的方式達(dá)到最終一致性。
基本可用(Basically Available)
分布式系統(tǒng)在出現(xiàn)故障時(shí),允許損失部分可用性,即保證核心可用。
這里的關(guān)鍵詞是“部分”和“核心”,具體選擇哪些作為可以損失的業(yè)務(wù),哪些是必須保證的業(yè)務(wù),是一項(xiàng)有挑戰(zhàn)的工作。例如,對于一個(gè)用戶管理系統(tǒng)來說,“登錄”是核心功能,而“注冊”可以算作非核心功能。因?yàn)槲醋缘挠脩舯緛砭瓦€沒有使用系統(tǒng)的業(yè)務(wù),注冊不了最多就是流失一部分用戶,而且這部分用戶數(shù)量較少。如果用戶已經(jīng)注冊但無法登錄,那就意味用戶無法使用系統(tǒng)。例如,充了錢的游戲不能玩了、云存儲(chǔ)不能用了……這些會(huì)對用戶造成較大損失,而且登錄用戶數(shù)量遠(yuǎn)遠(yuǎn)大于新注冊用戶,影響范圍更大。
軟狀態(tài)(Soft State)
允許系統(tǒng)存在中間狀態(tài),而該中間狀態(tài)不會(huì)影響系統(tǒng)整體可用性。即允許系統(tǒng)在不同節(jié)點(diǎn)的數(shù)據(jù)副本之間進(jìn)行數(shù)據(jù)同步的過程存在延時(shí)。這里的中間狀態(tài)就是 CAP 理論中的數(shù)據(jù)不一致。
最終一致性(Eventual Consistency)
系統(tǒng)中的所有數(shù)據(jù)副本經(jīng)過一定時(shí)間后,最終能夠達(dá)到一致的狀態(tài)。
這里的關(guān)鍵詞是“一定時(shí)間” 和 “最終”,“一定時(shí)間”和數(shù)據(jù)的特性是強(qiáng)關(guān)聯(lián)的,不同的數(shù)據(jù)能夠容忍的不一致時(shí)間是不同的。舉一個(gè)微博系統(tǒng)的例子,用戶賬號數(shù)據(jù)最好能在 1 分鐘內(nèi)就達(dá)到一致狀態(tài),因?yàn)橛脩粼?A 節(jié)點(diǎn)注冊或者登錄后,1 分鐘內(nèi)不太可能立刻切換到另外一個(gè)節(jié)點(diǎn),但 10 分鐘后可能就重新登錄到另外一個(gè)節(jié)點(diǎn)了;而用戶發(fā)布的最新微博,可以容忍 30 分鐘內(nèi)達(dá)到一致狀態(tài),因?yàn)閷τ谟脩魜碚f,看不到某個(gè)明星發(fā)布的最新微博,用戶是無感知的,會(huì)認(rèn)為明星沒有發(fā)布微博?!白罱K”的含義就是不管多長時(shí)間,最終還是要達(dá)到一致性的狀態(tài)。
分布式一致性的 3 種級別
- 強(qiáng)一致性 :系統(tǒng)寫入了什么,讀出來的就是什么。
- 弱一致性 :不一定可以讀取到最新寫入的值,也不保證多少時(shí)間之后讀取到的數(shù)據(jù)是最新的,只是會(huì)盡量保證某個(gè)時(shí)刻達(dá)到數(shù)據(jù)一致的狀態(tài)。
- 最終一致性 :弱一致性的升級版,系統(tǒng)會(huì)保證在一定時(shí)間內(nèi)達(dá)到數(shù)據(jù)一致的狀態(tài)。
業(yè)界比較推崇是最終一致性級別,但是某些對數(shù)據(jù)一致要求十分嚴(yán)格的場景比如銀行轉(zhuǎn)賬還是要保證強(qiáng)一致性。文章來源:http://www.zghlxwxcb.cn/news/detail-756718.html
最終一致性怎么保證呢?
- 讀時(shí)修復(fù) : 在讀取數(shù)據(jù)時(shí),檢測數(shù)據(jù)的不一致,進(jìn)行修復(fù)。比如 Cassandra 的 Read Repair 實(shí)現(xiàn),具體來說,在向 Cassandra 系統(tǒng)查詢數(shù)據(jù)的時(shí)候,如果檢測到不同節(jié)點(diǎn) 的副本數(shù)據(jù)不一致,系統(tǒng)就自動(dòng)修復(fù)數(shù)據(jù)。
- 寫時(shí)修復(fù) : 在寫入數(shù)據(jù),檢測數(shù)據(jù)的不一致時(shí),進(jìn)行修復(fù)。比如 Cassandra 的 Hinted Handoff 實(shí)現(xiàn)。具體來說,Cassandra 集群的節(jié)點(diǎn)之間遠(yuǎn)程寫數(shù)據(jù)的時(shí)候,如果寫失敗 就將數(shù)據(jù)緩存下來,然后定時(shí)重傳,修復(fù)數(shù)據(jù)的不一致性。
- 異步修復(fù) : 這個(gè)是最常用的方式,通過定時(shí)對賬檢測副本數(shù)據(jù)的一致性,并修復(fù)。
總結(jié)
BASE 理論本質(zhì)上是對 CAP 的延伸和補(bǔ)充,更具體地說,是對 CAP 中 AP 方案的一個(gè)補(bǔ)充。
上一篇文章在剖析 CAP 理論時(shí),提到了和 BASE 相關(guān)的兩點(diǎn):文章來源地址http://www.zghlxwxcb.cn/news/detail-756718.html
- CAP 理論是忽略延時(shí)的,而實(shí)際應(yīng)用中延時(shí)是無法避免的。
這一點(diǎn)就意味著完美的 CP 場景是不存在的,即使是幾毫秒的數(shù)據(jù)復(fù)制延遲,在這幾毫秒時(shí)間間隔內(nèi),系統(tǒng)是不符合 CP 要求的。因此 CAP 中的 CP 方案,實(shí)際上也是實(shí)現(xiàn)了最終一致性,只是“一定時(shí)間”是指幾毫秒而已。 - AP 方案中犧牲一致性只是指分區(qū)期間,而不是永遠(yuǎn)放棄一致性。
這一點(diǎn)其實(shí)就是 BASE 理論延伸的地方,分區(qū)期間犧牲一致性,但分區(qū)故障恢復(fù)后,系統(tǒng)應(yīng)該達(dá)到最終一致性。
到了這里,關(guān)于分布式理論基礎(chǔ):BASE理論的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!