tft每日頭條

 > 圖文

 > cap理論支持什麼

cap理論支持什麼

圖文 更新时间:2024-07-03 18:17:03

CAP理論是分布式系統的基礎理論,處理分布式系統問題需要理解CAP理論。

1、理解CAP

CAP是 Consistency、Availability、Partition tolerance三個詞語的縮寫,分别表示一緻性、可用性、分區容忍性。

下面我們分别來解釋:

​ 為了方便對CAP理論的理解,我們結合電商系統中的一些業務場景來理解CAP。

​ 如下圖,是商品信息管理的執行流程:

cap理論支持什麼(徹底搞清楚什麼是CAP理論)1

​ 整體執行流程如下:

​ 1、商品服務請求主數據庫寫入商品信息(添加商品、修改商品、删除商品)

​ 2、主數據庫向商品服務響應寫入成功。

​ 3、商品服務請求從數據庫讀取商品信息。

C - Consistency

​ 一緻性是指寫操作後的讀操作可以讀取到最新的數據狀态,當數據分布在多個節點上,從任意結點讀取到的數據都是最新的狀态。

​ 上圖中,商品信息的讀寫要滿足一緻性就是要實現如下目标:

​ 1、商品服務寫入主數據庫成功,則向從數據庫查詢新數據也成功。

​ 2、商品服務寫入主數據庫失敗,則向從數據庫查詢新數據也失敗。

​ 如何實現一緻性?

​ 1、寫入主數據庫後要将數據同步到從數據庫。

​ 2、寫入主數據庫後,在向從數據庫同步期間要将從數據庫鎖定,待同步完成後再釋放鎖,以免在新數據寫入成功後,向從數據庫查詢到舊的數據。

​ 分布式系統一緻性的特點:

​ 1、由于存在數據同步的過程,寫操作的響應會有一定的延遲。

​ 2、為了保證數據一緻性會對資源暫時鎖定,待數據同步完成釋放鎖定資源。

​ 3、如果請求數據同步失敗的結點則會返回錯誤信息,一定不會返回舊數據。

A - Availability

​ 可用性是指任何事務操作都可以得到響應結果,且不會出現響應超時或響應錯誤。

​ 上圖中,商品信息讀取滿足可用性就是要實現如下目标:

​ 1、從數據庫接收到數據查詢的請求則立即能夠響應數據查詢結果。

​ 2、從數據庫不允許出現響應超時或響應錯誤。

​ 如何實現可用性?

​ 1、寫入主數據庫後要将數據同步到從數據庫。

​ 2、由于要保證從數據庫的可用性,不可将從數據庫中的資源進行鎖定。

​ 3、即時數據還沒有同步過來,從數據庫也要返回要查詢的數據,哪怕是舊數據,如果連舊數據也沒有則可以按照約定返回一個默認信息,但不能返回錯誤或響應超時。

​ 分布式系統可用性的特點:

​ 1、 所有請求都有響應,且不會出現響應超時或響應錯誤。

P - Partition tolerance

​ 通常分布式系統的各個結點部署在不同的子網,這就是網絡分區,不可避免的會出現由于網絡問題而導緻結點之間通信失敗,此時仍可對外提供服務,這叫分區容忍性。

​ 上圖中,商品信息讀寫滿足分區容忍性就是要實現如下目标:

​ 1、主數據庫向從數據庫同步數據失敗不影響讀寫操作。

​ 2、其一個結點挂掉不影響另一個結點對外提供服務。

​ 如何實現分區容忍性?

​ 1、盡量使用異步取代同步操作,例如使用異步方式将數據從主數據庫同步到從數據,這樣結點之間能有效地實現松耦合。

​ 2、添加從數據庫結點,其中一個從結點挂掉其它從結點提供服務。

​ 分布式分區容忍性的特點:

​ 1、分區容忍性分是布式系統具備的基本能力。

2、CAP組合方式

​ 1、上邊商品管理的例子是否同時具備 CAP呢?

在所有分布式事務場景中不會同時具備CAP三個特性,因為在具備了P的前提下C和A是不能共存的。

​ 比如:

​ 下圖滿足了P即表示實現分區容忍:

cap理論支持什麼(徹底搞清楚什麼是CAP理論)2

本圖分區容忍的含義是:

1)主數據庫通過網絡向從數據同步數據,可以認為主從數據庫部署在不同的分區,通過網絡進行交互。

2)當主數據庫和從數據庫之間的網絡出現問題不影響主數據庫和從數據庫對外提供服務。

3)其一個結點挂掉不影響另一個結點對外提供服務。

如果要實現C則必須保證數據一緻性,在數據同步的時候為防止向從數據庫查詢不一緻的數據則需要将從數據庫數據鎖定,待同步完成後解鎖,如果同步失敗從數據庫要返回錯誤信息或超時信息。

如果要實現A則必須保證數據可用性,不管任何時候都可以向從數據查詢數據,則不會響應超時或返回錯誤信息。

通過分析發現在滿足P的前提下C和A存在矛盾性。

2、CAP有哪些組合方式呢?

​ 所以在生産中對分布式事務處理時要根據需求來确定滿足CAP的哪兩個方面。

​ 1)AP:

​ 放棄一緻性,追求分區容忍性和可用性。這是很多分布式系統設計時的選擇。

​ 例如:

​ 上邊的商品管理,完全可以實現AP,前提是隻要用戶可以接受所查詢的到數據在一定時間内不是最新的即可。

​ 通常實現AP都會保證最終一緻性,後面講的BASE理論就是根據AP來擴展的,一些業務場景 比如:訂單退款,今日退款成功,明日賬戶到賬,隻要用戶可以接受在一定時間内到賬即可。

​ 2)CP:

​ 放棄可用性,追求一緻性和分區容錯性,我們的zookeeper其實就是追求的強一緻,又比如跨行轉賬,一次轉賬請求要等待雙方銀行系統都完成整個事務才算完成。

​ 3)CA:

​ 放棄分區容忍性,即不進行分區,不考慮由于網絡不通或結點挂掉的問題,則可以實現一緻性和可用性。那麼系統将不是一個标準的分布式系統,我們最常用的關系型數據就滿足了CA。

​ 上邊的商品管理,如果要實現CA則架構如下:

cap理論支持什麼(徹底搞清楚什麼是CAP理論)3

​ 主數據庫和從數據庫中間不再進行數據同步,數據庫可以響應每次的查詢請求,通過事務隔離級别實現每個查詢請求都可以返回最新的數據。

3、總結

​ 通過上面我們已經學習了CAP理論的相關知識,CAP是一個已經被證實的理論:一個分布式系統最多隻能同時滿足一緻性(Consistency)、可用性(Availability)和分區容忍性(Partition tolerance)這三項中的兩項。它可以作為我們進行架構設計、技術選型的考量标準。對于多數大型互聯網應用的場景,結點衆多、部署分散,而且現在的集群規模越來越大,所以節點故障、網絡故障是常态,而且要保證服務可用性達到N個9(99.99..%),并要達到良好的響應性能來提高用戶體驗,因此一般都會做出如下選擇:保證P和A,舍棄C強一緻,保證最終一緻性。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved