樓主所理解的65535(端口數(shù)量)與連接數(shù)是一個(gè)東西,這個(gè)是錯(cuò)的。具體原因前面已經(jīng)有不少同行小伙伴描述的非常清楚了,我就不再闡述了。
下面闡述的觀點(diǎn)是:通過(guò)優(yōu)化系統(tǒng)架構(gòu)提升系統(tǒng)負(fù)載能力,即提高系統(tǒng)并發(fā)量。
一、什么是高并發(fā)
高并發(fā)是互聯(lián)網(wǎng)系統(tǒng)所面臨的普通問(wèn)題,也是系統(tǒng)架構(gòu)時(shí)考慮的重要因素之一。
【并發(fā)與負(fù)載】是相對(duì)的兩個(gè)詞。
想實(shí)現(xiàn)高并發(fā),就要提高系統(tǒng)負(fù)載能力。系統(tǒng)負(fù)載能力強(qiáng)了,自然可以處理高并發(fā)請(qǐng)求。
所以,實(shí)現(xiàn)高并發(fā),本質(zhì)就是提高系統(tǒng)的負(fù)載能力。
一般對(duì)于系統(tǒng)負(fù)載能力的評(píng)估參數(shù)有:響應(yīng)時(shí)間 、吞吐量、每秒請(qǐng)求數(shù)QPS、并發(fā)用戶數(shù)。
- 響應(yīng)時(shí)間:系統(tǒng)對(duì)請(qǐng)求做出響應(yīng)的時(shí)間。例如系統(tǒng)處理一個(gè)HTTP請(qǐng)求需要200ms,這個(gè)200ms就是系統(tǒng)的響應(yīng)時(shí)間。
- 吞吐量:?jiǎn)挝粫r(shí)間內(nèi)處理的請(qǐng)求數(shù)量。
- QPS:每秒響應(yīng)請(qǐng)求數(shù),與吞吐量概念類似。
- 并發(fā)用戶數(shù):同時(shí)使用系統(tǒng)功能的用戶數(shù)量。
二、如何提高并發(fā)處理能力(并發(fā)數(shù))
需要說(shuō)明的是:以下內(nèi)容不考慮【帶寬】和【硬件配置】這兩個(gè)因素。
很顯然,帶寬高、硬件配置高,系統(tǒng)負(fù)載能力就強(qiáng),能處理的并發(fā)用戶數(shù)就多。
那么如何提高并發(fā)處理能力呢?
答案就是:通過(guò)優(yōu)化系統(tǒng)架構(gòu)來(lái)提高并發(fā)處理能力。
并且系統(tǒng)架構(gòu)設(shè)計(jì)是一個(gè)復(fù)雜的過(guò)程,不僅涉及到技術(shù)層面,還包括業(yè)務(wù)層面。
三、通過(guò)業(yè)務(wù)拆分提高并發(fā)處理能力(微服務(wù)架構(gòu))
將一個(gè)系統(tǒng)拆分為多個(gè)子系統(tǒng),每個(gè)子系統(tǒng)負(fù)責(zé)一個(gè)單獨(dú)的服務(wù),這就是常說(shuō)的【服務(wù)治理】
拆分為多個(gè)子系統(tǒng)后,每個(gè)子系統(tǒng)(服務(wù))獨(dú)立運(yùn)行,每個(gè)服務(wù)之間通過(guò)REST/RPC方式調(diào)用,用戶也可以直接調(diào)用這些服務(wù)接口。
這種設(shè)計(jì)將大化小,這種架構(gòu)也稱為【微服務(wù)架構(gòu)】。
舉例:商城系統(tǒng)中,可拆分為【訂單服務(wù)】【用戶服務(wù)】【產(chǎn)品服務(wù)】等多個(gè)服務(wù)接口。
四、通過(guò)水平擴(kuò)展提高并發(fā)處理能力
這一塊要分開(kāi)來(lái)講。
1. 前端部分
使用nginx反向代理軟件提高并發(fā)處理量
nginx進(jìn)行水平擴(kuò)展:DNS輪詢等
2. 應(yīng)用服務(wù)器部分
java中常見(jiàn)的應(yīng)用服務(wù)器tomcat為例,它可以實(shí)現(xiàn)集群和負(fù)載均衡。集群配置成功后,相當(dāng)于提供了一個(gè)“服務(wù)器池”,如果想要再提高處理能力,只需要向“池”中繼續(xù)添加應(yīng)用服務(wù)器即可。另外,集群也實(shí)現(xiàn)了系統(tǒng)高可用。
3. 數(shù)據(jù)庫(kù)層面
常見(jiàn)的分庫(kù)分表,讀寫(xiě)分離都是解決數(shù)據(jù)庫(kù)壓力大的方法之一。
數(shù)據(jù)庫(kù)瓶頸是系統(tǒng)在運(yùn)行中最先碰到、最常碰到的問(wèn)題之一。
經(jīng)常見(jiàn)到的問(wèn)題就是磁盤IO高,導(dǎo)致處理緩慢。
剛才所說(shuō)方法都可以解決這一問(wèn)題。
常見(jiàn)的分表原則有:按范圍分,按哈希值分。
4. 緩存層面
在系統(tǒng)中添加緩存是當(dāng)前必選的方案。
添加緩存的主要目標(biāo)是減少磁盤IO。
可以緩存的內(nèi)容很多,例如緩存頁(yè)面內(nèi)容(HTML,CSS,圖片),緩存應(yīng)用服務(wù)器中數(shù)據(jù)對(duì)象等。
通過(guò)設(shè)計(jì)多級(jí)緩存,實(shí)現(xiàn)數(shù)據(jù)的快速獲取、請(qǐng)求的快速響應(yīng)。
在分布式架構(gòu)中,還要注意分布式緩存的更新一致性問(wèn)題。(不再詳述)
五、最后
其實(shí)很多系統(tǒng)的并發(fā)數(shù)都不到百萬(wàn)級(jí),只有少量頭部網(wǎng)站才會(huì)有,例如淘寶。
但我們之所以研究如何解決百萬(wàn)級(jí)并發(fā)架構(gòu),是從中學(xué)會(huì)和掌握【系統(tǒng)架構(gòu)演變過(guò)程】。
系統(tǒng)架構(gòu)設(shè)計(jì)的原則是:適合的就是最好的。不能剛開(kāi)始架構(gòu)就要滿足百萬(wàn)級(jí),因?yàn)檫@樣設(shè)計(jì)會(huì)提高成本,造成資源浪費(fèi)。
所以,我們要明白:系統(tǒng)架構(gòu)是演進(jìn)的。
只有當(dāng)我們經(jīng)歷了從【單一架構(gòu)】至【分布式架構(gòu)】這一過(guò)程,才能真正理解架構(gòu)的能力。在這過(guò)程中,你的架構(gòu)能力也會(huì)飛快增長(zhǎng)。
我是一名Java全棧開(kāi)發(fā)工程師、系統(tǒng)架構(gòu)師,從業(yè)15年。曾帶領(lǐng)小團(tuán)隊(duì)完成多個(gè)數(shù)百萬(wàn)級(jí)項(xiàng)目。我正在寫(xiě)一些關(guān)于互聯(lián)網(wǎng)行業(yè)及開(kāi)發(fā)技術(shù)方面的文章。關(guān)注我,你一定會(huì)有所收獲。
如果有項(xiàng)目開(kāi)發(fā)、行業(yè)及求職方面的問(wèn)題,都可以在評(píng)論區(qū)留言或私信我。(關(guān)注后私信我,向你免費(fèi)分享行業(yè)級(jí)學(xué)習(xí)資料)