1.簡述CAP理論

簡介:
CAP理論是分佈式的理論基礎
起初都是單體應用,隨着業務擴展,流量越來越大,單體扛不住高併發,分佈式將業務拆分成子業務部署到不同的機器上,不同的機器節點通過網絡進行通信,協作服務;

分佈式系統必須要考慮網絡分區的問題:
有網絡,就會有網絡交互的問題,假如A節點到B節點網絡不可達,不能影響正常服務,系統要能夠正常提供服務

  • 正常服務的定義
    (1)服務能夠正確返回
    (2)結果在一定的時間範圍內返回

cap理論分為三個部分:

  1. 數據一致性(consistency): 如果系統對一個寫操作返回成功,那麼之後的讀請求都必須讀到這個新數據;如果寫操作返回失敗,那麼之後所有的讀請求都不能讀到這個數據;對於調用者而言數據具有強一致性
  2. 服務可用性(availability):所有讀寫請求在一定時間內得到響應,不會一直等待
  3. 分區容錯性(partition-tolerance):在網絡分區的情況下,被分隔的節點仍然能夠正常對外服務;

場景:
場景1. 單體應用

  • 對於單體應用而言,是不考慮分佈式的,沒有網絡分區,也就是説沒有CAP理論中的P
  • 數據一致性:可以通過事務來保證
  • 服務可用性:不同業務有不同的可用性標準

場景2. 分佈式應用

  • 分佈式應用,必須要包含P,因此CAP理論中,只能保證CP或者是AP,CA不可兼得
  • 有網絡通信,就必然會出現網絡不可達的情況

為什麼CAP三者不能兼得?
(1)存在網絡分區,那麼網絡中的節點之間就有可能數據不一致;比如往節點A中寫入數據,B節點由於網絡原因沒有同步數據過去,如果此時往B節點讀取數據是不能讀到數據的,所以在存在網絡分區的情況下,數據是不可能保持一致的
(2)兩個節點網絡隔離了,想要保證數據一致性只能等待網絡恢復,將數據同步,才能讀取到數據;也就是説如果想要保證數據強一致性,那麼在等待網絡恢復的過程中,是不能對外提供服務的,因此保證CP無法保證A;相應的如果保證AP,是無法保證C的

所以在分佈式框架中,要麼是AP架構要麼是CP架構