程式設計師經典面試題,高併發系統,一般需要怎麼做

高併發系統總是那麼令人著迷,比如說雙十一的搶購,比如說12306的搶票,都是非常經典的高併發的例子,也是非常大的挑戰。對於開發這樣系統的人來說,最怕的就是突發的流量,就好比河流突發大水而引發洪澇災害一樣,突發的流量也會引起伺服器奔潰。

程式設計師經典面試題,高併發系統,一般需要怎麼做

為了應對這些突發的流量,我們總需要做點什麼?今天我們來介紹一下高併發的幾個套路。

分散式

提升併發的好的辦法,便是提升硬體。舉個大家都熟悉的例子,十年前的諾基亞手機,一般我們只能簡單的掛一個QQ後臺,多幹幾個事情,就不行了。五年前,我們用的安卓手機能開十來個任務,切換也比較流暢了,而今天,剛剛釋出的蘋果iPhone11,效能就更加強勁。但是我們也發現,這兩年,好像手機的效能沒有飛速發展了。無論是蘋果、高通還是華為,或者是PC晶片的廠商因特爾或者AMD,都開始慢慢在擠牙膏了。

這其實是受到物理定理的制約,電晶體不可能無限小,無限整合,硬體不可能一直保持突飛猛進。並且,越是高階的機器,成本越貴,並且這個價格很可能是指數級增長的。谷歌公司在很早之前就發現,於是開始組建分散式系統,使用一個叢集而不是一臺機器來完成相關的工作,憑藉這一點,谷歌在網際網路早期迅速發展。

快取

快取,是解決高併發問題的另一個有效手段。因為磁碟的讀寫速度較慢,所以我們常常用讀寫速度的更高的記憶體來防止流量到達磁碟。

一般我們會把一些靜態資源都放在快取上,或者將一些動態的又不怎麼重要的更新頻率可以接受延遲的放在快取裡。舉個例子,音樂伺服器,我們可以把專輯的圖片、音樂檔案這些放在CDN等快取服務上,對於一些熱門的評論列表,我們也可以進行快取,一定時間才重新整理一次,可以大大減少磁碟的壓力。當然,有時候有快取還遠遠不夠,例如前幾天周杰倫的新專輯照樣打垮了QQ音樂的伺服器。

非同步

即便是有快取,有些請求仍然沒有辦法快速的相應。

程式設計師經典面試題,高併發系統,一般需要怎麼做

有些請求是寫請求,舉個例子,沙茶敏寫了一份電子郵件,群發了1萬個人,群發的人數非常多,伺服器要往很多人的信箱投遞訊息,假設一個人需要0。1秒,1萬個人也要1000秒。雖然可以併發到多臺機器解決,但是非常浪費資源,如果很多人這麼做,系統壓力非常大。

另外的情況,是有可能某個系統處理非常慢,這個系統既有可能是業務非常複雜,也有可能是第三方系統,舉個例子,沙茶敏從支付寶提取一筆資金到某小銀行,因為技術原因,某個小銀行每次介面訪問都要10秒鐘,不可能在轉賬頁面卡10秒,所以支付寶先告訴使用者轉賬成功了,然後非同步進行。

非同步,我們通常採用了非同步佇列,非同步的好處除了削峰,限流,提升使用者體驗,還能很好的保護系統。

總結

上面就是高併發系統中常用的幾個套路,當然,實際開發中我們還有很多要注意的。歡迎大家關注我,共同學習,共同進步。大家的支援是我繼續嘮嗑的動力。有想要學習C/C++程式設計的可以關注私信小編“程式設計”二字交流

,領取免費資料

程式設計師經典面試題,高併發系統,一般需要怎麼做