<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          面試?yán)@不開(kāi)的 CAP 理論,這篇文章幫你搞定!

          共 4171字,需瀏覽 9分鐘

           ·

          2022-06-21 02:10

          點(diǎn)擊上方“碼農(nóng)突圍”,馬上關(guān)注

          這里是碼農(nóng)充電第一站,回復(fù)“666”,獲取一份專屬大禮包
          真愛(ài),請(qǐng)?jiān)O(shè)置“星標(biāo)”或點(diǎn)個(gè)“在看”


          文章轉(zhuǎn)載于:JAVA日知錄  

          案例背景

          CAP 理論是分布式系統(tǒng)中最核心的基礎(chǔ)理論,雖然在面試中,面試官不會(huì)直白地問(wèn)你 CAP 理論的原理,但是在面試中遇到的分布式系統(tǒng)設(shè)計(jì)問(wèn)題,都繞不開(kāi)你對(duì) CAP 的理解和思考。

          而且在面試中,針對(duì)面試不同崗位的候選者,面試官的要求也會(huì)不一樣,要求你回答的深度也不一樣。所以在這一講中,我會(huì)針對(duì)初中級(jí)研發(fā)工程師和高級(jí)研發(fā)工程師兩個(gè)不同的角度,分析面試思路。

          案例分析

          相信只要學(xué)習(xí)過(guò)分布式技術(shù)的相關(guān)知識(shí),基本上都知道 CAP 理論指的是什么:C(Consistency)是數(shù)據(jù)一致性、A(Availability)是服務(wù)可用性、P(Partition tolerance)是分區(qū)容錯(cuò)性。

          C、A、P 只能同時(shí)滿足兩個(gè)目標(biāo),而由于在分布式系統(tǒng)中,P 是必須要保留的,所以要在 C 和 A 間進(jìn)行取舍。假如要保證服務(wù)的可用性,就選擇 AP 模型,而要保證一致性的話,就選擇 CP 模型。

          很多候選者如果發(fā)現(xiàn)面試題(比如“為了數(shù)據(jù)容災(zāi),我們會(huì)做數(shù)據(jù)的主從備份,那么主從節(jié)點(diǎn)的數(shù)據(jù)一致性對(duì)調(diào)用端有什么影響呢?”)涉及了對(duì)“CAP 的理解和思考”,會(huì)下意識(shí)地做出類似的答案:“ CAP 理論描述了在出現(xiàn)網(wǎng)絡(luò)分區(qū)的情況下,要在 C 和 A 之間做取舍,所以會(huì)影響站在調(diào)用端的視角看系統(tǒng)是不可用的”。如果是我的話,大概會(huì)給個(gè)及格分,并認(rèn)為這樣的回答,只能證明你有準(zhǔn)備,不能證明你有能力。

          因?yàn)樵诿嬖囍杏龅嚼碚搯?wèn)題時(shí),單純做浮于表面的概念性闡述,很難向面試官證明你的技術(shù)能力。  面試官會(huì)覺(jué)得你是一個(gè)剛接觸分布式系統(tǒng),或者對(duì)分布式系統(tǒng)理解不夠深入的研發(fā),如果這恰好是你第一個(gè)面試題,會(huì)直接影響面試官對(duì)你的第一印象,甚至影響你的定級(jí)。

          從我的經(jīng)驗(yàn)出發(fā),如果你想答得更好,你需要先掌握 CAP 的原理、實(shí)踐經(jīng)驗(yàn)、技術(shù)認(rèn)知,然后再結(jié)合具體的面試題具體分析。

          問(wèn)題解答

          理解原理

          現(xiàn)在有一個(gè)分布式系統(tǒng) A,它有一個(gè)副本 A1,在正常情況下,客戶端 Client 寫數(shù)據(jù)到系統(tǒng) A,然后數(shù)據(jù)從 A 節(jié)點(diǎn)同步到 A1 節(jié)點(diǎn),再返回給 Client 成功狀態(tài)。

          圖片

          這時(shí),客戶端 Client 從任何節(jié)點(diǎn) A 或 A1 讀取數(shù)據(jù),都能讀取到最新寫入的數(shù)據(jù),說(shuō)明 A 和 A1 的數(shù)據(jù)是一致的,并且 A 和 A1 也都是可用的。

          但由于網(wǎng)絡(luò)是不可靠的,節(jié)點(diǎn) A 和 A1 的網(wǎng)絡(luò)隨時(shí)會(huì)因?yàn)橹袛喽霈F(xiàn)分區(qū)。所謂網(wǎng)絡(luò)分區(qū)就是由于網(wǎng)絡(luò)不通導(dǎo)致節(jié)點(diǎn) A 和 A1 被隔離在不同的網(wǎng)絡(luò)子集中,此時(shí)節(jié)點(diǎn) A 的數(shù)據(jù)就不能及時(shí)同步到節(jié)點(diǎn) A1 中了。

          圖片

          在分布式系統(tǒng)中,由于網(wǎng)絡(luò)問(wèn)題導(dǎo)致的網(wǎng)絡(luò)分區(qū)是常態(tài)。也就是說(shuō)出現(xiàn)網(wǎng)絡(luò)分區(qū)時(shí),根據(jù) CAP 理論,需要在 A 和 C 中進(jìn)行取舍,即要么保證系統(tǒng)的可用性,要么保證數(shù)據(jù)一致性。

          這里你要注意了,上面的例子有個(gè)大前提,就是系統(tǒng)出現(xiàn)了網(wǎng)絡(luò)分區(qū),但實(shí)際情況是,在絕大多數(shù)時(shí)間里并不存在網(wǎng)絡(luò)分區(qū)(網(wǎng)絡(luò)不會(huì)經(jīng)常出現(xiàn)問(wèn)題)。那么還要進(jìn)行三選二嗎(CP 或者 AP)?

          其實(shí),不同的分布式系統(tǒng)要根據(jù)業(yè)務(wù)場(chǎng)景和業(yè)務(wù)需求在 CAP 三者中進(jìn)行權(quán)衡。CAP 理論用于指導(dǎo)在系統(tǒng)設(shè)計(jì)時(shí)需要衡量的因素,而非進(jìn)行絕對(duì)地選擇。

          當(dāng)網(wǎng)絡(luò)沒(méi)有出現(xiàn)分區(qū)時(shí),CAP 理論并沒(méi)有給出衡量 A 和 C 的因素,但如果你做過(guò)實(shí)際的分布式系統(tǒng)設(shè)計(jì),一定會(huì)發(fā)現(xiàn)系統(tǒng)數(shù)據(jù)同步的時(shí)延(Latency),即例子中節(jié)點(diǎn) A 同步數(shù)據(jù)到節(jié)點(diǎn) A1 的時(shí)間才是衡量 A 和 C 最重要的因素,此時(shí)就不會(huì)有絕對(duì)的 AP 模型還是 CP 模型了,而是源于對(duì)實(shí)際業(yè)務(wù)場(chǎng)景的綜合考量。

          因此,才會(huì)有如 PACELC「Reference1」 這樣的新模型優(yōu)化原有的 CAP 理論,理論指導(dǎo)實(shí)踐,實(shí)踐優(yōu)化理論。

          根據(jù) PACELC 模型的定義,如果有網(wǎng)絡(luò)分區(qū)產(chǎn)生,系統(tǒng)就必須在 A 和 C 之間取得平衡,否則(Else,即 PACELC 中的 E)當(dāng)系統(tǒng)運(yùn)行在無(wú)網(wǎng)絡(luò)分區(qū)情況下,系統(tǒng)需要在 L(延遲)和 C 之間取得平衡。

          PACELC

          但理解到這個(gè)程度還不夠,你還需要結(jié)合落地經(jīng)驗(yàn)進(jìn)行證明。

          實(shí)踐經(jīng)驗(yàn)

          你要意識(shí)到,互聯(lián)網(wǎng)分布式的設(shè)計(jì)方案是數(shù)據(jù)一致性和系統(tǒng)可用性的權(quán)衡,并不是非此即彼,這一點(diǎn)尤為重要。所以即使無(wú)法做到強(qiáng)一致性(簡(jiǎn)單來(lái)講強(qiáng)一致性就是在任何時(shí)刻所有的用戶查詢到的數(shù)據(jù)都是最新的),也可以根據(jù)自身的業(yè)務(wù)特點(diǎn),采用適當(dāng)?shù)姆绞絹?lái)使系統(tǒng)達(dá)到最終一致性。

          這時(shí)就要引出 BASE 理論,它是 CAP 理論的延伸。BASE 是 Basically Available(基本可用)、Soft State(軟狀態(tài))和 Eventually Consistent(最終一致性)三個(gè)單詞的簡(jiǎn)寫,作用是保證系統(tǒng)的可用性,然后通過(guò)最終一致性來(lái)代替強(qiáng)一致性,它是目前分布式系統(tǒng)設(shè)計(jì)中最具指導(dǎo)意義的經(jīng)驗(yàn)總結(jié)。那么在實(shí)際項(xiàng)目中,你如何通過(guò) BASE 理論來(lái)指導(dǎo)設(shè)計(jì)實(shí)踐呢?

          BASE 中的基本可用指的是保障核心功能的基本可用,其實(shí)是做了“可用性”方面的妥協(xié),比如:

          • 電商網(wǎng)站在雙十一大促等訪問(wèn)壓力較大的時(shí)候,關(guān)閉商品排行榜等次要功能的展示,從而保證商品交易主流程的可用性,這也是我們常說(shuō)的服務(wù)降級(jí);

          • 為了錯(cuò)開(kāi)雙十一高峰期,電商網(wǎng)站會(huì)將預(yù)售商品的支付時(shí)間延后十到二十分鐘,這就是流量削峰;

          • 在你搶購(gòu)商品的時(shí)候,往往會(huì)在隊(duì)列中等待處理,這也是常用的延遲隊(duì)列。

          軟狀態(tài)和最終一致性指的是允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),這同樣是為了系統(tǒng)可用性而犧牲一段時(shí)間窗內(nèi)的數(shù)據(jù)一致性,從而保證最終的數(shù)據(jù)一致性的做法。

          目前這種處理數(shù)據(jù)的方式幾乎成了互聯(lián)網(wǎng)的標(biāo)配設(shè)計(jì)模式,最經(jīng)典的例子是在用戶下單的時(shí)候不需要真正地扣減庫(kù)存,而是僅在前臺(tái)計(jì)個(gè)數(shù),然后通過(guò)異步任務(wù)在后臺(tái)批量處理。

          如果你想應(yīng)聘的是初中級(jí)研發(fā)工程師,那么結(jié)合上述思路,從理論理解到落地實(shí)踐,你已經(jīng)可以把 CAP 理論答得較為清楚了。回答問(wèn)題的邏輯可以參考我給出的建議:

          • 先充分理解理論原理,不能僅浮在概念上;

          • 其次需要有自己的思考,表現(xiàn)出你思考能力的不同;

          • 然后將理論結(jié)合于實(shí)踐,討論實(shí)際中處理問(wèn)題時(shí)的思考邏輯。

          技術(shù)認(rèn)知

          如果你應(yīng)聘的是高級(jí)研發(fā)工程師或架構(gòu)師,在回答時(shí),還要盡可能地展示知識(shí)體系和技術(shù)判斷力,這是這兩個(gè)崗位的基本素質(zhì)。因?yàn)榉植际郊夹g(shù)錯(cuò)綜復(fù)雜,各種技術(shù)又相互耦合,在面試中,如果你能通過(guò)一個(gè) CAP 理論的知識(shí)點(diǎn),擴(kuò)展出一個(gè)脈絡(luò)清晰的分布式核心技術(shù)知識(shí)體系,就會(huì)與其他人拉開(kāi)差距。

          分布式系統(tǒng)看起來(lái)就像一個(gè)計(jì)算機(jī)。計(jì)算機(jī)包括五大體系結(jié)構(gòu)(即馮諾依曼結(jié)構(gòu)),它有五大部件:分別是控制器、運(yùn)算器、存儲(chǔ)器、輸入及輸出。 你可以這么理解:一個(gè)分布式系統(tǒng)也包含這五大部件,其中最重要的是計(jì)算與存儲(chǔ)。計(jì)算與存儲(chǔ)由一系列網(wǎng)絡(luò)節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)之間的通信就是輸入與輸出,各節(jié)點(diǎn)之間的調(diào)度管理就是控制器。

          圖片

          分布式架構(gòu)技術(shù)組成

          這么看來(lái),分布式系統(tǒng)就像一個(gè)網(wǎng)絡(luò)計(jì)算機(jī),它的知識(shí)體系包括四個(gè)角度:

          • 存儲(chǔ)器 ,即分布式存儲(chǔ)系統(tǒng),如 NoSQL 數(shù)據(jù)庫(kù)存儲(chǔ);

          • 運(yùn)算器 ,即分布式計(jì)算,如分布式并行計(jì)算;

          • 輸入輸出 ,即分布式系統(tǒng)通信,如同步 RPC 調(diào)用和異步消息隊(duì)列;

          • 控制器 ,即調(diào)度管理,如流量調(diào)度、任務(wù)調(diào)度與資源調(diào)度。

          你可以從這四個(gè)角度來(lái)概括分布式系統(tǒng)的知識(shí)體系。

          那么具體的解題思路是什么呢? 以“Redis 是否可以作為分布式鎖”為例,咱們一起來(lái)分析一下問(wèn)題背后隱藏的分布式理論知識(shí),以及作為高級(jí)研發(fā)工程師的解題思路。

          解題思路

          • 說(shuō)明現(xiàn)實(shí)存在的問(wèn)題

          一般使用 setnx 方法,通過(guò) Redis 實(shí)現(xiàn)鎖和超時(shí)時(shí)間來(lái)控制鎖的失效時(shí)間。但是在極端的情況下,當(dāng) Reids 主節(jié)點(diǎn)掛掉,但鎖還沒(méi)有同步到從節(jié)點(diǎn)時(shí),根據(jù)哨兵機(jī)制,從就變成了主,繼續(xù)提供服務(wù)。這時(shí),另外的線程可以再來(lái)請(qǐng)求鎖,此時(shí)就會(huì)出現(xiàn)兩個(gè)線程拿到了鎖的情況。

          • 回歸理論的指導(dǎo)

          根據(jù)對(duì) CAP 理論的理解,Redis 的設(shè)計(jì)模型是 AP 模型,而分布式鎖是一個(gè) CP 場(chǎng)景,那么很明顯,將 Redis 這種 AP 模型的架構(gòu)應(yīng)用于 CP 的場(chǎng)景,在底層的技術(shù)選型上就是錯(cuò)誤的。

          • 擴(kuò)展到知識(shí)體系

          Redis 屬于分布式存儲(chǔ)系統(tǒng),你的頭腦里就要有對(duì)分布式存儲(chǔ)系統(tǒng)領(lǐng)域的知識(shí)體系。思考它的數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)分布、數(shù)據(jù)復(fù)制,以及數(shù)據(jù)一致性都是怎么做的,用了哪些技術(shù)來(lái)實(shí)現(xiàn),為什么要做這樣的技術(shù)或算法選型。你要學(xué)會(huì)從多維度、多角度去對(duì)比、分析同一分布式問(wèn)題的不同方法,然后綜合權(quán)衡各種方法的優(yōu)缺點(diǎn),最終形成自己的技術(shù)認(rèn)知和技術(shù)判斷力。

          • 有技術(shù)的判斷力

          比如通過(guò) Redis,你能想到目前分布式緩存系統(tǒng)的發(fā)展現(xiàn)狀以及技術(shù)實(shí)現(xiàn),如果讓你造一個(gè)“Redis”出來(lái),你會(huì)考慮哪些問(wèn)題等。雖然在實(shí)際工作中不推薦重復(fù)“造輪子”,但在面試中要表現(xiàn)出自己具備“造輪子”的能力。

          總結(jié)

          CAP 理論看似簡(jiǎn)單,但在面試中,對(duì)它的理解深度可以從側(cè)面反映出你對(duì)分布式系統(tǒng)的整體理解能力和駕馭能力。

          所以你不但要掌握如何在面試中回答案例中 CAP 原理的問(wèn)題,而且還要掌握回答問(wèn)題的思路,以后遇到類似的理論性知識(shí)的考察,都可以從三個(gè)層面回答。

          • 展示理論深度。 你可以從一個(gè)熟知的知識(shí)點(diǎn)出發(fā),深入淺出地回答,比如它的工作原理、優(yōu)劣勢(shì)、適用場(chǎng)景等。

          • 結(jié)合落地經(jīng)驗(yàn)。 你不能僅停留在理論理解,還要結(jié)合落地方案的技術(shù)實(shí)現(xiàn),這樣才能體現(xiàn)你的技術(shù)閉環(huán)思維。

          • 展示知識(shí)體系。 這是任何一個(gè)程序員向上發(fā)展的基礎(chǔ)能力。理論深度和落地經(jīng)驗(yàn)體現(xiàn)了作為程序員的基本素質(zhì),而知識(shí)體系和技術(shù)判斷力則體現(xiàn)了你是否達(dá)到架構(gòu)師的能力邊界。

          文章結(jié)尾,送給你一句話:“技術(shù)人,要有落于地的能力,還要有浮上天的本事”。

          (完)

          碼農(nóng)突圍資料鏈接

          1、臥槽!字節(jié)跳動(dòng)《算法中文手冊(cè)》火了,完整版 PDF 開(kāi)放下載!
          2、計(jì)算機(jī)基礎(chǔ)知識(shí)總結(jié)與操作系統(tǒng) PDF 下載
          3、艾瑪,終于來(lái)了!《LeetCode Java版題解》.PDF
          4、Github 10K+,《LeetCode刷題C/C++版答案》出爐.PDF

          歡迎添加魚(yú)哥個(gè)人微信:smartfish2020,進(jìn)粉絲群或圍觀朋友圈

          瀏覽 44
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  外国黑人操逼 | 欧美爱爱试看 | 欧美三级黄色 | 肏屄视频在线免费观看 | 国产福利一区二区在线观看 |