精確的三性質模型
論文針對 read/write data object 分別定義 atomic consistency、availability 與 partition tolerance,避免把定理擴張到一致性的所有含義,或可用性的所有營運定義。
CAP 的形式化結果:在可能遺失訊息的非同步服務中,無法同時保證原子一致性與可用性。
Gilbert 與 Lynch 將 Brewer 猜想形式化為一個由網路節點複寫的 read/write data object。他們分別定義 atomic consistency、availability 與 partition tolerance,再以不可區分性建構證明:非同步實作無法同時保證三者。當分割一側已完成寫入,另一側的讀取若收不到該資訊,就只能在「未得知寫入便回應」與「無法終止」之間擇一。論文接著研究部分同步模型,說明有界的時序假設如何容許實用折衷;但在原定義的可用性要求下,分割造成的不可能性仍然存在。
Eric Brewer 在 2000 年提出猜想:分散式 web service 無法同時提供一致性、可用性與對網路分割的韌性。這篇 2002 年論文補上形式模型與證明。其用語刻意收窄:一致性是 read/write object 的 atomic(linearizable)行為;可用性要求送達非故障節點的每個請求最終得到回應;分割容錯則允許網路在元件之間任意遺失訊息。因此它是在明確假設下的不可能性定理,而不是後來那句「每套系統自由三選二」的口號。
論文針對 read/write data object 分別定義 atomic consistency、availability 與 partition tolerance,避免把定理擴張到一致性的所有含義,或可用性的所有營運定義。
先假設寫入在一個網路元件中完成,再讓另一個收不到前者訊息的元件收到讀取。可用性要求讀取結束,atomicity 卻要求它反映已完成寫入。讀取端無法區分寫入不同值的執行,因此沒有任何答案能在所有執行中都正確。
矛盾來自資訊而非數量:在本應給出不同答案的執行中,讀取元件擁有完全相同的本地歷史。更快的機器、重試或更多複本,都無法提供那份缺失資訊。
此處的一致性是模擬物件的 atomic consistency(linearizability):每個操作都在 invocation 與 response 之間某一點生效,且順序遵守真實時間。
可用性要求送達非故障節點的每個請求最終收到回應;它不指定延遲目標,也不要求每個回應都含有最新資料。
分割條件允許節點群組之間任意遺失訊息。部署環境若會發生這類故障,它就不是演算法可以單純拒絕的選配功能。
後續章節研究帶有時序上界的模型,並說明削弱保證後可成立的條件。這些正面結果依賴新增假設,並未推翻非同步模型下的不可能性。
客戶端對由分散式節點實作的物件呼叫 read 與 write。即使發生模型允許的通訊故障,正確執行仍須符合指定的安全性與終止性質。
客戶端先向一個元件內的節點提交寫入並收到回應,使該寫入在真實時間上早於後續操作。
網路接著遺失把已完成值傳到另一個元件所需的訊息。
客戶端向不知情的元件提交讀取。可用性要求非故障接收者即使收不到訊息,也必須最終回應。
選擇兩條只在已完成寫入值上不同的執行。讀取元件的本地狀態與收到的訊息完全相同,因此兩邊行為必須相同。
Atomic consistency 要求兩條執行回傳不同結果,但不可區分性迫使行為相同。永遠等待雖可避免答錯,卻會違反可用性。
論文接著加入部分同步並分析額外時序知識所容許的結果。任何可行組合都以更強假設或削弱某項性質為條件。
這篇論文把 Brewer 猜想轉化為今日稱為 CAP 的形式化結果。它最持久的貢獻是明確模型與不可區分性證明:網路分割下,linearizable 操作可能必須等待;被要求回應的操作則可能缺少維持 linearizability 所需的資訊。後續系統雖暴露出更細緻的一致性與可用性選項,仍應依本文實際證明的定義與故障模型評估,而不是套用寬鬆的「三選二」口號。
“It is impossible in the asynchronous network model to implement a read/write data object that guarantees the following properties: Availability and atomic consistency, in all fair executions (including those in which messages are lost).”
“In this note, we prove Brewer's conjecture in the asynchronous network model, and then discuss solutions to this dilemma in the partially synchronous model.”
“When a partition occurs, it is impossible to provide both consistent data and availability.”