一、爲什麼分佈式系統要麼是CP要麼是AP呢?
1、分佈式系統:分佈式系統是一個硬件或軟件組件分佈在不同的網絡計算機上,彼此之間僅僅通過消息傳遞進行通信和協調的系統。
2、從分佈式系統的定義可知,分佈式是建立在網絡之上的,既然有網絡,那麼肯定會存在網絡出現問題的情況,那意味着我們在設計分佈式系統的時候,必須要考慮的一個點就是:如果網絡出現了問題,那麼我們的系統應該怎麼做。
3、分區:
一個分佈式系統裏面數據存儲在各個節點裏面,節點組成的網絡正常情況下都是連通的。如果因爲一些故障導致有些節點之間無法連通,則整個網絡就分成了幾個區域,這些不連通的區域就是分區。
4、當我們的數據只在系統中某一個節點中保存,那麼當分區出現後,那麼這個不連通的節點上面保存的數據就無法被用戶訪問了,這叫做分區無容錯性,給用戶的直觀感覺就是數據丟了或者數據無法寫入了,這要比看到不是最新的數據要嚴重的多。
5、那麼提高分區容忍性的辦法就是同時存在多個節點保存同一份數據,這樣當分區出現之後,這一份數據項就可能在多個分區裏面存在,容錯性就提高了。
6、如果要把數據複製到多個節點,帶來的問題就是一致性,就是多個節點上面的數據可能是不一致的。要保證一致,每次寫操作就都要等待全部節點寫成功,而這等待又會帶來可用性的問題,也即一段時間內,系統是不可讀的。
二、CAP的解釋:
1、一致性(Consistency):(等同於所有節點訪問同一份最新的數據副本)
2、可用性(Availability):(每次請求都能獲取到非錯的響應——但是不保證獲取的數據爲最新數據)
3、分區容錯性(Partition tolerance):(以實際效果而言,分區相當於對通信的時限要求。系統如果不能在時限內達成數據一致性,就意味着發生了分區的情況,必須就當前操作在C和A之間做出選擇,保證分佈式網絡中部分網絡不可用時, 系統依然正常對外提供服務。
三、分佈式與集羣
1、分佈式(distributed)是指在多臺不同的服務器中部署不同的服務模塊,通過遠程調用協同工作,對外提供服務。
2、集羣(cluster)是指在多臺不同的服務器中部署相同應用或服務模塊,構成一個集羣,通過負載均衡設備對外提供服務。