【分散式】CAP理論及其應用

gonghr 發表於 2021-07-17

CAP Theorem

  • CAP 指的就是 "consistency 一致性","availability 可用性" "partition-tolerance分割槽容錯性".

  • consistency: 一致性是指寫操作後的讀操作可以讀取到最新的資料狀態,當資料分佈在多個節點上,從任意結點讀取到的資料都是最新的狀態。
    特點

    • 由於資料同步過程,寫操作的響應存在一定的延遲
    • 為了保證資料一致性會對資源進行暫時鎖定,待資料同步完成釋放鎖資源
    • 如果請求資料同步失敗的結點則會返回錯誤資訊,一定不會返回舊資料。
  • availability: 可用性是指任何事務操作都可以得到響應結果,且不會出現響應超時或響應錯誤。
    特點

    • 所有請求都有響應,且不會出現響應超時或響應錯誤。
  • partition-tolerance:網路中斷等問題發生後系統能正常工作,提供服務,保證一致性和可用性,不同分割槽之間資料同步時不影響分割槽資料的讀寫操作。一般來說,分割槽容錯無法避免,因此可以認為 CAP 的 P 總是成立。所以在CAP原則裡面,分割槽容錯性是必須要有的
    特點

    • 分割槽容忍性分是布式系統具備的基本能力。

image

  • 一致性、可用性和分割槽容錯性不可能同時全部滿足。最多隻能滿足其中兩個。一致性和可用性是相互矛盾的,一般只能滿足其中之一。

CAP組合方式

  • AP:犧牲了資料一致性,追求可用性和分割槽容錯性。可能導致全域性資料不一致。客戶端發出請求之後,為了保證可用性,得到的響應可能是舊的資料,因為資料的同步需要時間,但在某些情況下舊資料也是可以接受的,通常實現AP都會保證最終一致性。比如訂單退款操作,使用者申請退款以後,得到資訊”今日退款成功,明日賬戶到賬“,只要使用者接受在一定時間內到賬即可。AP的應用也比較廣泛,主要好處是可以保證資料傳遞的時效性,提高使用者體驗。AP是最常見的模型。

  • CP : 放棄可用性,追求一致性和分割槽容錯性。屬於強一致性。等待資料同步完才能正常訪問服務,保證使用者得到的資料一定是最新的,否則不返回資料。一旦發生網路故障或者訊息丟失等情況,就要犧牲使用者的體驗。舉個例子,銀行跨行轉賬時,一次轉賬需要等待雙方銀行都完成整個事務的時候才算完成,這種應用場景常見於金融系統。應用有Redis、zookeeper等。

  • CA:放棄了分割槽容錯性,保證了一致性和可用性。這就不屬於一個嚴格的分散式系統了,任何一個分割槽伺服器出故障,都可能導致整個系統的崩潰。關係型資料庫滿足CA,比如Oracle、MySQL。

  • 以上所寫的”犧牲、放棄“等並不是表示完全怕拋棄某一個特性,而是表示降低對該特性的要求,提高另外對兩個特性的要求

CAP理論在資料庫領域的應用

image

附錄

提供一篇HP的關於分散式的論文以供參考
image

image

image

image

image

image

image

image

image