CAP和BASE理論

摘要: 本文介紹了CAP理論和在其基礎上延伸的BASE理論,之後描述了ACID和BASE的區別與聯繫


1. CAP理論

2000年7月,加州大學伯克利分校的Eric Brewer教授在ACM PODC會議上提出CAP猜想。2年後,麻省理工學院的Seth Gilbert和Nancy Lynch從理論上證明了CAP。之後,CAP理論正式成爲分佈式計算領域的公認定理。

CAP理論爲:一個分佈式系統最多隻能同時滿足一致性(Consistency)、可用性(Availability)和分區容錯性(Partition tolerance)這三項中的兩項。

1.1 一致性(Consistency)

一致性指“all nodes see the same data at the same time”,即更新操作成功並返回客戶端完成後,所有節點在同一時間的數據完全一致。

1.2 可用性(Availability)

可用性指“Reads and writes always succeed”,即服務一直可用,而且是正常響應時間。

1.3 分區容錯性(Partition tolerance)

分區容錯性指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分佈式系統在遇到某節點或網絡分區故障的時候,仍然能夠對外提供滿足一致性和可用性的服務。

2. CAP權衡

通過CAP理論,我們知道無法同時滿足一致性、可用性和分區容錯性這三個特性,那要捨棄哪個呢?

對於多數大型互聯網應用的場景,主機衆多、部署分散,而且現在的集羣規模越來越大,所以節點故障、網絡故障是常態,而且要保證服務可用性達到N個9,即保證P和A,捨棄C(退而求其次保證最終一致性)。雖然某些地方會影響客戶體驗,但沒達到造成用戶流程的嚴重程度。

對於涉及到錢財這樣不能有一絲讓步的場景,C必須保證。網絡發生故障寧可停止服務,這是保證CA,捨棄P。貌似這幾年國內銀行業發生了不下10起事故,但影響面不大,報到也不多,廣大羣衆知道的少。還有一種是保證CP,捨棄A。例如網絡故障事只讀不寫。

孰優孰略,沒有定論,只能根據場景定奪,適合的纔是最好的。

3. BASE理論

eBay的架構師Dan Pritchett源於對大規模分佈式系統的實踐總結,在ACM上發表文章提出BASE理論,BASE理論是對CAP理論的延伸,核心思想是即使無法做到強一致性(Strong Consistency,CAP的一致性就是強一致性),但應用可以採用適合的方式達到最終一致性(Eventual Consitency)。

BASE是指基本可用(Basically Available)、軟狀態( Soft State)、最終一致性( Eventual Consistency)。

3.1 基本可用(Basically Available)

基本可用是指分佈式系統在出現故障的時候,允許損失部分可用性,即保證核心可用。

電商大促時,爲了應對訪問量激增,部分用戶可能會被引導到降級頁面,服務層也可能只提供降級服務。這就是損失部分可用性的體現。

3.2 軟狀態( Soft State)

軟狀態是指允許系統存在中間狀態,而該中間狀態不會影響系統整體可用性。分佈式存儲中一般一份數據至少會有三個副本,允許不同節點間副本同步的延時就是軟狀態的體現。mysql replication的異步複製也是一種體現。

3.3 最終一致性( Eventual Consistency)

最終一致性是指系統中的所有數據副本經過一定時間後,最終能夠達到一致的狀態。弱一致性和強一致性相反,最終一致性是弱一致性的一種特殊情況。

4. ACID和BASE的區別與聯繫

ACID是傳統數據庫常用的設計理念,追求強一致性模型。BASE支持的是大型分佈式系統,提出通過犧牲強一致性獲得高可用性。

ACID和BASE代表了兩種截然相反的設計哲學

在分佈式系統設計的場景中,系統組件對一致性要求是不同的,因此ACID和BASE又會結合使用。

發佈了221 篇原創文章 · 獲贊 53 · 訪問量 121萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章