在分佈式系統中, 我們經常會提到CAP理論和BASE理論.
其中CAP代表什麼呢?
- C(Consistency): 一致性, 就是說我們部署一套系統, 肯定都是部署在多臺機器上, 形成一個集羣, 而集羣中的各個結點上面的數據要保持一致.
- A(Availability): 可用性, 可用性就是指各個結點都必須保持可用.
- P(Partition tolerance): 分區容錯性, 這點是分佈式系統最基本的要求.
通常我們會說CAP中的C和A不能同時滿足, 爲什麼呢?
首先我們應有個基本的理解, 系統部署在多個結點, 各個結點是需要進行通信, 數據共享的. 假如我們有3個結點.
- 如果滿足C(一致性), 也就是說當Server1收到一條最新的數據, 需要把這條數據廣播到Server2和Server3, 在廣播期間, 爲了保證一致性, Server是不對外保證服務的. 所以在有限時間內, 不能保證所有結點的可用性, 也就是CAP中的A.
- 如果滿足A(可用性), 很顯然, Server1收到一條新的數據更新, 在數據更新到Server2和Server3期間, 如果有新的請求到Server2和Server3, 那麼Server1和Server2或者Server1和Server3之間的數據是不一致的, 也就是滿足不了CAP中的C.
由此可見, CAP有個重要的點是A(可用性), 因爲客戶端請求時有時間限制的, 所以可用性必須是在有限時間內必須保證可用.
那麼BASE理論又是什麼呢?
- Base Available(基本可用),系統在出現不可預知的故障的時候,允許喪失部分可用性
- Soft state, 允許數據存在的中間狀態, 灰度狀態, 過渡狀態
- Eventually consistent,最終一致性