1. 程式人生 > >CAP為什麼不能同時滿足三個特性

CAP為什麼不能同時滿足三個特性

在分散式系統中一致性、可用性、分割槽容錯性不可能三個同時滿足,先來解釋以下這三個原則的意思:
一致性:在分散式系統中的任意一個節點都會查詢到相同的資訊
可用性:服務一直可用,而且是正常響應時間,好的可用性主要是指系統能夠很好的為使用者服務,不出現使用者操作失敗或者訪問超時等使用者體驗不好的情況。
分割槽容錯性:當分散式系統中一部分節點崩潰的時候,當前系統仍舊能夠正常對外提供服務
現在我們來證明以下為什麼分散式系統不能同時滿足上面三個原則:
在這裡插入圖片描述
在上面分散式系統中一共有6個節點可以對外提供服務,A使用者和B使用者分別向節點6和節點4請求服務。
當用戶A通過節點6向系統中新增一個訊息msg,在網路連線良好的情況下,這條訊息很快就會儲存到其他節點上,可是網路是一個不可靠的東西,假設現在節點4和其他節點的網路連線都斷開了,那麼msg這條訊息就不會同步到節點4上,使用者B仍舊向節點4請求查詢msg,現在就有兩種選擇了:
1、保證可用性,使用者B請求時立即返回得到的肯定時null,就無法滿足一致性了
2、保證一致性,使用者B請求時,會阻塞到節點4同步這條訊息為止,無法滿足可用性了
如果我們選擇保證可用性和一致性,那麼就是隻有一個節點提供服務,不會產生其他網路連線,就不滿足分割槽容錯性了。