基本上接觸過度布式系統的朋友都知道 CAP 和 BASE 理論,這兩個理論對工程實踐中的分佈式架構設計具備重要的影響。CAP 理論是加州大學伯克利分校的 Eric Brewer 教授提出的,並被 MIT 的 Seth Gilbert 和 Nancy Lynch 使用學術理論進行了嚴格的證實。安全
CAP 和 BASE 理論都有數學證實,但今天打算以一種輕鬆些的方式來最兩個理論作個淺顯的解釋。網絡
最近偶爾刷一集《大明王朝1566》,這部劇以前看過開頭幾集,後來由於畫質差沒資源沒有繼續看,最近優酷貌似重製了,清晰度好了一些,就偶爾有時間刷一集,這真是一部好劇啊。今天就拿大明王朝的故事背景來對 CAP 和 BASE 理論作個介紹吧,但願不會寫的太爛。架構
歷史上學過明朝設有內閣和司禮監,皇帝經過管理內閣和司禮監來管理天下,這種機制其實應該是很先進的皇權機制了。不過,明嘉靖帝,沉迷修道昇仙,執政期間嚴嵩父子把持朝政、一手遮天、貪墨不可勝數。雖然說內閣和司禮監腐敗嚴重,但劇裏內閣的嚴嵩和司禮監的呂公公在決策上仍是會聽皇帝的。這就不講了,如今迴歸主題吧,如今主要引入劇中的以下幾我的:分佈式
故事發生時,南有戚繼光抗倭激戰,北有韃靼入侵,急需大量軍需,然通過長達二十多年的朝政腐敗,國庫空虛,皇帝通過與內閣和司禮監商量後,決定在浙江推行改稻爲桑的國策,就是把稻田改成桑田養蠶生絲,進而多織絲綢出口賺錢,然而遭到農民反對,鄭必昌何茂才在收到嚴嵩兒子密令後,決定決堤淹城,以達到改稻爲桑的目的,事發後,淳安所有被淹、建德半數被淹,災民無數。這時,海瑞出場了,其到達淳安後,發現貪腐嚴重,堤壩被毀另有隱情,阻止改稻爲桑,決定一查到底。架構設計
海瑞畢竟是皇帝兒子舉薦的官兒,鄭何和楊金水等人不敢任意幹掉海瑞,只能上書上司,楊金水就寫信給呂芳,鄭何二人就寫信給嚴嵩兒子。由於改稻爲桑推行不下去是大事啊,因此嚴嵩和呂芳都很是重視,收到來信後當即想了對策,然而兩人想的對策不同,等皇上來決定吧,決定完了下發到浙江官員。正巧這個時候嘉靖在修道昇仙,閉關不問世事。這樣,兩我的的意見不一致,而且沒法達到統一,底下人都在等着回信,若是十天收不到回信下面可能就亂了,可是皇帝要閉關一個月。設計
上面這段陳述中:內存
皇帝閉關就至關於嚴嵩和呂芳達成一致的通道斷了,在分佈式中就是兩個節點發生了網絡分區;資源
底下人等着回信,十天沒收到回信就亂了,若是十天內收到了上面的回信,對應到分佈式中就是保證了可用性;數學
嚴嵩和呂芳就意見沒法達成一致,那麼對應到分佈式中就是沒有保證一致性class
再簡述一下分佈式系統中 CAP 的意義:
P 表明着分區容忍性,要知足 P 就表示容許網絡分區的發生(容許嘉靖帝閉關);
C 表示一致性,知足 C 就要求全部節點數據須要一致(嚴嵩和呂芳意見應該達成一致);
A 表示可用性,就是說對於他人的請求,節點須要提供服務響應的返回(嚴嵩和呂芳不讓下面的人等太久)
那爲何 CAP 沒法同時知足呢?
若是知足 CP,那麼因爲嘉靖帝閉關的一個月期間(P),嚴嵩和呂芳沒法經過嘉靖帝達成一致,若是要保證一致(C),那就只能等嘉靖帝出關,然而這須要一個月的時間,下面的人早就等瘋了,這就至關於服務不可用了,因此沒法知足 A;
若是知足 AP,那麼嚴嵩和呂芳必須在10天內回覆(A),然而皇帝閉關一個月(P),那麼兩人在十天內是沒法達成一致的,也就是沒法知足 C;
若是知足 CA,要在10天內回覆下層官員,另外嚴嵩和呂芳兩人也要意見一致,那隻能在10天內請皇帝出關了,那就沒法知足 P;
不知道這麼講是否夠明白,CAP三個要求是沒法同時知足的,那 BASE 理論在 CAP 的基礎上作了什麼讓步和平衡?下面一塊兒來看看。
BASE 包含三個方面:Basically Available(基本可用)、Soft state(弱狀態)和 Eventually consistent(最終一致性)。咱們從上面的故事來講一下這幾個概念。
對於分佈式系統來講,必需要知足分區容錯性,不然各個節點就至關於一個節點了,分佈式就沒有任何意義了。在知足分區容錯性的條件下:
就是說節點在出現問題時,不是徹底不可用,而是容許損失部分可用性。例如,嚴嵩和呂芳沒法達成一致,這時不能讓下面等待一個月沒有回信,這時發送一個降級的決策(例如讓下面官員先跟海瑞等進行斡旋,不讓其查到要命的證據),或者下面官員本身先搞一些應對措施,而後加長等待時間(能夠等待一個月),這樣,整個系統不至於徹底亂掉,而是先有一些應對措施。這就是基本可用。
嚴嵩和呂芳先將本身的第一個建議性的決策下發,等待皇帝出關後再進行一致性決策。在第一個建議性的決策到最終一致性決策期間,其實兩方的意見並不一致,BASE理論容許在必定時間內存在這種狀態。這就是軟狀態。
在皇帝出關後,呂芳嚴嵩當即與皇帝協商,而後獲得一致的決策。這個時候,若是下面應付不了,那麼會再次上書,這時,嚴嵩呂芳已經有了一致的結論,那麼再次下發給下層官員時,就是一致的決策了,這樣鄭必昌、何茂才、楊金水就能夠已一致性的態度對待海瑞了。這就是最終一致性。