CAP介绍
CAP定理
CAP 定理,又被叫作布魯爾定理。對于設計分布式系統(不僅僅是分布式事務)的架構師來說,CAP 就是你的入門理論。
C (一致性):對某個指定的客戶端來說,讀操作能返回最新的寫操作。
對于數據分布在不同節點上的數據來說,如果在某個節點更新了數據,那么在其他節點如果都能讀取到這個最新的數據,那么就稱為強一致,如果有某個節點沒有讀取到,那就是分布式不一致。
A (可用性):非故障的節點在合理的時間內返回合理的響應(不是錯誤和超時的響應)。可用性的兩個關鍵一個是合理的時間,一個是合理的響應。
合理的時間指的是請求不能無限被阻塞,應該在合理的時間給出返回。合理的響應指的是系統應該明確返回結果并且結果是正確的,這里的正確指的是比如應該返回 50,而不是返回 40。
P (分區容錯性):當出現網絡分區后,系統能夠繼續工作。打個比方,這里集群有多臺機器,有臺機器網絡出現了問題,但是這個集群仍然可以正常工作。
熟悉 CAP 的人都知道,三者不能共有,如果感興趣可以搜索 CAP 的證明,在分布式系統中,網絡無法 100% 可靠,分區其實是一個必然現象。
如果我們選擇了 CA 而放棄了 P,那么當發生分區現象時,為了保證一致性,這個時候必須拒絕請求,但是 A 又不允許,所以分布式系統理論上不可能選擇 CA 架構,只能選擇 CP 或者 AP 架構。
對于 CP 來說,放棄可用性,追求一致性和分區容錯性,我們的 ZooKeeper 其實就是追求的強一致。
對于 AP 來說,放棄一致性(這里說的一致性是強一致性),追求分區容錯性和可用性,這是很多分布式系統設計時的選擇,后面的 BASE 也是根據 AP 來擴展。
順便一提,CAP 理論中是忽略網絡延遲,也就是當事務提交時,從節點 A 復制到節點 B 沒有延遲,但是在現實中這個是明顯不可能的,所以總會有一定的時間是不一致。
同時 CAP 中選擇兩個,比如你選擇了 CP,并不是叫你放棄 A。因為 P 出現的概率實在是太小了,大部分的時間你仍然需要保證 CA。
就算分區出現了你也要為后來的 A 做準備,比如通過一些日志的手段,是其他機器回復至可用。
?
總結