1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        互聯(lián)網(wǎng)架構(gòu)“高并發(fā)”到底怎么玩?

        共 2947字,需瀏覽 6分鐘

         ·

        2020-12-10 07:02

        從公眾號(hào)的發(fā)展到現(xiàn)在,自己基本上在公眾號(hào)上都沒(méi)有寫(xiě)過(guò)“技術(shù)文章”(悄咪咪的說(shuō):博客之前寫(xiě)的有“技術(shù)文章”),如果經(jīng)??春蜕薪涣魅夯蛘吲笥讶Φ男』锇橹郎蟼€(gè)月,和尚因?yàn)橼s項(xiàng)目加了一個(gè)月的班,目前項(xiàng)目已經(jīng)上線了,

        現(xiàn)在也有時(shí)間來(lái)寫(xiě)寫(xiě)文章了,最近實(shí)踐和學(xué)習(xí)都用到了一些“高并發(fā)”的知識(shí),所以今天就準(zhǔn)備來(lái)寫(xiě)一篇關(guān)于《互聯(lián)網(wǎng)架構(gòu)“高并發(fā)”到底怎么玩》的文章。

        首先拋出一個(gè)點(diǎn),我們?yōu)槭裁磳W(xué)高并發(fā)設(shè)計(jì)?

        1. 很實(shí)在的就是你找工作面試必問(wèn)點(diǎn)
        2. 天天被叫做 CRUD boy,但是我們?cè)诟卟l(fā)的情況下寫(xiě)好 CRUD 并不容易

        高并發(fā)是什么?

        **高并發(fā)(**High Concurrency)是互聯(lián)網(wǎng)分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常是指,通過(guò)設(shè)計(jì)保證系統(tǒng)能夠同時(shí)并行處理很多請(qǐng)求。

        高并發(fā)相關(guān)常用的一些指標(biāo)有響應(yīng)時(shí)間(Response Time),吞吐量(Throughput),每秒查詢(xún)率QPS(Query Per Second),每秒事務(wù)處理量TPS(Transaction Per Second),并發(fā)用戶(hù)數(shù)等。

        這里不細(xì)提這些指標(biāo)的含義,不了解的可以 Google。

        現(xiàn)在問(wèn)題來(lái)了,多少 QPS 才算高并發(fā)?

        看下面這段話之前,歡迎大家先去 Google 上搜一下這個(gè)答案,看看是否有具體的數(shù)據(jù)?

        其實(shí)這個(gè)問(wèn)題怎么沒(méi)有具體的數(shù)據(jù)來(lái)衡量什么才是高并發(fā)?

        比如:

        1. 就一個(gè)服務(wù)部署在單機(jī)上,一次請(qǐng)求就訪問(wèn)一個(gè)服務(wù),抗住的 QPS 肯定很高
        2. 但是如果是多個(gè)分布式服務(wù),一次請(qǐng)求需要訪問(wèn)多個(gè)全鏈路服務(wù),這時(shí)候 QPS 又跟業(yè)務(wù)服務(wù)數(shù)量等強(qiáng)相關(guān)

        所以具體多少 QPS 才算高并發(fā)其實(shí)跟業(yè)務(wù)是強(qiáng)相關(guān)的。

        高并發(fā)設(shè)計(jì)真的就只是 synchronized、lock 這些嗎?

        經(jīng)常也看見(jiàn)很多內(nèi)容標(biāo)題是《高并發(fā) xxx》,然后點(diǎn)進(jìn)去一看,就是講 synchronized、volatile 等等,其實(shí)個(gè)人覺(jué)得這些點(diǎn)只能算并發(fā)編程設(shè)計(jì)等,不能算到高并發(fā)設(shè)計(jì)里。

        明確幾點(diǎn),高并發(fā)系統(tǒng)比較關(guān)注的點(diǎn)

        1. 可用性,系統(tǒng)在高并發(fā)情況下不能被流量打掛,

        2. 穩(wěn)定性,系統(tǒng)肯定不能出現(xiàn)一會(huì)好用,一會(huì)不好用的情況

        3. 高性能,比如

          1. 淘寶的雙 11 活動(dòng),如果你 0.00 下單一直卡在哪里,等了 1 分鐘,然后才告訴你要買(mǎi)的東西沒(méi)貨了。

          2. 每個(gè)月的花唄還款日,還款處理中,等了 1 分鐘告訴你還款成功/失敗

        正題來(lái)了,高并發(fā)系統(tǒng)的通用設(shè)計(jì)方法是什么?

        其實(shí)到了這里,很多人肯定就會(huì)說(shuō),分布式一致性怎么做、緩存一致性怎么做、Nginx 負(fù)載均衡怎么做、熔斷限流怎么做,叭叭叭。

        但是這里不講具體高并發(fā)系統(tǒng)下的細(xì)節(jié),這里只分享通用設(shè)計(jì)方法,這些設(shè)計(jì)方法可以讓你對(duì)于高并發(fā)系統(tǒng)的設(shè)計(jì)有一個(gè)大的骨架,就像修房子一樣,先有一個(gè)大體的房子架構(gòu)圖,再去考慮到房子里怎么裝修,這些方法同理如此。

        我們可以把高并發(fā)設(shè)計(jì)比喻為:大家去火車(chē)站坐火車(chē),火車(chē)站進(jìn)站開(kāi)多個(gè)進(jìn)站窗口驗(yàn)身份證和票,安檢傳送帶東西太多需要等待,那可以把安檢傳送帶設(shè)計(jì)寬一點(diǎn)放更多的東西,安檢人數(shù)過(guò)多,讓后面的人在卡點(diǎn)等一下,等前面的人安檢完畢再慢慢放人。

        橫向擴(kuò)展

        只要學(xué)過(guò)算法的我們,肯定知道分而治之這個(gè)點(diǎn),分而治之這個(gè)點(diǎn)同理在高并發(fā)系統(tǒng)設(shè)計(jì)里通用,

        當(dāng)大流量打到系統(tǒng)所在機(jī)器上的時(shí)候,我們可以把機(jī)器的配置升高,比如4 核 8g 的電腦帶不上吃雞,那我們就可以升級(jí)到 8 核 16g,這里就堆硬件配置來(lái)解決問(wèn)題,但是如果當(dāng)我們的流量超過(guò)了一臺(tái)機(jī)器配置的極限的時(shí)候,我們又該怎么做?

        我們可以拿多個(gè)機(jī)器來(lái)處理這些流量,我們可以把多個(gè)機(jī)器組成一個(gè)分布式集群來(lái)進(jìn)行處理這些流量,這樣的話流量就分?jǐn)偟矫總€(gè)機(jī)器上去了,當(dāng)然可能很多人就會(huì)問(wèn):機(jī)器掛了怎么辦?分布式一致性怎么做?怎么讓流量到服務(wù)器上?這里不談這些,因?yàn)檫@些點(diǎn)約談越深,根本出不來(lái)。

        這里談的橫向擴(kuò)展包含了很多點(diǎn),比如系統(tǒng)主服務(wù)扛不住可以加機(jī)器,數(shù)據(jù)庫(kù)扛不住也可以加機(jī)器做分庫(kù)分表等,接下來(lái)要說(shuō)的緩存如果扛不住也可以機(jī)器。

        使用緩存來(lái)提升性能

        其實(shí)說(shuō)到緩存,可能第一印象就是 Redis,但是緩存這個(gè)概念在計(jì)算機(jī)里到處都是,比如我們了解到的CPU 緩存、Web 緩存、磁盤(pán)緩存等等,這些地方都用到了緩存。緩存的種類(lèi)和實(shí)踐是非常多的,但是我們可以發(fā)現(xiàn)這些緩存的點(diǎn),最終目的就是降低響應(yīng)時(shí)間。再回過(guò)來(lái)想我們學(xué)習(xí) Redis 的第一點(diǎn)就學(xué)到,Redis 是基于內(nèi)存的,它很快。

        同步轉(zhuǎn)異步處理

        又說(shuō)到同步、異步這些詞,這些詞真的是太太太大眾化了。

        那什么是同步,什么是異步呢?

        以調(diào)用一個(gè)方法舉例,

        1. 同步調(diào)用代表調(diào)用方要阻塞等待被調(diào)用方法中的邏輯執(zhí)行完成。這種方式下,當(dāng)被調(diào)用方法響應(yīng)時(shí)間較長(zhǎng)時(shí),會(huì)造成調(diào)用方長(zhǎng)久的阻塞,在高并發(fā)下會(huì)造成整體系統(tǒng)性能下降甚至發(fā)生雪崩。
        2. 異步調(diào)用則相反,調(diào)用方不必等待方法邏輯執(zhí)行完成就可返回執(zhí)行其他邏輯,在被調(diào)用方法執(zhí)行完畢后再通過(guò)回調(diào)、事件通知等方式將結(jié)果反饋給調(diào)用方。

        做個(gè)比喻:以等外賣(mài)為例,你在門(mén)口一直等到外賣(mài)送過(guò)來(lái),這個(gè)就是同步外賣(mài)。你先去干自己的事情,外賣(mài)到了給你打電話叫你取餐,你才來(lái)取餐,這個(gè)就是異步外賣(mài)。

        比如前面圖片我說(shuō)到的花唄還款,還款一直顯示的是還款處理中,其實(shí)這個(gè)提示就代表著系統(tǒng)在異步處理我們的還款請(qǐng)求了。因?yàn)橐粋€(gè)還款請(qǐng)求需要涉及到很多內(nèi)部服務(wù)之間的互相調(diào)用。

        我們做同步轉(zhuǎn)異步的方式就是:采用消息隊(duì)列,還款處理時(shí)我們會(huì)把這個(gè)請(qǐng)求丟到消息隊(duì)列中,然后同時(shí)快速告訴我們:還款處理中,然后就釋放出資源去處理更多的還款請(qǐng)求。當(dāng)我們的還款請(qǐng)求在消息隊(duì)列最終被處理完畢之后,再告訴我們還款成功/失敗。

        當(dāng)我們采用消息隊(duì)列同步轉(zhuǎn)異步,比如可以從以前的同步還款 10s 響應(yīng)時(shí)間,提高到 4s 響應(yīng)時(shí)間告訴他處理中。系統(tǒng)的資源占用也少了很多,可以去處理更多的花唄還款請(qǐng)求了,系統(tǒng)承受高并發(fā)的能力也就提升了。這里其實(shí)也是消息隊(duì)列的作用之一。

        花唄異步處理還款操作示意圖

        我們還需要做什么?異常處理

        其實(shí)我們還需要思考很多點(diǎn),很多異常情況,寫(xiě)好代碼做好設(shè)計(jì)很簡(jiǎn)單,但是更難的是我們要如何做好異常處理進(jìn)行兜底,比如:

        1. 以上機(jī)器掛了怎么辦?
        2. 服務(wù)之間的各種調(diào)用問(wèn)題等等

        總結(jié)

        說(shuō)到這里,其實(shí)就算一個(gè)基本的結(jié)束了,高并發(fā)的設(shè)計(jì)其實(shí)就聊這些,以上內(nèi)容基本都是理論。但是 一個(gè)實(shí)踐案例不能完全涵蓋一個(gè)理論,相反一個(gè)理論可以支撐很多的實(shí)踐案例。

        這些思路其實(shí)在最近的實(shí)踐中也進(jìn)行了運(yùn)用,這樣設(shè)計(jì)里面肯定還會(huì)出現(xiàn)很多問(wèn)題的點(diǎn),這些問(wèn)題的點(diǎn)這篇文章不做細(xì)講。我們目前已經(jīng)把修房子的房子架構(gòu)圖已經(jīng)修好了,至于房子里的裝修怎么弄,就是后面的事了。

        但是如果當(dāng)你去面試或者做設(shè)計(jì)的時(shí)候,你就可以從這些點(diǎn)來(lái)出發(fā)回答問(wèn)題和思考問(wèn)題。這樣就不會(huì)過(guò)于細(xì)節(jié)或者回答偏離邏輯點(diǎn),從總體到細(xì)節(jié)。

        帶你直面面試官的連環(huán)炮(上)

        2020-09-28

        二本本科無(wú)實(shí)習(xí)上岸滴滴京東58科大訊飛復(fù)盤(pán)(上)

        2020-03-15

        送給自己 | 你真的會(huì)問(wèn)問(wèn)題嗎?

        2020-06-05





        掃描二維碼

        獲取更多精彩

        加群二維碼




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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产人妻精品一区二区三区电影 | 美女18禁网站黄色在线看 | 成人黄网站在线观看 | 成人三级黄色 | 精品无码一级毛片免费 | 欧美操逼性视频 | 亚洲精品A片 | 爽妇色啪网 | 亚洲AV成人片在线观看 | 国产精品高潮呻呤欠久A片 |