<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>

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

          共 2947字,需瀏覽 6分鐘

           ·

          2020-12-10 07:02

          從公眾號的發(fā)展到現(xiàn)在,自己基本上在公眾號上都沒有寫過“技術(shù)文章”(悄咪咪的說:博客之前寫的有“技術(shù)文章”),如果經(jīng)常看和尚交流群或者朋友圈的小伙伴知道上個月,和尚因?yàn)橼s項目加了一個月的班,目前項目已經(jīng)上線了,

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

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

          1. 很實(shí)在的就是你找工作面試必問點(diǎn)
          2. 天天被叫做 CRUD boy,但是我們在高并發(fā)的情況下寫好 CRUD 并不容易

          高并發(fā)是什么?

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

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

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

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

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

          其實(shí)這個問題怎么沒有具體的數(shù)據(jù)來衡量什么才是高并發(fā)?

          比如:

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

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

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

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

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

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

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

          3. 高性能,比如

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

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

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

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

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

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

          橫向擴(kuò)展

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

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

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

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

          使用緩存來提升性能

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

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

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

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

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

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

          做個比喻:以等外賣為例,你在門口一直等到外賣送過來,這個就是同步外賣。你先去干自己的事情,外賣到了給你打電話叫你取餐,你才來取餐,這個就是異步外賣。

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

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

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

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

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

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

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

          總結(jié)

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

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

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

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

          2020-09-28

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

          2020-03-15

          送給自己 | 你真的會問問題嗎?

          2020-06-05





          掃描二維碼

          獲取更多精彩

          加群二維碼




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

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  欧美成年网站 | 99久热精品视频 | 涩小说校园春色图片区视频区小说区 | 日韩动态| 国内精品无码 |