舉個例子。假設一個叢集系統中就存儲着一條資料(比如這條資料代表所有人支付寶的總額,所有人都秉承共産主義理念往這個賬戶裡存錢取錢)。這個系統可能有多個客服姑娘(client) 對外服務,響應外部對資料的讀寫請求(讀:看看現在總額多少呀;寫:轉入或轉出資金),而系統内部則是一個個真正幹活的勞工(host),負責接受客服姑娘的對資料的詢問和按照姑娘的訓示修改資料。假設在某個時間點,有幾個客戶同時打電話詢問現在總額多少啊。每個客服在完成服務的過程中,需要詢問若幹個勞工才能得到答案來作出判斷,最終回報給客戶;并且每個客服在此過程中使用到若幹勞工非常可能是不一樣的。比如,客服1用到了勞工1,勞工2,勞工3;客服2用到了勞工1,勞工4,勞工5;而且每個勞工可能知道的資料也是不一樣(比如勞工5在某個時間點去上廁所了,沒有聽到把總額加100的要求)。但是盡管可能有部分勞工擁有的資料是過時的(就目前情況來看是錯誤的),但是客服1和客服2通過擷取這些勞工的回應後判斷出來的結果是一樣的,這是一緻性的一個基本要求(讀一緻性)。是以你看到,怎麼能夠保證客服1 客服2的判斷出來的是一樣的呢?最低要求就是有勞工總數一半以上的勞工回複的結果是一樣的可以,也就是說叢集中保證有一半以上的資料是一緻的就可以,這樣就能滿足響應對外讀取服務的一緻性。至于内部的不一緻的勞工,通過一定機制同步一下就可以達到一緻(比如在某個時間點互相廣播一下目前最新記錄的時間戳,落後的自動去跟别人擷取落下的這段時間的增量日志,然後按照增量日志對自己的記錄進行更新)
參考:zab協定與paxos協定為什麼隻保證超過半數的機器保持同步?那剩下的機器是不是會出現不一緻的問題?