CAP定理是設計分佈式系統的基礎。web
CAP定理指出分佈式系統不能同時知足如下三個點:網絡
1.一致性(Consistent)tcp
2.可用性(Availability)分佈式
3.分區容忍性(Partition Tolerance)設計
這三點對於設計分佈式的web services是很是重要的。同步
這裏先說一下這三點的含義,要理解它們的含義,首先須要知道CAP定理提出時是針對分佈式的web services系統,這樣一個系統是由N多節點構成,爲了便於說明,咱們假定系統只有兩個節點{N1,N2}。
it
一致性是說在節點上的操做是原子性的,對一個節點上的數據的修改,在全部節點上同步,這期間不能有其餘操做。好比一個在N1上的write操做,必須是原子性的,也即在N1寫完並同時同步到N2上,這整個過程是原子性的,在這個寫的過程當中不能有讀的操做,不然可能讀到不一致的結果(例如N1修改完數據但N2還未同步)。io
可用性是指節點一旦接受到請求(好比web request),必須給予 迴應。迴應的內容能夠是成功取到的數據或者失敗消息。好比N1接到一個請求,必須返回一個請求結果或者失敗結果,若是不給予任何迴應,就違背了可用性。基礎
分區容忍性是指容許節點間丟失任何消息。節點間的通訊會發送消息,這些消息在網絡中可能會丟失,這是客觀存在的。好比N1和N2在一個局域網裏相互發送消息,無論使用什麼協議(tcp,udp等),二者之間均可能丟失消息包,理論上最壞狀況會丟掉全部的包。service
因此CAP定理是說,分佈式系統在有消息丟失的網絡節點間不可能同時保證操做的原子性以及對請求一定給予迴應這一特性。例如知足原子性不能知足可用性的狀況:在N1上寫數據,N2須要同步數據,假設N1和N2之間的消息所有丟失(最壞的狀況),此時N2上的數據不一致,要保證這個寫操做的原子性,須要等到N2上的數據同步完成,此時其餘操做都不能進行,節點接受的請求不能給予迴應,系統知足不了可用性。