说实话,你的API接口在高并发面前不堪一击!
衡量一個(gè)接口是否能夠支撐高并發(fā),我們最先想到的就是他的QPS是多少,影響QPS大小的關(guān)鍵因素是你的系統(tǒng)是否支持分布式、高并發(fā),當(dāng)提起這幾三個(gè)詞的時(shí)候,是不是很多人都認(rèn)為分布式=高并發(fā)=多線程?
當(dāng)面試官問到高并發(fā)系統(tǒng)可以采用哪些手段來解決,或者被問到分布式系統(tǒng)如何解決一致性的問題,是不是一臉懵逼?
確實(shí),在一開始接觸的時(shí)候,不少人都會(huì)將三者混淆,誤以為所謂的分布式高并發(fā)的系統(tǒng)就是能同時(shí)供海量用戶訪問,而采用多線程手段不就是可以提供系統(tǒng)的并發(fā)能力嗎?
實(shí)際上,他們?nèi)齻€(gè)總是相伴而生,但側(cè)重點(diǎn)又有不同。
01
什么是分布式?
分布式更多的一個(gè)概念,是為了解決單個(gè)物理服務(wù)器容量和性能瓶頸問題而采用的優(yōu)化手段。
該領(lǐng)域需要解決的問題極多,在不同的技術(shù)層面上,又包括:分布式文件系統(tǒng)、分布式緩存、分布式數(shù)據(jù)庫、分布式計(jì)算等,一些名詞如Hadoop、zookeeper、MQ等都跟分布式有關(guān)。
從理念上講,分布式的實(shí)現(xiàn)有兩種形式:
水平擴(kuò)展:當(dāng)一臺(tái)機(jī)器扛不住流量時(shí),就通過添加機(jī)器的方式,將流量平分到所有服務(wù)器上,所有機(jī)器都可以提供相當(dāng)?shù)姆?wù);
垂直拆分:前端有多種查詢需求時(shí),一臺(tái)機(jī)器扛不住,可以將不同的需求分發(fā)到不同的機(jī)器上,比如A機(jī)器處理余票查詢的請(qǐng)求,B機(jī)器處理支付的請(qǐng)求。
02
什么是高并發(fā)?
相對(duì)于分布式來講,高并發(fā)在解決的問題上會(huì)集中一些,其反應(yīng)的是同時(shí)有多少量:比如在線直播服務(wù),同時(shí)有上萬人觀看。
高并發(fā)可以通過分布式技術(shù)去解決,將并發(fā)流量分到不同的物理服務(wù)器上。
但除此之外,還可以有很多其他優(yōu)化手段:比如使用緩存系統(tǒng),將所有的,靜態(tài)內(nèi)容放到CDN等;還可以使用多線程技術(shù)將一臺(tái)服務(wù)器的服務(wù)能力最大化。
03
什么是多線程?
多線程是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù),它更多的是解決CPU調(diào)度多個(gè)進(jìn)程的問題,從而讓這些進(jìn)程看上去是同時(shí)執(zhí)行(實(shí)際是交替運(yùn)行的)。
這幾個(gè)概念中,多線程解決的問題是最明確的,手段也是比較單一的,基本上遇到的最大問題就是線程安全。
在JAVA語言中,需要對(duì)JVM內(nèi)存模型、指令重排等深入了解,才能寫出一份高質(zhì)量的多線程代碼。
總結(jié)一下:
●分布式是從物理資源的角度去將不同的機(jī)器組成一個(gè)整體對(duì)外服務(wù),技術(shù)范圍非常廣且難度非常大,有了這個(gè)基礎(chǔ),高并發(fā)、高吞吐等系統(tǒng)很容易構(gòu)建;
● 高并發(fā)是從業(yè)務(wù)角度去描述系統(tǒng)的能力,實(shí)現(xiàn)高并發(fā)的手段可以采用分布式,也可以采用諸如緩存、CDN等,當(dāng)然也包括多線程;
● 多線程則聚焦于如何使用編程語言將CPU調(diào)度能力最大化。
分布式與高并發(fā)系統(tǒng),涉及到大量的概念和知識(shí)點(diǎn),如果沒有系統(tǒng)的學(xué)習(xí),很容易會(huì)雜糅概念而辨識(shí)不清,在面試與實(shí)際工作中都會(huì)遇到困難。這些知識(shí)點(diǎn),可以按照以下的思維導(dǎo)圖系統(tǒng)性的學(xué)習(xí)。
(掃描文末二維碼,領(lǐng)取高清完整版思維導(dǎo)圖)
當(dāng)然!僅僅有思維導(dǎo)圖還不夠,1024程序員來臨之際,網(wǎng)易云信攜手云課堂為程序員送福利!我們?yōu)榇蠹覝?zhǔn)備了免費(fèi)的Java源碼與實(shí)戰(zhàn)視頻直播課程,系統(tǒng)+實(shí)戰(zhàn),助力全面提升!
▼
No.1
《Java高級(jí)進(jìn)階系列直播》
【源碼+實(shí)戰(zhàn)+原理+技能】直播主題
10月14日 20:00
不學(xué)SpringBoot原理,終究是個(gè)CURDer!
10月15日 20:00
面對(duì)上億數(shù)據(jù)量,網(wǎng)易用啥技術(shù)?
10月16日 20:00
Spring注解從原理剖析到組件封裝
10月17日 20:00
數(shù)據(jù)大并發(fā)高!告訴你網(wǎng)易數(shù)據(jù)庫架構(gòu)怎么玩優(yōu)化
10月18日 20:00
互聯(lián)網(wǎng)面試必問—線程池原理與API精析
10月19日 20:00
玩轉(zhuǎn)redis高性能分布式鎖
10月20日 20:00
互聯(lián)網(wǎng)面試必問—NIO詳解
No.2
網(wǎng)易Java進(jìn)階資料包
掃描下方二維碼,免費(fèi)領(lǐng)取
上述高清思維導(dǎo)圖
以及配套的Java資料包與直播
加助教小姐姐免費(fèi)獲取
免費(fèi)直播,先到先得~
總結(jié)
以上是生活随笔為你收集整理的说实话,你的API接口在高并发面前不堪一击!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 活动 | 5G万物智联下互联网通信技术升
- 下一篇: 网易云信联合墨刀,邀你参加【产品设计狂欢