日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CAP 理论 —— 最通俗的解释

發(fā)布時間:2024/7/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CAP 理论 —— 最通俗的解释 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文鏈接:https://blog.csdn.net/lihao21/article/details/81051631

CAP 理論是分布式系統(tǒng)的一個基礎(chǔ)理論,它描述了任何一個分布式系統(tǒng)最多只能滿足以下三個特性中的兩個:

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分區(qū)容忍性(Partition tolerance)

CAP 理論聽起來十分抽象,本文嘗試以生活中的例子并用通俗易懂的語言來解釋 CAP 理論的含義。

第一章:“記憶公司”面世

一天晚上,正準(zhǔn)備入睡時,你的妻子對你記住她生日并送她禮物表示感謝。這時,一個商業(yè)想法從你的腦海中閃現(xiàn):人們總是弱于記憶生活中的事情,而我卻擁有超群的記憶力,因此,為何不成立一間公司可以充分運用自己的記憶天賦來賺錢。說干就干,接著你在當(dāng)?shù)匾婚g報社刊登了記憶公司的宣傳廣告:

記憶公司 —— 你的事情永不會忘記
還在為你老是忘記而苦惱?福音來了,只須一個電話。
當(dāng)你需要記著某件事情時,請撥打 400 - 888 - 8888,告訴我們你需要記住的事情,下次你需要找回這件事情,請再次撥打電話,我們將會告訴你的所需。
收費: 每次只需要 10 元。

以下是一次你和顧客的電話對話。

  • 顧客:Hey,麻煩幫我記住我鄰居的生日。
  • 你:好。你鄰居生日是什么時候?
  • 顧客:1月2日。
  • 你:(在一個本子,翻到這位顧客的一頁,記錄下他鄰居的生日。)好的,已記錄好。下次你找回鄰居的生日,請再次撥打電話。
  • 顧客:謝謝。
  • 你:不客氣,本次收費 10 元。

第二章:業(yè)務(wù)擴大了

隨著時間的推移,記憶公司的業(yè)務(wù)發(fā)展得越來越好,越來越多的顧客打電話進來需要服務(wù)。雖然賺到的錢越來越多,但也產(chǎn)生了一個新的問題。
顧客打電話進來時,需要等待的時間越來越多,另外,當(dāng)你生病時,所有顧客都不能獲得服務(wù),這令人很是煩惱。
于是,你想出了一個新的計劃:

  • 你和你的妻子同時接收顧客的電話
  • 顧客仍然只需要記著一個公司的服務(wù)電話 400 - 888 - 8888
  • 一個路由器會將顧客的電話分發(fā)到你和妻子電話上

第三章:服務(wù)出錯了

新計劃實施兩天后,你接到了一個名叫 John 的電話,John 是個老顧客了。

  • John:Hey
  • 你:你好,歡迎撥打記憶公司電話,有什么可以幫到你嗎
  • John:可以告訴我去新澤西的航班是什么時候嗎
  • 你:當(dāng)然。(然后你翻開 John 的頁面,發(fā)現(xiàn)并沒有 John 航班的記錄)
  • 你:你好,是不是搞錯了,我們這里并沒有關(guān)于你航班的信息
  • John:什么?!昨天我才剛打電話過來說去新澤西航班的事情

哪里出錯了?難道 John 撒謊了。你繼續(xù)思考導(dǎo)致出錯的原因。會不會是妻子接到了電話?你走到妻子的桌子,發(fā)現(xiàn)妻子將 John 的航班記錄在了本子上,這時你才意識到導(dǎo)致問題的原因,妻子接聽到 John 的電話,但你的本子沒有 John 的記錄。

如果將上面的實施計劃稱一個分布式的設(shè)計,那這個設(shè)計存在明顯的問題——一致性(consistent)的問題。打進來的電話可能其中一人接聽并記錄下來,下次電話查詢時卻可能由另一人接聽,這樣就會出現(xiàn)不一致的問題,無法為顧客準(zhǔn)確提供服務(wù)。

第四章:解決一致性問題

晚上你在床上翻來覆去,最后想到一個解決一致性問題的辦法,你把新的計劃告訴妻子:

  • 每次接收記錄的電話(顧客要求幫忙記住他們的事情)時,我們同時告知另一個人
  • 這樣,我們兩個人都會在本子更新這位顧客的記錄
  • 下次這位顧客再次打電話進來查詢,這時我們不需要告知對方,因為兩個本子都有這位顧客的記錄了

這個方法只有一個問題,你告訴妻子,當(dāng)有顧客需要記錄時,我們不能并行地工作。例如,你接收到記錄的電話并這個信息告知我,這時我就不能再接聽其他顧客的電話了。但這個問題基本上也是可以接受的,因為大部分顧客的電話都是查詢的。

老公你真聰明,妻子稱贊你,但這個設(shè)計還有一個問題。如果某天我們其中一個人有事不能工作了怎么辦?由于我們要求每次接到記錄電話需要同時更新兩個本子,這就導(dǎo)致我們不能為顧客提供記錄的服務(wù),這樣就導(dǎo)致無法滿足 可用性(availability)的要求。例如,當(dāng)我接到一個記錄的電話時,而你恰好不在,這樣我就無法完成這個顧客的服務(wù)。這是由于我無法要求你更新你的本子。

第五章:更好的辦法

這時你才意識到,設(shè)計一個分布式的系統(tǒng)是多么的不容易,難道就沒有同時滿足 一致性和可用性 的設(shè)計嗎?
又經(jīng)過一晚的思考,你想到一個兩全其美的辦法,新的辦法跟之前的很相似。你把新的辦法告訴妻子:

  • 當(dāng)接到記錄的電話(顧客要求為他們記錄事情),如果我們兩人當(dāng)天都上班,那么我們同時記錄下這位顧客的記錄
  • 但如果另一人當(dāng)天沒上班,我們可以將記錄通過 E-mail 的方式發(fā)送給不上班的人
  • 第二天,沒上班的人上班后第一件事就是接收所有的 E-mail ,并在自己的本子上記錄所有顧客的要求。記錄好后,才開始接收第一個電話。

真是天才,妻子說,這個辦法我找不出任何問題了,而且可以同時滿足 一致性和可用性 的要求。

第六章:妻子生氣了

公司所有業(yè)務(wù)繼續(xù)正常運作了好一段時間,即使你和妻子其中一人不上班,服務(wù)仍然可以正常提供。
好景不長,新的問題又出現(xiàn)了。
一天,妻子由于某件小事對你很是生氣,以至于她接到一位顧客需要記錄的電話并沒告知你。由于記錄沒能在兩個本子更新,你的設(shè)計完全被打破了。你的設(shè)計建立在兩人良好溝通的前提下,如果出現(xiàn)溝通無法進行的情況,系統(tǒng)就出現(xiàn)問題了。也就是說,你的設(shè)計沒有達到 分區(qū)容忍性(partition tolerant)的要求。
當(dāng)然,你也可以允許溝通無法進行的情況下繼續(xù)提供服務(wù)。這樣,當(dāng)有顧客需要記錄時,由于需要滿足 一致性 要求,這位顧客的服務(wù)就無法完成,也就是 可用性 無法滿足。。。

第七章:結(jié)論

讓我們再次回到 CAP 理論,CAP 理論告訴我們,當(dāng)設(shè)計一個分布式系統(tǒng)時,我們無法同時滿足 一致性,可用性,分區(qū)容忍性 的要求,我們最多滿足其中的兩個要求,形式化的證明,可以參考 CAP 理論的證明 。

  • 一致性:一旦顧客更新了記錄,下次再打電話查詢時,總能獲取最新的記錄
  • 可用性:只要你和妻子有人上班,記憶公司總能為顧客提供服務(wù)
  • 分區(qū)容忍性:即使你和妻子的溝通無法進行,記憶公司仍然可以提供服務(wù)

番外篇:背后的記錄員

上面設(shè)計的系統(tǒng)仍然有優(yōu)化的空間。記憶公司可以雇傭一個記錄員,當(dāng)你和妻子其中一人接到顧客的記錄電話時,記錄員在背后會將這個記錄寫在另一個人的本子上。這樣一來,另一個人的服務(wù)就不會被這個記錄的電話打斷。許多 NoSQL 系統(tǒng)就使用了這個方法,一個節(jié)點更新了數(shù)據(jù),背后會有一個進程將數(shù)據(jù)同步到其他節(jié)點。
這種設(shè)計存在的問題是可能在短時間內(nèi)丟失一致性。例如,顧客打電話進來要求記錄,妻子接聽到這個電話。緊接著,這位顧客再次打電話進來要求查詢,你接聽到這個查詢的電話。如果記錄員還沒將這位顧客的記錄更新到你的本子,這時顧客就沒法正常查詢。雖然存在這種可能性,但你也不用過分擔(dān)心,因為顧客很少會打完記錄電話后馬上又打查詢電話,所以出現(xiàn)本子內(nèi)容不一致的概率很低。

參考資料

  • http://ksat.me/a-plain-english-introduction-to-cap-theorem/
  • http://robertgreiner.com/2014/08/cap-theorem-revisited/
  • https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/
  • 總結(jié)

    以上是生活随笔為你收集整理的CAP 理论 —— 最通俗的解释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。