赤壁之戰中的CAP定理

2021-09-27 03:16:00 字數 2235 閱讀 9077

東漢末年的一天早上,洛陽的乙個深宅大院戒備森嚴,不到八點,已經有十幾位將領開著寶馬表情嚴肅的進入府中。似乎有什麼大事要發生。

這些將領來不及把車停到車位,就步履匆匆的進入後堂。雖然後堂聚集了十幾個人,但是他們並沒有相互交談,而是直勾勾的盯著投影上的主題–「南下?」。似乎在等一位重要的人。

不一會兒,一位矮胖男子走了進來。此男子身高大概165cm,體重大約80公斤,長相猥瑣,但是眼神異常的犀利。手裡似乎還端著一碗什麼東西。來不及坐下就對參會人員說道:「諸位來的挺早,待我先把這碗胡辣湯喝完再說如何?」。參會人員那敢推辭,都笑著說道:「曹總,吃飯要緊。」。此曹總正是三國時期北方最大的軍事集團首領–曹操。

伴隨著吸溜吸溜的聲音戛然而止,曹操用袖子把嘴一擦,說道:「我今召集大家來的目的,想必大家也都知道。自從我們打敗了袁紹,在北方已經沒有誰是我們的對手了。所以這些年其實你我都很寂寞,如果乙個軍人不打仗,那還是正經的軍人嗎?有仗要打,我們打。沒有仗要打,我們創造仗也要打。所以我決定南下,把劉備和孫權的地盤給收了。不知各位意下如何?接下來請各位暢所欲言」。

曹仁:「我早就想收拾他們了,老大,就等你一聲令下了」。

曹操呵呵一笑,說道:「知己知彼 方能百戰不殆。我得到訊息說,目前孫劉已經結成聯盟,並且為了他們傳遞訊息的方便與可靠,他們還專門修建了乙個什麼東西。」

「老闆 我研究過這個東西,此物名叫「分布式訊息收發器」」,說話的正是張遼。

眾將領頓時大眼瞪小眼,嘴裡嘟囔著,什麼是分布式?什麼是訊息收發器?什麼又是分布式訊息收發器?想我戎馬一生,怎麼聽都沒聽過?

張遼繼續說道:「此物是那諸葛亮設計並主持建造的,說著就在沙盤畫起了圖.」

諸位請看,此乃總體戰略架構圖。接下來我為大家解答一番,孫劉在我所標註的位置,大家都知道。此番孫劉結盟,需要共享情報。但是因為孫劉老巢路途遙遠,中間還要經過長江,信使直接傳遞資訊並不可靠。於是那諸葛村夫設計了乙個分布式系統,正如圖中a,b所示。比如劉備得到了訊息,想把訊息傳遞給孫權,劉備只需把訊息傳給b這個情報驛站,然後b會把情報同步給a,孫權只需要從a獲取資訊即可。

大將軍於禁道:「這諸葛老兒為何要如此設計?以本將看來此物比直接快馬傳遞訊息要複雜許多。」

張遼道:「大將軍所言極是,此物乍一看甚是複雜。其實說白了他就是乙個驛站,用於轉送訊息用的。但是每個資訊都會複製乙份,每個驛站各存放乙份。」

「那諸葛老兒總喜歡以理論作為支撐,此物可有相關理論?」 曹操說道。

張遼道:「老闆英明,此物的理論根基乃是cap定理」。

曹操道:「何為cap定理?」

張遼道:「那諸葛老兒為了讓別人看不懂此理論,故意把其弄的看似異常複雜。待我把其本質解釋給各位。這cap其實代表了三個名詞:

c:代表的是一致性。也就是說a和b的資訊是一樣的。

a:代表的是可用性。也就是說a和b都能正常的收發資訊。

最為關鍵的是,經諸葛亮推演,此定理只能同時滿足兩種情況。

「歐?快快說來!」 曹操禁不住說道。

張遼道:「是 老闆。

比如說如果要保證a和b的資訊總是一樣的,並且a和b的系統總是可以正常收發資訊,那麼a和b就必須得通訊正常,不能發生分割槽的情況。也即滿足ca,不能有p。

再比如,如果要保證a,b資訊總是一樣,並且允許有時候a和b發生通訊異常。那麼就沒辦法做到任意時刻a,b都能正常收發資訊。因為一旦江水暴漲,a,b不能通訊,此時a,b的資訊必然會造成不一樣,而有要求資訊一樣,只能是等到江水退去,信使把a,b資訊同步程一樣,再恢復a,b的正常收發資訊的功能,也即只能滿足cp。

最後一種情況,如果要求a,b一定可用,且允許江水暴漲無法通訊的情況發生,那麼在江水暴漲的時候就無法保證a,b的一致性。也即只能滿足ap

「諸位猜下諸葛村夫使用的那種方式?」 曹操若有所思的問道

乙個個面面相覷,無人作答。

曹操微微一笑說道:「那村夫一定使用的ca方案。在a,b以及長江上定有重兵把守,且有大船。即使江水暴漲也無甚影響。」

張遼道:「老闆,實在是高!」

曹操從小被人取笑身高,狠狠的瞪了張遼一眼。

張遼慌忙說道:「老闆英明,英明。因為戰場實時性要求很高,所以諸葛老兒確實選擇了此方案。但是平時他們選用的是ap方案,而撤出大量軍隊用於種田,即使江水暴漲,影響ab的一致性,等江水過後ab依然可以同步,這也叫做最終一致性」。

曹操哈哈一笑道:「花裡胡哨!我八十萬大軍豈是他這一套小小的系統能夠打敗的? 無需理會此物,按照原計畫直接攻打江東。」

第一次嘗試用講故事的方式寫技術文章,希望各位朋友指出錯誤。

AcWing 297 赤壁之戰

很容易想到乙個dp f i j f i j f i j 表示長度為i ii,以a j a j a j 結尾的上公升子串行的個數 轉移的話就是從1 11到m mm列舉乙個i ii表示長度,再從1 11到n nn列舉乙個j jj,再從1 11到j 1 j 1j 1列舉乙個k kk轉移就是如果a k i ...

CAP理論中的P含義

乙個分布式系統裡面,節點組成的網路本來應該是連通的。然而可能因為一些故障,使得有些節點之間不連通了,整個網路就分成了幾塊區域。資料就散布在了這些不連通的區域中。這就叫分割槽。當你乙個資料項只在乙個節點中儲存,那麼分割槽出現後,和這個節點不連通的部分就訪問不到這個資料了。這時分割槽就是無法容忍的。提高...

mysql教程 api MySQL中的C API

include my global.h include mysql.hint main int argc,char ar mysql conn mysql res result mysql row row int num fields int i conn mysql init null mysql...