牆裂推薦:這可能是 CAP 理論的最好解釋

英文藍本:http://ksat.me/a-plain-english-introduction-to-cap-theorem 經過小碼甲意譯、原創配圖, 建議收藏。

你可能經常聽到 CAP 定理, 這個定理描述了在設計分佈式系統時的天然約束。就像其他文章一樣, 本文以現實場景對比理解 CAP 定理。

  1. 記憶公司

Remembrance Inc! - Never forget, even without remembering!
Ever felt bad that you forget so much? Don’t worry. Help is just a phone away!
When you need to remember something, just call 555—55-REMEM and tell us what you need to remember. For eg., call us and let us know of your boss’s phone number, and forget to remember it. when you need to know it back.. call back the same number[(555)—55-REMEM ] and we’ll tell you what’s your boss’s phone number.
Charges : only $0.1 per request

記憶公司的日常業務通話記錄:

• 客戶:喂,你好,你可以存儲我鄰居的生日嗎?• 你:可以,您說。• 客戶:1 月 2 號 • 你:記錄 (在筆記本這個客戶頁上記下信息), 好的,歡迎下次垂詢。• 客戶:謝謝 • 你:請支付 1 元

  1. 業務擴張

憑藉創意和人品,【記憶公司】的規模越做越大,而成本只需要筆記本和電話。

當你某天生病不能工作時,你會損失一天的收入;更不用說當天想要信息的客戶會因此發狂。

你有了新計劃:

1. 你和你老婆分別使用分機 2. (555)—55-REMEM 客服電話不變 3. 客服電話會轉到空閒的分機號

  1. 第一次業務宕機

有一天你收到老客戶羅志祥的電話,要求查詢 "明天的約會安排";

你一臉矇蔽,我不知道啊,你的記憶頁上沒這個信息啊; 客戶咣噹掛斷了電話。

當天覆盤, 猜想是昨天羅志祥把業務電話打到我老婆那裏了,事實確實如此。

你們都意識到分機號帶來的新問題。

多麼可怕的分佈式設計中的缺陷!你的分佈式系統是不一致的!總會有一個時機,客戶會將業務電話打到你們其中一個;在下一次撥號時,客戶就可能收到不一致的信息。

  1. 修復一致性問題

睡前吹風時間, 你想到一個主意:

• 當我們其中一個人接到客戶新的記憶業務,我們會在掛電話之前告訴另一個人 • 這樣我們都能在筆記本上記下新業務 • 當客戶查詢時,我們兩個都可以輕鬆應對

這裏有一個問題:當其中一人收到新業務電話,兩人就不能並行工作了。
例如:當你收到新業務並告訴我記錄信息時, 我不能接其他電話。

但是這個問題也不大,因爲大部分都是查詢業務 (可以再撥電話重試),我們首要的是確保信息正確。

你老婆進一步提出:如果某天你不在崗,我收到新業務,你的筆記本不能得到最新信息,這就會有可用性問題, 因爲我沒能通知你,我就不能掛斷電話完成這單業務。

  1. 更優方案

你慢慢理解了分佈式系統中的 “一致性” 和“可用性”。你提出了更優方案:

1. 收到新業務電話, 掛電話前通知對方,這樣兩個人都能記下信息 2. 某天其中一人不在崗,另外一人收到新業務電話 ,給缺崗者發一封郵件 3. 第二天缺崗者上崗查收郵件,更新自己的筆記本。

Nice, 現在一致性和可用性都滿足了。

  1. 老婆難養

使用優化方案,一切都很順利,你們的筆記本是一致的,當你們其中一人不在崗系統也能很好的運作。

但是, 凡事都有但是, 某天你們都在崗,但是你老婆嫌你碗沒洗乾淨,今兒不想理你,收到新業務不通知你了,你的查詢業務就有問題了。

你的方案包含了 “一致性”,“可用性”, 但是不滿足 “分區容錯”。

爲了滿足 “分區容錯”, 你可以自我下線 (直到你們修復關係),讓你老婆一人接手業務,但是你的系統就不可用了。

  1. 結論

我們回過頭看 CAP 定理:在設計分佈式系統時,“一致性 Consistency”“可用性 Availability”“分區容錯 Partition Tolerance” 你只能滿足兩個。

•Consistency:一旦接受了客戶的新業務,在客戶後續查詢時必須得到最新的信息 •Availability:只要你們一人在崗,記憶公司就一直提供服務 (節點下線的角度)•Partition Tolerance:你們夫妻二人鬧矛盾了,記憶公司依舊運作(節點連通性角度)有了這樣的場景,理解 CP、AP、CA 就不難了

僱傭工具人 --> 最終一致性

僱傭工具人,更新 [未更新的人] 的筆記本,相比你老婆實時通知你更新, 這個工具人有個好處是在後臺跑腿,你們兩個業務都不會阻塞。

你老婆收到新業務,工具人還沒來得及跑腿,客戶就立即回撥並轉到你的分機,你給出不一致的答覆。這種情況有限,因爲客戶不會如此迅速忘記事情。

這就是 CAP 定理和最終一致性的現實解釋。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ODHBl38zpPCjn6f637-AEA