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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CAP理论

發布時間:2023/12/9 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CAP理论 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 初識 CAP 理論

??CAP 理論是加州理工大學伯克利分校的 Eric Brewer 教授在 2000 年 7 月的 ACM PODC 會議上首次提出的,它是 Eric Brewer 在 Inktomi 期間研發搜索引擎、分布式 Web 緩存時得出的關于數據一致性( C:Consistency )、服務可用性( A:Availability )、分區容錯性( P:Partition-tolerance )的一個著名猜想:

It is impossible for a web service to provide the three following guarantees : Consistency, Availability and Partition-tolerance.

??在這個猜想提出的 2 年以后,來自麻省理工學院的 Seth Gilbert 和 Nancy Lynch 從理論上證明了 Eric Brewer 教授的 CAP 猜想是成立的,從此,CAP 理論在學術上正式成為了分布式領域公認的定理,并深刻影響著分布式系統的發展。

??證明過程可以參考論文《Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant web services》

2. CAP 理論

CAP 理論對分布式系統的特性做了高度抽象,形成了三個指標:

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分區容錯性(Partition Tolerance)

2.1 一致性(C)

??一致性是當訪問多個節點時能得到同樣的值。
??一致性是指強一致性( Strong Consistency ),又叫線性一致性( Linearizable Consistency ),它要求多節點組成的分布式系統,能像單節點一樣運作,如果一個寫操作返回成功,那么之后的讀請求都必須讀到這個新數據;如果返回失敗,那么所有的讀操作都不能讀到這個數據。
??備注:一致性中除了強一致性之外,還有其他的一致性級別,比如序列一致性( Sequential Consistency )和最終一致性( Eventual Consistency )等。

2.2 可用性( A )

??可用性指的是要求系統提供的服務必須處于 100% 可用的狀態,對于用戶的每一個操作請求,系統總能夠在有限的時間返回結果
??可用性意味著每個請求都能獲得相應。

2.2.1 100% 可用

??100% 可用,既不是 99% 可用,也不是 99.99% 可用,它說的是系統必須完全可用,不允許任何不可用的情況出現,這是一個非常理想的模型。

2.2.2 有限時間內

??有限時間內,它指的是對于客戶端的一個請求,系統必須在指定的時間內返回對應的請求結果,如果超過了這個時間,系統就被認為是不可用的。一般來說,“有限時間內”是系統在設計的時候,就設定好的系統運行指標,不同的系統之間會有非常大的差別。

2.2.3 返回結果

??返回結果,這是指系統在完成對客戶端請求的處理后,必須返回一個正常的響應結果。客戶端可以根據這個響應結果,來明確判斷這個請求執行成功還是失敗,而不是返回一個讓用戶無法判斷的不正常的響應結果。

2.3 分區容錯性( P )

??分區容錯性指的是集群中的某些節點在無法聯系后,集群整體還能繼續進行服務的能力。
??分區指的是在整個分布式系統中,因為各種網絡原因,系統被分隔成多個單獨的部分,它不僅包含我們通常說的網絡分區,也包含因為網絡丟包導致的網絡不通的情況。并且,這里說的因為網絡丟包導致網絡不通的情形,還包含節點宕機的場景,由于系統的其他機器不知道某個節點宕機了,只知道與宕機節點的網絡是不通的,所以當節點宕機發生時,其他節點發往宕機節點的包也將丟失。

??在現實的分布式系統中,我們面對的就是一個不可靠的網絡和有一定概率宕機的設備,這兩個因素都會導致分區出現,因此在分布式系統實現中,分區容錯性 P 是一個必須項,而不是可選項。
??在分布式系統中,如果我們的設計放棄分區容錯性,就相當于我們認為節點之間的網絡通信永遠是好的,那么我們對節點之間的遠程調用的結果,就不需要處理超時、網絡地址不可達等網絡層錯誤了。但是這樣一來,看似是簡化了系統設計,實際卻忽視了超時等網絡錯誤的情況。當它們出現后,系統的行為就是未定義的了,可能會出現崩潰,或者是臟數據的問題。

3. CAP 不可能三角

??CAP 不可能三角說的是對于一個分布式系統而言,一致性(Consistency)、可用性(Availability)、分區容錯性(Partition Tolerance)3 個指標不可兼得,只能在 3 個指標中選擇 2 個。該理論已經得到了數學證明,開篇已有說明。
??在分布式系統中,P是必須的,如果沒有P那就是一個單獨的進程。CAP 理論更合適的描述是:在滿足分區容錯的前提下,沒有算法能同時滿足數據一致性和服務可用性。其中,數據一致性( C )指的是數據的強一致性,服務的可用性( A )指的是服務 100 % 的可用性,這才是 CAP 理論論證模型的關鍵點
??需要說明的是,當系統正常運行的時候,三者是可以同時滿足的,只有系統出現了故障,CAP才不能同時滿足。

4. CAP理論重新思考與理解

??CAP三者不能同時滿足,并不代表我們就放棄缺少的部分,而是盡量減少其影響。

4.1 犧牲一致性(C)

??放棄一致性(C),根據CAP理論我們可以設計一個AP系統。C關鍵詞:強一致性。意味著當出現網絡分區,服務無法快速給出正確的反饋;A關鍵詞:100% 可用,有限時間內,返回結果。由于放棄了C,我們可以快速返回一個結果,當前為AP系統。這個結果當前不一定是正確的,但我們可以盡量減少這個影響。

??對于數據的一致性( C ) ,除了 CAP 理論要求的強一致性外,還有單調一致性、會話一致性和最終一致性等。如果我們的系統設計選擇了 AP 模型,在數據一致性方面,雖然我們無法實現強一致性,但是我們也不要全部放棄,可以努力去實現更高的一致性級別,為系統的服務提供更好的抽象

??假設我們設計一個 AP 模型的分布式系統,正常情況下,如果依據 CAP 理論,在系統設計時,我們需要放棄數據的一致性。但是,我們可以從另一個思路來設計,在系統沒有出現網絡分區的時候,這個分布式系統應該設計為強一致性的。
??如果出現網絡分區了,我們可以根據系統情況,有選擇并且精心設計地降低系統的一致性級別。比如,從強一致性降低到單調一致性或會話一致性等,這樣的設計,既符合 CAP 理論依據,也為系統提供了更好的一致性級別,特別是在網絡分區的時候。

4.2 犧牲可用性(A)

??放棄可用性(A),意味著我們不保證服務100%可用,例如出現網絡分區,我們可以等待網絡恢復正常,之后再給調用方返回正確的結果,這樣的系統為CP系統。

??我們的日常工作中,幾乎沒有見過 100% 可用的服務。可用性指標是在 0 到 100% 之間連續分布的,其實一個 100% 可用性的服務和一個 99.9999% 可用性的服務之間并沒有多大的差別,如果我們的服務能實現 99.9999% 的可用性,哪怕它不符合 CAP 理論的可用性,也是符合我們工作中對可用性的要求的。
??所以,在我們的系統選擇了 CP 模型的時候,對于可用性( A ),我們永遠無法達到 100%,但是按業務要求不斷優化,是我們努力的目標。

??具體的實踐,例如基于 Raft 算法實現的 etcd,對可用性進行重新思考的實踐。如果依據 CAP 理論來劃分的話,etcd 屬于 CP 模型。
??而在 etcd 系統的實現中,如果網絡沒有出現分區,整個系統是 100% 可用的;就算網絡出現分區了,也不會有整個 etcd 系統都不可用的情況。在這時,超過半數 etcd 實例所在的網絡分區一側,系統是正常可用的,雖然網絡分區的另一側是不可用的,但是整個 etcd 系統的可用性依然可能超過 50% 。

4.3 犧牲分區容錯性( P )

??為什么沒有CA系統呢?嗯,我們應如何犧牲分區容忍性呢?如果系統沒有分區容忍性,就不能跨網絡運行。換句話說,需要在本地運行一個單獨的進程。所以,CA系統在分布式系統中根本是不存在的。——《微服務設計,第11章11.3》

??我們來分析一下分區容錯性 P 的問題。在分布式系統中,節點之間必須通過網絡來通信,可是網絡可能會丟包和中斷,節點也可能會宕機,這樣的情況就要求我們在系統設計的時候,必須做好系統的分區容錯處理。
??但是,系統出現分區的情況非常少見,所以我們可以來試想一下,在網絡不出現分區的時候,我們將數據強一致性和 100% 的可用性都選擇,等到網絡出現分區的時候,系統再選擇放棄部分的可用性或者降低數據一致性的級別,這種處理方式是否可行呢?
??其實這樣的處理方式是可以的,在上面對可用性和一致性的重新思考與理解中,所舉的例子都是按這個方式來處理的,它實際是將 CAP 理論的選擇,推遲到出現網絡分區的時候,而不是系統一啟動就進行 CAP 的選擇。這樣可以大大提高系統的可用性和數據一致性,并且系統依然能容忍網絡分區。

??另外,關于 CAP 理論的重新思考,特別需要說明的一個例子是 Google 的 Spanner ,Spanner 是一個全球分布式數據庫,但是 Google 卻宣稱 Spanner 是一個 CA 系統,這是不是和 CAP 理論的說法產生了矛盾呢?
??其實并不矛盾,Spanner 雖然是一個分布式系統,但是它運行在 Google 的內部網絡中,并且擁有大量冗余的網絡鏈路、處理相關故障的架構規劃、以及非常細致的運維,以此來確保系統的可用性超過了 99.999%。雖然不能達到 100%,但是對于使用者來說,和可用性 100% 幾乎沒有任何區別,所以 Spanner 就是一個 CA 系統。
??而且,在網絡出現分區的時候,Spanner 會選擇一致性而不是可用性,這個時候 CAP 理論依然會生效。所以對于 CAP 理論的重新思考,總而言之就是一句話:CAP 理論給我們定義了系統的設計邊界,雖然想要設計出超過邊界的系統是徒勞的,但是我們卻可以無限逼近邊界,并且把它作為我們設計系統的目標。

4.4 總結

??對于 CAP 理論,我們不會簡單地三選二或者二選一。對于 AP 模型的系統,我們會努力去提升數據一致性的級別,而對于 CP 模型的系統,我們會努力去提升系統可用性的級別。
??由于系統分區的情況非常少見,我們可以在網絡不出現分區的時候,將 A 和 C 都選擇上;在網絡出現分區的時候,再選擇放棄部分的可用性,或者降低數據一致性的級別,通過推遲 CAP 選擇來提高系統的可用性和數據一致性。

參考:
《極客時間——深入淺出分布式技術原理》
《極客時間——分布式協議與算法實戰》
《微服務設計》

總結

以上是生活随笔為你收集整理的CAP理论的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。