CAP是Consistency、Availability、Partition tolerance三個詞語的縮寫,分别表示一緻性、可用性、分區容忍性。
為了方便對CAP理論的理解,我們結合電商系統中的一些業務場景來理解CAP。
一緻性是指寫操作後的讀操作可以讀取到最新的數據狀态,當數據分布在多個節點上時,從任意節點上讀取的數據都是最新的。
上圖中,商品信息的讀寫要滿足一緻性就要實現下面的目标:
商品服務成功寫入主數據庫後,立刻能從從數據庫中查詢到最新的數據。
如何實現一緻性?
- 數據寫入主數據庫後要立即将數據同步到從數據庫。
- 在主從同步期間要将從數據庫鎖定,待同步完成後再釋放鎖,以免在同步期間,在從數據庫中讀取到舊數據。
- Availability(可用性)
可用性是指任何事務操作都可以得到響應結果,且不會出現響應超時或響應錯誤。
上圖中,商品信息的讀寫要滿足可用性就要實現下面的目标:
- 從數據庫接收到查詢請求需立即返回響應數據。
- 從數據庫不允許出現響應超時或響應錯誤。
如何實現可用性?
- 主從同步期間,不可将從數據庫中的資源鎖定。
- 即使數據還沒有同步過來,從數據庫也要返回要查詢的數據,哪怕是舊數據也行。
- Partition tolerance(分區容忍性)
通常分布式系統的各個節點部署在不同的子網,這就是網絡分區;因為網絡分區存在,那麼不可避免地會出現由于網絡問題而導緻節點之間通信失敗,此時系統仍可對外提供服務,這就叫分區容忍性。
上圖中,商品信息的讀寫要滿足分區容忍性就要實現下面的目标:
- 主從同步失敗不能影響讀寫操作。
- 其中一個節點挂掉不影響另一個節點對外提供服務。
如何實現分區容忍性?
- 盡量使用異步操作取代同步操作。例如使用異步方式将數據從主數據庫同步到從數據庫,這樣節點之間能有效地實現松耦合。
- 添加從數據庫節點,其中一個從節點挂掉時,其他從節點提供服務。
注意:分區容忍性是分布式系統應具備的基本能力。
CAP組合方式在所有分布式事務場景中不會同時具備CAP三個特性,因為在具備了P的前提下C和A是不能共存的。
- AP
放棄一緻性,追求可用性和分區容忍性。這是很多分布式系統設計時的選擇。
例如上面的商品服務,完全可以實現AP,前提是用戶可以接受所查詢的數據在一定時間内不是最新的。
通常實現AP時都會保證最終一緻性。BASE理論就是根據AP來擴展的。
- CP
放棄可用性,追求一緻性和分區容忍性。zookeeper其實就是追求的強一緻性。
- CA
一般分布式系統不會采用。
總結CAP是一個已經被證實的理論:一個分布式系統最多隻能同時滿足一緻性(Consistency)、可用性(Availability)和分區容忍性(Partition tolerance)這三項中的兩項。它可以作為我們進行架構設計、技術選型的考量标準。對于多數大型互聯網系統,節點衆多、部署分散,節點故障和網絡故障都是常态,而且要保證服務可用性達到N個9(99.99....%),并且要達到良好的響應性能,因此一般都會做出如下選擇:保證P和A,舍棄C,保證最終一緻性。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!