分佈式系統中的CAP原理

分佈式系統中的CAP原理

簡介

在分佈式系統中,我們經常聽到CAP原理這個詞,它是什麼意思呢?其實和C、A、P這3個字母有關,C、A、P分別是這3個詞的首字母。下面我們就看一下這3個詞分別是什麼意思?

  • C - Consistent ,一致性。具體是指,操作成功以後,所有的節點,在同一時間,看到的數據都是完全一致的。所以,一致性,說的就是數據一致性。
  • A - Availability ,可用性。指服務一致可用,在規定的時間內完成響應。
  • P - Partition tolerance ,分區容錯性。指分佈式系統在遇到某節點或網絡分區故障的時候,仍然能夠對外提供服務。
    圖片描述

CAP原理指出,這3個指標不能同時滿足,最多隻能滿足其中的兩個。

詳解

我們之所以使用分佈式系統,就是爲了在某個節點不可用的情況下,整個服務對外還是可用的,這正是滿足P(分區容錯性)。如果我們的服務不滿足P(分區容錯性),那麼我們的系統也就不是分佈式系統了,所以,在分佈式系統中,P(分佈容錯性)總是成立的。那麼,A(可用性)和C(一致性)能不能同時滿足呢?我們看一下下面的圖例。
圖片描述

A和B是兩個數據節點,A向B同步數據,並且作爲一個整體對外提供服務。由於我們的系統保證了P(分區容錯性),那麼A和B的同步,我們允許出現故障。接下來我們再保證A(可用性),也就是說A和B同步出現問題時,客戶端還能夠訪問我們的系統,那麼客戶端既可能訪問A也可能訪問B,這時,A和B的數據是不一致的,所以C(一致性)不能滿足。

如果我們滿足C(一致性),也就是說客戶端無論訪問A還是訪問B,得到的結果都是一樣的,那麼現在A和B的數據不一致,需要等到A和B的數據一致以後,也就是同步恢復以後,纔可對外提供服務。這樣我們雖然滿足了C(一致性),卻不能滿足A(可用性)。

所以,我們的系統在滿足P(分區容錯性)的同時,只能在A(可用性)和C(一致性)當中選擇一個不能CAP同時滿足。我們的分佈式系統只能是AP或者CP。

ACID與BASE

在關係型數據庫中,最大的特點就是事務處理,也就是ACID。ACID是事務處理的4個特性。

  • A - Atomicity(原子性),事務中的操作要麼都做,要麼都不做。
  • C - Consistency(一致性),系統必須始終處在強一致狀態下。
  • I - Isolation(隔離性),一個事務的執行不能被其他事務所幹擾。
  • D - Durability(持久性),一個已提交的事務對數據庫中數據的改變是永久性的。

ACID強調的是強一致性,要麼全做,要麼全不做,所有的用戶看到的都是一致的數據。傳統的數據庫都有ACID特性,它們在CAP原理中,保證的是CA。但是在分佈式系統大行其道的今天,滿足CA特性的系統很難生存下去。ACID也逐漸的向BASE轉換。那麼什麼是BASE呢?

BASE是Basically Available(基本可用), Soft-state(軟狀態), Eventually consistent(最終一致)的縮寫。

  • Basically Available,基本可用是指分佈式系統在出現故障的時候,允許損失部分可用性,即保證核心可用。電商大促時,爲了應對訪問量激增,部分用戶可能會被引導到降級頁面,服務層也可能只提供降級服務。這就是損失部分可用性的體現。
  • 軟狀態( Soft State)
    軟狀態是指允許系統存在中間狀態,而該中間狀態不會影響系統整體可用性。分佈式存儲中一般一份數據至少會有兩到三個副本,允許不同節點間副本同步的延時就是軟狀態的體現。mysql replication的異步複製也是一種體現。
  • 最終一致性( Eventual Consistency)
    最終一致性是指系統中的所有數據副本經過一定時間後,最終能夠達到一致的狀態。弱一致性和強一致性相反,最終一致性是弱一致性的一種特殊情況。

BASE模型是傳統ACID模型的反面,不同與ACID,BASE強調犧牲高一致性,從而獲得可用性,數據允許在一段時間內的不一致,只要保證最終一致就可以了

在分佈式事務的解決方案中,它們都是依賴了ACID或者BASE的模型而實現的。像基於XA協議的兩階段提交和實物補償機制就是基於ACID實現的。而基於本地消息表和基於MQ的最終一致方案都是通過BASE原理實現的。這幾種分佈式事務的解決方案,我們會在視頻的課程中給大家講解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章