大白話圖文結合的方式講解什麼是CAP

一、什麼是CAP

是一種定理,多用於描述分佈式架構,CAP這三個字母對應三種理念,且這三種理念只能兩兩組合,不能CAP三種理念同時共存(爲什麼?下面說)。

  • C:Consisteny(一致性)
  • A:Availability(可用性)
  • P:Partition Tolerance(分區容錯性)
    在這裏插入圖片描述

二、細說CAP

  • C:Consisteny(一致性),比如數據庫是主從模式,一個寫庫請求進來了,master庫完成了寫入操作,但是再slave同步數據之前,另一個用戶查了這條數據,結果沒查到,但是也沒報錯,這就不是強一致性。雖然最終會同步成功,但這是最終一致性的體現。強一致性的體現在於我不管你因爲什麼沒同步成功(可能網絡延遲或其他等),只要沒同步成功,我這個slave就不能對外提供服務。必須主從數據一致纔可以提供服務。(很少有做到這點的)
  • A:Availability(可用性),還是上面的例子,就是保證了可用性。因爲雖然主從沒同步完成,但是我從庫照樣能提供服務而且及時響應結果。也就是說可用性保證服務可用,而不在乎數據是否一致。明顯和C是衝突的,那CA怎麼還能組合到一起?後面說。
  • P:Partition Tolerance(分區容錯性),集羣部署了三臺服務。掛了一臺,其他兩臺還能繼續對外提供服務,這時候我就認爲他是沒問題的,也就是我能容忍你掛了一臺,只要還有服務能對外提供請求即可。所以一般分區容忍性是必須的,一般都需要從C和A之間做選擇。

三、CAP組合

1、CP

即一致性和分區容忍性。

在這裏插入圖片描述
把節點A和節點B理解成mysq主從的話,那麼就是A和B之間不能互相通訊,網絡出問題了,當有客戶端向A寫入msg1的時候,會直接失敗,因爲C要保證A和B兩個節點之間的數據強一致性。
假如有另一個客戶端向B節點進行讀取msg2消息的時候,B返回是成功的,因爲msg2節點是A和B之間網絡通順時存在的老數據,數據是一致的。這就是雖然你A不可用,但是我B還能提供服務,這就保證了分區容忍性。

2、AP

即可用性和分區容忍性。

在這裏插入圖片描述
節點A和B之間不能互相通訊,當有客戶端向A節點寫入msg1的時候,節點A允許 寫入,請求操作成功,但此時由於A和B不能通信,所以導致B節點的msg1的數據是舊的,或者根本不存在。但是另一個客戶端向B節點讀取msg1的時候是可以成功的,要麼讀到的是舊數據要麼讀取不到。但是服務是可用的,只是數據可能有問題。這就保證了可用性,捨棄了強一致性。

3、CA

CA的話我只能想到單機上是可以保證的,一臺機器數據肯定一致,服務肯定可用。不可用的時候服務也不能用,也能保證一致性。單臺機器也沒有分區容錯性的概念。所以完美CA。

四、個人公衆號

微信公衆號【Java碼農社區】
在這裏插入圖片描述

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