到底如何理解CAP


圖片描述

一:概念解析

英文定義:In a distributed system (a collection of interconnected nodes that share data.), you can only have two out of the following three guarantees across a write/read pair: Consistency, Availability, and Partition Tolerance - one of them must be sacrificed.node

關鍵點解釋:網絡

一、互聯和共享數據的情形併發

二、cap關注的是對數據的讀寫操做,而不是分佈式系統的全部功能分佈式

2、約束解析

一、一致性 Consistency高併發

A read is guaranteed to return the most recent write for a given client.

對某個指定的客戶端來講,讀操做保證可以返回最新的寫操做結果spa

二、可用性 Availabilityscala

​ A non-failing node will return a reasonable response within a reasonable amount of time (no error or timeout).設計

​ 非故障的節點在合理的時間內返回合理的響應(不是錯誤和超時的響應)blog

三、分區容錯性 partition tolerancethree

The system will continue to function when network partitions occur.

當出現網絡分區後,系統可以繼續履行職責

3、 要點解析

一、cap的適用場景是副本性的數據,訂單數據和庫存數據狀態不一致不屬於cap討論的範疇

二、P要求分佈式和數據同步,C要求數據徹底一致,A要求返回及時

三、cap中的一致性是線性一致性,指分佈式節點中的數據讀寫一致性,

四、base理論是對CAP中AP方案的一個補充

五、cp系統發生分區時不是徹底的不可用,是主分區仍然可用

4、實戰應用

一、cap關注的粒度是數據,而不是整個系統

用戶帳號數據選擇cp,而用戶信息數據選擇ap

二、cap是忽略網絡延遲的

單個用戶的餘額、單個商品的庫存,理論上要求選擇 CP 而實際上 CP 都作不到,只能選擇 CA。也就是說,只能單點寫入,其餘節點作備份,沒法作到分佈式狀況下多點寫入。

三、正常運行狀況下,不存在cp和ap的選擇,能夠同時知足ca

四、放棄並不等於什麼都不作,須要爲分區恢復後作準備

cp分區恢復後把數據同步到故障節點,達到同時知足CA狀態

ap分區恢復後進行數據合併,達到同時知足CA狀態

5、經典理解

設計分佈式系統的兩大初衷:橫向擴展(scalability)和高可用性(availability)。「橫向擴展」是爲了解決單點瓶頸問題,進而保證高併發量下的「可用性」;「高可用性」是爲了解決單點故障(SPOF)問題,進而保證部分節點故障時的「可用性」。由此能夠看出,分佈式系統的核心訴求就是「可用性」。這個「可用性」正是 CAP 中的 A:用戶訪問系統時,能夠在合理的時間內獲得合理的響應。

爲了保證「可用性」,一個分佈式系統一般由多個節點組成。這些節點各自維護一份數據,可是無論用戶訪問到哪一個節點,原則上都應該讀取到相同的數據。爲了達到這個效果,一個節點收到寫入請求更新本身的數據後,必須將數據同步到其餘節點,以保證各個節點的數據「一致性」。這個「一致性」正是 CAP 中的 C:用戶訪問系統時,能夠讀取到最近寫入的數據。

須要注意的是:CAP 並無考慮數據同步的耗時,因此現實中的分佈式系統,理論上沒法保證任什麼時候刻的絕對「一致性」;不一樣業務系統對上述耗時的敏感度不一樣。

分佈式系統中,節點之間的數據同步是基於網絡的。因爲網絡自己固有的不可靠屬性,極端狀況下會出現網絡不可用的狀況,進而將網絡兩端的節點孤立開來,這就是所謂的「網絡分區」現象。「網絡分區」理論上是沒法避免的,雖然實際發生的機率較低、時長較短。沒有發生「網絡分區」時,系統能夠作到同時保證「一致性」和「可用性」。

發生「網絡分區」時,系統中多個節點的數據必定是不一致的,可是能夠選擇對用戶表現出「一致性」,代價是犧牲「可用性」:將未能同步獲得新數據的部分節點置爲「不可用狀態」,訪問到這些節點的用戶顯然感知到系統是不可用的。發生「網絡分區」時,系統也能夠選擇「可用性」,此時系統中各個節點都是可用的,只是返回給用戶的數據是不一致的。這裏的選擇,就是 CAP 中的 P。

分佈式系統理論上必定會存在 P,因此理論上只能作到 CP 或 AP。若是套用 CAP 中離散的 C/A/P 的概念,理論上沒有 P 的只多是單點(子)系統,因此理論上能夠作到 CA。可是單點(子)系統並非分佈式系統,因此其實並不在 CAP 理論的描述範圍內。

圖片描述

相關文章
相關標籤/搜索