<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    分布式系統(tǒng)中的幾個(gè)理論

    共 2030字,需瀏覽 5分鐘

     ·

    2021-04-27 23:24


    系統(tǒng)和架構(gòu)做的越多,就越覺(jué)得架構(gòu)是個(gè)取舍的藝術(shù)。沒(méi)有所謂的銀彈可以把很多問(wèn)題一次性解決掉,也就不糾結(jié)讓業(yè)務(wù)給你一個(gè)偏于理想的迭代節(jié)奏與業(yè)務(wù)保證業(yè)務(wù)怎樣怎樣。


    前一段時(shí)間一個(gè)朋友說(shuō)了去快手面試的經(jīng)歷,背景應(yīng)該是讓做一個(gè)秒殺場(chǎng)景的系統(tǒng)設(shè)計(jì)。


    朋友當(dāng)然說(shuō)了類似于“沒(méi)有明確場(chǎng)景的架構(gòu)設(shè)計(jì)都是耍流氓”,朋友的回答圍繞于流量漏斗、最終一致去回答,但面試官核心要求是100w tps打到了數(shù)據(jù)庫(kù)上你怎么解?


    這個(gè)事情就很難搞,首先100w tps怎么來(lái)的?既然這么多流量都是真實(shí)流量,有狀態(tài)服務(wù)和存儲(chǔ)服務(wù)不具備足夠的容量可以支撐嗎?肯定要加機(jī)器。具體怎么解決流量過(guò)濾和數(shù)據(jù)一致肯定需要看具體場(chǎng)景,比如不同領(lǐng)域下的服務(wù)對(duì)于數(shù)據(jù)一致性容忍程度是不一樣的,背后肯定方案也不一樣。脫離業(yè)務(wù)場(chǎng)景談架構(gòu)果然是耍流氓,最后這個(gè)面試是不歡而散。


    做秒殺架構(gòu)主要解決兩件事情,一個(gè)是高流量,一個(gè)是數(shù)據(jù)一致性。這兩個(gè)方向問(wèn)題回答好了,理論上就沒(méi)有問(wèn)題了。我自己做面試官心里當(dāng)然想候選人給我一個(gè)完備的方案,但是我也知道在有限的時(shí)間、有限的場(chǎng)景下,光靠嘴聊是很難聊得完備的,所以我一般觀察兩點(diǎn)。


    一個(gè)是普世方的法論,就是有些事情是是永遠(yuǎn)做不到完美的,也不要期望做到完美,但是你需要告訴我為什么做不到完美,他的本質(zhì)是什么,怎么做到趨于完美。


    第二個(gè)是看方案的完備性,什么意思呢?是希望候選人可以給出這個(gè)核心問(wèn)題之外的一些考慮,我個(gè)人理解是一種擴(kuò)展性的體現(xiàn),如果一個(gè)系統(tǒng)負(fù)責(zé)人不能考慮核心問(wèn)題之外的一些事情,系統(tǒng)的可靠性與擴(kuò)展性就很難提前規(guī)劃出來(lái),這樣的系統(tǒng)就變成了故障驅(qū)動(dòng)型系統(tǒng)了,就是出了問(wèn)題做次迭代,永遠(yuǎn)跟在故障之后擦屁股。


    那在分布式系統(tǒng)下有哪些理論,可以幫助我們?cè)诩軜?gòu)中的方案更合理呢?


    FLP理論


    FLP理論說(shuō)的是不可能原理,原論文指出:在網(wǎng)絡(luò)可靠,但允許節(jié)點(diǎn)失效的最小化異步模型系統(tǒng)中,不存在一個(gè)可以解決一致性問(wèn)題的確定性共識(shí)算法。


    簡(jiǎn)單來(lái)說(shuō),就是不要在分布式系統(tǒng)中的異步場(chǎng)景下浪費(fèi)時(shí)間去設(shè)計(jì)出所有場(chǎng)景都能實(shí)現(xiàn)共識(shí)的方案。


    為什么呢?


    在分布式架構(gòu)下,節(jié)點(diǎn)之間通信是異步的,如果一個(gè)節(jié)點(diǎn)進(jìn)程停止工作了,其他節(jié)點(diǎn)是不能確認(rèn)是消息延遲導(dǎo)致的,還是真的掛了,還是會(huì)嘗試進(jìn)行消息讀取。


    FLP理論告訴我們,一致性算法的可靠性是無(wú)法保證的,不存在一個(gè)可以在異步網(wǎng)絡(luò)上容忍各種故障且保持一致性的分布式系統(tǒng)。


    無(wú)論paxos還是raft,如果你想要安全,那么理論上都會(huì)產(chǎn)生無(wú)法表決通過(guò)的死循環(huán),每次的狀態(tài)變化都可能是當(dāng)前狀態(tài)的一種分支情況,所以在分布式系統(tǒng)中永遠(yuǎn)不能能達(dá)成單體應(yīng)用級(jí)別的一致性。


    在現(xiàn)實(shí)場(chǎng)景中,我們采用TCP協(xié)議,保障消息健壯性、不重復(fù)、不亂序,每個(gè)節(jié)點(diǎn)通過(guò)NTP時(shí)鐘同步


    CAP理論


    CAP包括:一致性、可用性、分區(qū)容錯(cuò)性。


    一致性:當(dāng)系統(tǒng)的更新操作成功并返回客戶端后,后續(xù)所有節(jié)點(diǎn)對(duì)于數(shù)據(jù)的訪問(wèn)應(yīng)該都可以獲取新值;

    可用性:分布式系統(tǒng)可以正常對(duì)外提供服務(wù);

    分區(qū)容錯(cuò)性:分布式系統(tǒng)遇到某些節(jié)點(diǎn)故障或網(wǎng)絡(luò)分區(qū)故障時(shí),仍可以對(duì)外提供服務(wù);


    CAP理論告訴我們,在分布式系統(tǒng)下不能同時(shí)滿足一致性、可用性、分區(qū)容錯(cuò)性三個(gè)特性,只能取其二。而在分布式環(huán)境下,網(wǎng)絡(luò)問(wèn)題是需要滿足的,也就是P是需要的。所以大部分情況下關(guān)注于AP或CP即可。


    BASE理論


    BASE理論是對(duì)CAP理論的延伸,是對(duì)于CAP中強(qiáng)一致性的進(jìn)一步延伸,提供軟狀態(tài)、最終一致性。


    BA(基本可用):在分布式系統(tǒng)出現(xiàn)故障時(shí),允許損失部分可用性,保障核心可用,比如電商雙十一時(shí),為滿足商品購(gòu)買(mǎi)鏈路的穩(wěn)定性,可以降級(jí)掉用戶修改地址這些功能。


    S(軟狀態(tài)):允許系統(tǒng)之間出現(xiàn)中間狀態(tài),什么意思呢?不是簡(jiǎn)單的剛性成功 or 失敗,而是在分布式系統(tǒng)下多副本中出現(xiàn)中間狀態(tài),這種中間狀態(tài)是由于多個(gè)副本復(fù)制延遲導(dǎo)致的,比如mysql replication異步復(fù)制。


    E(最終一致性):指的是系統(tǒng)中所有副本數(shù)據(jù)經(jīng)過(guò)一定時(shí)間之后,可以達(dá)到最終一致的狀態(tài)。


    ACID原則


    ACID是:原子性、一致性、隔離性、持久性。


    概念包括:


    原子性:每次操作是原子的,要么成功,要么失??;

    一致性:是強(qiáng)一致性,沒(méi)有中間狀態(tài);

    隔離性:各個(gè)操作彼此隔離,互不影響;

    持久性:數(shù)據(jù)狀態(tài)一旦提交,是持久的,不會(huì)失效;


    ACID一般用于關(guān)系數(shù)據(jù)庫(kù)的事務(wù)定義,追求的是強(qiáng)一致性;

    BASE是在分布式系統(tǒng)下,犧牲掉對(duì)于一致性的約束,以最終一致性的方式提供一致性,換取性能和可用性;


    兩種方案是完全相反的設(shè)計(jì)哲學(xué),具體怎么用就需要看場(chǎng)景了。


    所以架構(gòu)是取舍的藝術(shù),脫離場(chǎng)景談架構(gòu)都是耍流氓,先基于場(chǎng)景,畫(huà)一個(gè)框,在框內(nèi)找到一個(gè)確定性的問(wèn)題,找到這個(gè)問(wèn)題的本質(zhì),給出合適的解。


    其他分布式原理,詳見(jiàn):


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

    手機(jī)掃一掃分享

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

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    一区日韩 | 日本乱码视频在线播放 | 天天躁日日躁狠狠躁免费麻豆 | 无码欧美 | 亚洲免费大片 |