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

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

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

引言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

圖片描述

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

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

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

舉例深入分析

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

圖片描述

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

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

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

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

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

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

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

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

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

進(jìn)一步分析:

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

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

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

 總結(jié)

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

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

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

相關(guān)文章

最新評論