這篇文章主要介紹了怎么設(shè)計(jì)一個高并發(fā)系統(tǒng),具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)公司專注骨干網(wǎng)絡(luò)服務(wù)器租用10年,服務(wù)更有保障!服務(wù)器租用,成都西信服務(wù)器托管 成都服務(wù)器租用,成都服務(wù)器托管,骨干網(wǎng)絡(luò)帶寬,享受低延遲,高速訪問。靈活、實(shí)現(xiàn)低成本的共享或公網(wǎng)數(shù)據(jù)中心高速帶寬的專屬高性能服務(wù)器。
怎么設(shè)計(jì)一個高并發(fā)系統(tǒng)?
說實(shí)話,如果面試官問你這個題目,那么你必須要使出全身吃奶勁了。為啥?因?yàn)槟銢]看到現(xiàn)在很多公司招聘的 JD 里都是說啥,有高并發(fā)就經(jīng)驗(yàn)者優(yōu)先。
如果你確實(shí)有真才實(shí)學(xué),在互聯(lián)網(wǎng)公司里干過高并發(fā)系統(tǒng),那你確實(shí)拿 offer 基本如探囊取物,沒啥問題。面試官也絕對不會這樣來問你,否則他就是蠢。
假設(shè)你在某知名電商公司干過高并發(fā)系統(tǒng),用戶上億,一天流量幾十億,高峰期并發(fā)量上萬,甚至是十萬。那么人家一定會仔細(xì)盤問你的系統(tǒng)架構(gòu),你們系統(tǒng)啥架構(gòu)?怎么部署的?部署了多少臺機(jī)器?緩存咋用的?MQ 咋用的?數(shù)據(jù)庫咋用的?就是深挖你到底是如何扛住高并發(fā)的。
因?yàn)檎嬲蛇^高并發(fā)的人一定知道,脫離了業(yè)務(wù)的系統(tǒng)架構(gòu)都是在紙上談兵,真正在復(fù)雜業(yè)務(wù)場景而且還高并發(fā)的時候,那系統(tǒng)架構(gòu)一定不是那么簡單的,用個 redis,用 mq 就能搞定?當(dāng)然不是,真實(shí)的系統(tǒng)架構(gòu)搭配上業(yè)務(wù)之后,會比這種簡單的所謂“高并發(fā)架構(gòu)”要復(fù)雜很多倍。
如果有面試官問你個問題說,如何設(shè)計(jì)一個高并發(fā)系統(tǒng)?那么不好意思,一定是因?yàn)槟銓?shí)際上沒干過高并發(fā)系統(tǒng)。面試官看你簡歷就沒啥出彩的,感覺就不咋地,所以就會問問你,如何設(shè)計(jì)一個高并發(fā)系統(tǒng)?其實(shí)說白了本質(zhì)就是看看你有沒有自己研究過,有沒有一定的知識積累。
最好的當(dāng)然是招聘個真正干過高并發(fā)的哥兒們咯,但是這種哥兒們?nèi)藬?shù)稀缺,不好招。所以可能次一點(diǎn)的就是招一個自己研究過的哥兒們,總比招一個啥也不會的哥兒們好吧!
所以這個時候你必須得做一把個人秀了,秀出你所有關(guān)于高并發(fā)的知識!
其實(shí)所謂的高并發(fā),如果你要理解這個問題呢,其實(shí)就得從高并發(fā)的根源出發(fā),為啥會有高并發(fā)?為啥高并發(fā)就很牛逼?
我說的淺顯一點(diǎn),很簡單,就是因?yàn)閯傞_始系統(tǒng)都是連接數(shù)據(jù)庫的,但是要知道數(shù)據(jù)庫支撐到每秒并發(fā)兩三千的時候,基本就快完了。所以才有說,很多公司,剛開始干的時候,技術(shù)比較 low,結(jié)果業(yè)務(wù)發(fā)展太快,有的時候系統(tǒng)扛不住壓力就掛了。
當(dāng)然會掛了,憑什么不掛?你數(shù)據(jù)庫如果瞬間承載每秒 5000/8000,甚至上萬的并發(fā),一定會宕機(jī),因?yàn)楸热?MySQL 就壓根兒扛不住這么高的并發(fā)量。
所以為啥高并發(fā)牛逼?就是因?yàn)楝F(xiàn)在用互聯(lián)網(wǎng)的人越來越多,很多 app、網(wǎng)站、系統(tǒng)承載的都是高并發(fā)請求,可能高峰期每秒并發(fā)量幾千,很正常的。如果是什么雙十一之類的,每秒并發(fā)幾萬幾十萬都有可能。
那么如此之高的并發(fā)量,加上原本就如此之復(fù)雜的業(yè)務(wù),咋玩兒?真正厲害的,一定是在復(fù)雜業(yè)務(wù)系統(tǒng)里玩兒過高并發(fā)架構(gòu)的人,但是你沒有,那么我給你說一下你該怎么回答這個問題:
可以分為以下 6 點(diǎn):
系統(tǒng)拆分
緩存
MQ
分庫分表
讀寫分離
ElasticSearch
將一個系統(tǒng)拆分為多個子系統(tǒng),用 dubbo 來搞。然后每個系統(tǒng)連一個數(shù)據(jù)庫,這樣本來就一個庫,現(xiàn)在多個數(shù)據(jù)庫,不也可以扛高并發(fā)么。
緩存,必須得用緩存。大部分的高并發(fā)場景,都是讀多寫少,那你完全可以在數(shù)據(jù)庫和緩存里都寫一份,然后讀的時候大量走緩存不就得了。畢竟人家 redis 輕輕松松單機(jī)幾萬的并發(fā)。所以你可以考慮考慮你的項(xiàng)目里,那些承載主要請求的讀場景,怎么用緩存來抗高并發(fā)。
MQ,必須得用 MQ。可能你還是會出現(xiàn)高并發(fā)寫的場景,比如說一個業(yè)務(wù)操作里要頻繁搞數(shù)據(jù)庫幾十次,增刪改增刪改,瘋了。那高并發(fā)絕對搞掛你的系統(tǒng),你要是用 redis 來承載寫那肯定不行,人家是緩存,數(shù)據(jù)隨時就被 LRU 了,數(shù)據(jù)格式還無比簡單,沒有事務(wù)支持。所以該用 mysql 還得用 mysql 啊。那你咋辦?用 MQ 吧,大量的寫請求灌入 MQ 里,排隊(duì)慢慢玩兒,后邊系統(tǒng)消費(fèi)后慢慢寫,控制在 mysql 承載范圍之內(nèi)。所以你得考慮考慮你的項(xiàng)目里,那些承載復(fù)雜寫業(yè)務(wù)邏輯的場景里,如何用 MQ 來異步寫,提升并發(fā)性。MQ 單機(jī)抗幾萬并發(fā)也是 ok 的,這個之前還特意說過。
分庫分表,可能到了最后數(shù)據(jù)庫層面還是免不了抗高并發(fā)的要求,好吧,那么就將一個數(shù)據(jù)庫拆分為多個庫,多個庫來扛更高的并發(fā);然后將一個表拆分為多個表,每個表的數(shù)據(jù)量保持少一點(diǎn),提高 sql 跑的性能。
讀寫分離,這個就是說大部分時候數(shù)據(jù)庫可能也是讀多寫少,沒必要所有請求都集中在一個庫上吧,可以搞個主從架構(gòu),主庫寫入,從庫讀取,搞一個讀寫分離。讀流量太多的時候,還可以加更多的從庫。
Elasticsearch,簡稱 es。es 是分布式的,可以隨便擴(kuò)容,分布式天然就可以支撐高并發(fā),因?yàn)閯硬粍泳涂梢詳U(kuò)容加機(jī)器來扛更高的并發(fā)。那么一些比較簡單的查詢、統(tǒng)計(jì)類的操作,可以考慮用 es 來承載,還有一些全文搜索類的操作,也可以考慮用 es 來承載。
上面的 6 點(diǎn),基本就是高并發(fā)系統(tǒng)肯定要干的一些事兒,大家可以仔細(xì)結(jié)合之前講過的知識考慮一下,到時候你可以系統(tǒng)的把這塊闡述一下,然后每個部分要注意哪些問題,之前都講過了,你都可以闡述闡述,表明你對這塊是有點(diǎn)積累的。
說句實(shí)話,畢竟你真正厲害的一點(diǎn),不是在于弄明白一些技術(shù),或者大概知道一個高并發(fā)系統(tǒng)應(yīng)該長什么樣?其實(shí)實(shí)際上在真正的復(fù)雜的業(yè)務(wù)系統(tǒng)里,做高并發(fā)要遠(yuǎn)遠(yuǎn)比上面提到的點(diǎn)要復(fù)雜幾十倍到上百倍。你需要考慮:哪些需要分庫分表,哪些不需要分庫分表,單庫單表跟分庫分表如何 join,哪些數(shù)據(jù)要放到緩存里去,放哪些數(shù)據(jù)才可以扛住高并發(fā)的請求,你需要完成對一個復(fù)雜業(yè)務(wù)系統(tǒng)的分析之后,然后逐步逐步的加入高并發(fā)的系統(tǒng)架構(gòu)的改造,這個過程是無比復(fù)雜的,一旦做過一次,并且做好了,你在這個市場上就會非常的吃香。
其實(shí)大部分公司,真正看重的,不是說你掌握高并發(fā)相關(guān)的一些基本的架構(gòu)知識,架構(gòu)中的一些技術(shù),RocketMQ、Kafka、Redis、Elasticsearch,高并發(fā)這一塊,你了解了,也只能是次一等的人才。對一個有幾十萬行代碼的復(fù)雜的分布式系統(tǒng),一步一步架構(gòu)、設(shè)計(jì)以及實(shí)踐過高并發(fā)架構(gòu)的人,這個經(jīng)驗(yàn)是難能可貴的。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么設(shè)計(jì)一個高并發(fā)系統(tǒng)”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
網(wǎng)頁題目:怎么設(shè)計(jì)一個高并發(fā)系統(tǒng)
URL網(wǎng)址:http://www.rwnh.cn/article6/igicig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)公司、域名注冊、自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)