欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java分布式面試CAP分別代表含義分析

 更新時間:2022年03月10日 15:02:40   作者:Q.E.D  
這篇文章主要為大家介紹了java分布式面試中關(guān)于CAP分別代表含義的問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

引言

上一節(jié)講面試中被問到分布式系統(tǒng)概念相關(guān)的,講完了分布式系統(tǒng)的概念,優(yōu)點缺點和 RPC 后,我以為這個問題就到此結(jié)束了,沒想到成功給自己挖了個坑(微笑臉),關(guān)于 CAP,以前只是聽說過,并沒有詳細點整理過,這一次問好好整理了下。

CAP 問題已經(jīng)成了計算機科學(xué)中一個研究領(lǐng)域,之前說到分布式系統(tǒng)有哪些優(yōu)勢時講到三個提升:

1. 系統(tǒng)可用性提升。

2. 系統(tǒng)并發(fā)能力提升。

3. 系統(tǒng)容錯能力提升。

那么這三方面在實施起來可以同時滿足嗎?答案是不能,設(shè)計分布式系統(tǒng)的時候,設(shè)計者需要理解一個重要的理論概念,CAP 定理。

1、面試官,說到 CAP 定理,那能詳細說說 CAP 分別代表什么嗎?

問題分析:一個很經(jīng)典的概念性面試題。

答:關(guān)于 CAP,它是 2000 年 7 月,加州大學(xué)伯克利分校的 Eric Brewer 教授在 ACM PODC 會議上提出 CAP 猜想。2 年后,麻省理工學(xué)院的 Seth Gilbert 和 Nancy Lynch 從理論上證明了 CAP。之后,CAP 理論正式成為分布式計算領(lǐng)域的公認定理。

C 的全拼是 Consistency,代表 一致性的意思。

A 的全拼是 Availability,代表 可用性的意思。

P 的全拼是 Partition tolerance,代表 分區(qū)容錯性的意思。

2、面試官:聽起來很簡單,這只是概念,但是具體是什么意思呢?

問題分析:下次這種問題不能等面試官來問了,這面試有點擠牙膏的感覺,不如我一次說完,讓面試官閉嘴。

答:一個分布式系統(tǒng)最多同時滿足一致性 (Consistency),可用性 (Availability) 和分區(qū)容忍性 (Partition Tolerance) 這三項中的兩項。

  • 同時滿足一致性(C)和可用性(A)就要犧牲掉容錯性(P)
  • 同時滿足可用性(A)和分區(qū)容錯性(P)就要犧牲掉一致性(C)
  • 同時滿足一致性(C)和分區(qū)容錯性(P)就要犧牲掉可用性(A)

圖片描述

 (開始拿起紙筆畫了三個圈圈)

這三個象限,只能同時滿足其中兩個圓圈的交集。

面試官:行了行了,這個理論性的問題就到這,時間有限,我們聊點別的。

舉例深入分析

 用 Redis Cluster 高可用架構(gòu)舉例:Redis 就能會將數(shù)據(jù)分片到多個實例 (按照 slot 存儲) 中,即一個機房分擔一部分數(shù)據(jù)。Master 負責寫,Master 會自動同步到 Slave。

圖片描述

 Redis 去中心集群架構(gòu)優(yōu)點:

1. 無中心架構(gòu):三機房部署,其中一主一從構(gòu)成一個分片,之間通過異步復(fù)制同步數(shù)據(jù),異步復(fù)制存在數(shù)據(jù)不一致的時間窗口,保證高性能的同時犧牲了部分一致性。一旦某個機房掉線,則分片上位于另一個機房的 slave 會被提升為 master 從而可以繼續(xù)提供服務(wù)。

2. 可擴展性:可線性擴展到 1000 多個節(jié)點,節(jié)點可動態(tài)添加或刪除。

3. 降低運維成本,提高系統(tǒng)的擴展性和可用性。

分析,這個分布式架構(gòu)中滿足了 CAP 中哪個兩個定理?

優(yōu)點 1 中講到,三機房部署,每個機房有一主一從,即一個 Master 對應(yīng)一個 Slave ,但是你會發(fā)現(xiàn),機房 1 中的 Master 1 連接的 Slave 在機房 2,機房 2 中的 Master 2 連接的 Slave 在機房 3,機房 3 中的 Master 3 連接的 Slave 在機房 1,這樣構(gòu)成一個環(huán),為什么要這樣設(shè)計?

假設(shè):機房斷電 or 火災(zāi) or 其他各種原因,反正就是機房 1 所有機器都不能用了。

這個時候那機房 1 的全部數(shù)據(jù)都不能訪問了嗎?這顯然是我們不希望的。前面已經(jīng)說了 Master 負責寫,Master 會自動同步到 Slave,如果 Master 寫服務(wù)宕機,Slave 讀服務(wù)會被提升為 Master ,也就是說機房 1 的數(shù)據(jù)在機房 2 的 Slave2 上還有備份,數(shù)據(jù)還在,在宕機的 Master 沒有恢復(fù)前 Slave 要同時承擔讀寫服務(wù),雖然累一點,但是還能用,這樣設(shè)計是為了提高可用性(A),和容錯性(P)。系統(tǒng)準許你一臺機器或者整個機房都宕機,系統(tǒng)仍然能用。

但是你會發(fā)現(xiàn),單個機房如果距離很遠, Master 1 的數(shù)據(jù)同步到 Slave2 上是跨機房,跨機房同步肯定不如同機房塊,這樣一來 Slave2 負責的讀就會有延遲,Master1 要更新的數(shù)據(jù)還沒有同步到他在另一個機房的備份前,讀操作就是不一致的,這樣設(shè)計顯然是犧牲掉一致性(C)。相信這樣分析應(yīng)該能理解 CAP 定理了。

進一步分析:

讓同一組 Master - Slave 放在一個機房,同機房復(fù)制數(shù)據(jù)不是更快?這樣能不能解決數(shù)據(jù)一致(C)問題,答案是能,還有更好的解決一致性的辦法就是不要 Master - Slave 組合,就一臺機器,一臺機器同時擔任讀寫請求,沒有延遲不存在數(shù)據(jù)一致性問題。這是時候如果宕機了怎么辦?這樣的架構(gòu)下,那就真的是不可用了,解決了一致性(C)卻犧牲了可用性(A)和容錯性(P),太不劃算了。

 總之,分布式系統(tǒng)下,CAP 確實無法同時滿足,在 Redis 去中心集群架構(gòu)中,最優(yōu)的解決方案還是滿足可用性(A)和分區(qū)容錯性(P)就要犧牲掉一致性(C),即使跨機房同步數(shù)據(jù),延遲也不過 1s,數(shù)據(jù)不一致的問題只出現(xiàn)在 1s 內(nèi),日常開發(fā)中,很少遇到要求強一致性的場景。例如訂單系統(tǒng),用戶更新了訂單支付狀態(tài),讀訂單狀態(tài)是在從庫,有什么讀場景等不來這一秒?

如果真的必須要求強一致性,那可能就必須調(diào)整分布式架構(gòu)方案來。

 總結(jié)

本文主要講解了 CAP 定理的概念,為什么要學(xué)習(xí)這個概念,設(shè)計高可用分布式系統(tǒng)時,你必須知道系統(tǒng)的短處,懂得 CAP 能讓你根據(jù)實際情況有舍有得。面試會被經(jīng)常問到,比如,你說你使用了消息隊列,解決了系統(tǒng)耦合問題,提高了響應(yīng)速度,那面試官問題:使用消息隊列有啥缺點?如果你知道 CAP 定理這個問題還難嗎?

顯然消息的延遲會帶來數(shù)據(jù)不一致問題。理想情況下消息不丟失那數(shù)據(jù)會最終一致,你能保證消息不丟失嗎?如何解決機問題,如果是我,我會選擇 “最終一致性”,就是說不管消息延遲多久甚至丟失,設(shè)計一個離線定時任務(wù),定期去掃描兩個系統(tǒng)的數(shù)據(jù),有不一致的情況就主動刷新同步,這樣保證最終一致。

以上就是java分布式面試CAP分別代表含義分析的詳細內(nèi)容,更多關(guān)于java分布式面試CAP含義的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論