天天看點

CAP 理論常被解釋為一種“三選二”定律,這是否是一種誤解?

原始來源: CAP 理論常被解釋為一種“三選二”定律,這是否是一種誤解?

作者:facetothefate

連結:https://www.zhihu.com/question/64778723/answer/224266038

來源:知乎

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

  是誤解,一般來說 P 是前提。是以基本是CA裡選,不是任意3選2.是誤解,一般來說 P 是前提。是以基本是CA裡選,不是任意3選2.

  為什麼呢?

  P 意指分區容忍性。 這個分區容忍性什麼意思,很多人容易望文生義,不要見風就是雨,了解成别的什麼意思。所謂分區指的是網絡分區的意思,這個一樣還是容易望文生義。詳細一點解釋,比如你有A B兩台伺服器,它們之間是有通信的,突然,不知道為什麼,它們之間的網絡連結斷掉了。好了,那麼現在本來AB在同一個網絡現在發生了網絡分區,變成了A所在的A網絡和B所在的B網絡。所謂的分區容忍性,就是說一個資料服務的多台伺服器在發生了上述情況的時候,依然能繼續提供服務。

  是以顯而易見的,P是大前提,如果P發生了,咱們的資料服務直接不服務了,還談個毛的可用性和一緻性呢。

  是以CAP要解釋成,當P發生的時候,A和C隻能而選一。

  舉個簡單的例子,A伺服器B伺服器同步資料,現在A B之間網絡斷掉了,那麼現在發來A一個寫入請求,但是B卻沒有相關的請求,顯然,如果A不寫,保持一緻性,那麼我們就失去了A的服務,但是如果A寫了,跟B的資料就不一緻了,我們自然就喪失了一緻性。

  這裡設計就涉及到架構師的選擇了。注意這裡的一緻性是強一緻性,意思是AB的資料時刻都是同步的,如果我們放棄了強一緻性,不代表我們的資料就是一定是不一緻的了,我們可以讓A先寫入本地,等到通信恢複了再同步給B,這就是所謂的最終一緻性,長遠的看我們的資料還是一緻的,我們隻是在某一個時間視窗裡資料不一緻罷了。如果這個時間視窗小過了使用者邏輯處理的時間。那麼其實對于使用者來說根本毛都感覺不到。

  最終一緻性有個很有意思的協定叫gossip就跟傳八卦一個意思,我就把我收到裡資訊裡我本地沒有的部分加到我本地,再把這個資訊發出去,那麼長遠的看,網絡時好時壞,但是最終所有人都會有所有的資訊。是以我們還是能夠保證資料的最終一緻性的。綜上,CAP應該描述成,當發生網絡分區的時候,如果我們要繼續服務,那麼強一緻性和可用性隻能2選1。

繼續閱讀