淺談互聯(lián)網(wǎng)架構(gòu)“高并發(fā)”

????一锅知、什么是高并發(fā)

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

????高并發(fā)相關(guān)常用的一些指標有響應(yīng)時間(Response Time)谨胞,吞吐量(Throughput)牢裳,每秒查詢率QPS(Query Per Second)蒲讯,并發(fā)用戶數(shù)等伶椿。

? ??響應(yīng)時間:系統(tǒng)對請求做出響應(yīng)的時間。例如系統(tǒng)處理一個HTTP請求需要200ms氓侧,這個200ms就是系統(tǒng)的響應(yīng)時間脊另。

? ??吞吐量:單位時間內(nèi)處理的請求數(shù)量。

? ??QPS:每秒響應(yīng)請求數(shù)约巷。在互聯(lián)網(wǎng)領(lǐng)域偎痛,這個指標和吞吐量區(qū)分的沒有這么明顯。

? ??并發(fā)用戶數(shù):同時承載正常使用系統(tǒng)功能的用戶數(shù)量独郎。例如一個即時通訊系統(tǒng)踩麦,同時在線量一定程度上代表了系統(tǒng)的并發(fā)用戶數(shù)。

? ??二氓癌、如何提升系統(tǒng)的并發(fā)能力

????互聯(lián)網(wǎng)分布式架構(gòu)設(shè)計谓谦,提高系統(tǒng)并發(fā)能力的方式贪婉、方法論上主要有兩種:垂直擴展(Scale Up)與水平擴展(Scale Out)。

? ??垂直擴展:提升單機處理能力腰池。垂直擴展的方式有以下兩種:

? ??(1)增強單機硬件性能,例如:增加CPU核數(shù)如32核拍皮,升級更好的網(wǎng)卡如萬兆,升級更好的硬盤如SSD,擴充硬盤容量如2T,擴充系統(tǒng)內(nèi)存如128G;

????(2)提升單機架構(gòu)性能,例如:使用Cache來減少IO次數(shù),使用異步來增加單服務(wù)吞吐量,使用無鎖數(shù)據(jù)結(jié)構(gòu)來減少響應(yīng)時間腥泥。

? ??在互聯(lián)網(wǎng)業(yè)務(wù)發(fā)展非常迅猛的早期夹厌,如果預(yù)算不是問題或南,強烈建議使用“增強單機硬件性能”的方式提升系統(tǒng)并發(fā)能力,因為這個階段虹茶,公司的戰(zhàn)略往往是發(fā)展業(yè)務(wù)搶時間感局,而“增強單機硬件性能”往往是最快的方法书聚。

????不管是提升單機硬件性能驯杜,還是提升單機架構(gòu)性能,都有一個致命的不足:單機性能總是有極限的。所以互聯(lián)網(wǎng)分布式架構(gòu)設(shè)計高并發(fā)終極解決方案還是水平擴展。

? ??水平擴展:只要增加服務(wù)器數(shù)量,就能線性擴充系統(tǒng)性能。水平擴展對系統(tǒng)架構(gòu)設(shè)計是有要求的檩电,如何在架構(gòu)各層進行可水平擴展的設(shè)計烹卒,以及互聯(lián)網(wǎng)公司架構(gòu)各層常見的水平擴展實踐炎码,是本文重點討論的內(nèi)容。

? ??三卓起、常見的互聯(lián)網(wǎng)分層架構(gòu)


典型互聯(lián)網(wǎng)分層架構(gòu)

? ??常見互聯(lián)網(wǎng)分布式架構(gòu)如上舱痘,分為:

(1)客戶端層:典型調(diào)用方是瀏覽器browser或者手機應(yīng)用APP

(2)反向代理層:系統(tǒng)入口芭逝,反向代理

(3)站點應(yīng)用層:實現(xiàn)核心應(yīng)用邏輯接剩,返回html或者json

(4)服務(wù)層:如果實現(xiàn)了服務(wù)化而克,就有這一層

(5)數(shù)據(jù)-緩存層:緩存加速訪問存儲

(6)數(shù)據(jù)-數(shù)據(jù)庫層:數(shù)據(jù)庫固化數(shù)據(jù)存儲

整個系統(tǒng)各層次的水平擴展代箭,又分別是如何實施的呢嗡综?

? ??四乙帮、分層水平擴展架構(gòu)實踐

? ?反向代理層的水平擴展:

? ? 反向代理層的水平擴展,是通過“DNS輪詢”實現(xiàn)的:dns-server對于一個域名配置了多個解析ip极景,每次DNS解析請求來訪問dns-server蚣旱,會輪詢返回這些ip碑幅。

????當(dāng)nginx成為瓶頸的時候,只要增加服務(wù)器數(shù)量塞绿,新增nginx服務(wù)的部署沟涨,增加一個外網(wǎng)ip,就能擴展反向代理層的性能异吻,做到理論上的無限高并發(fā)裹赴。


? ??站點層的水平擴展:

? ??站點層的水平擴展,是通過“nginx”實現(xiàn)的诀浪。通過修改nginx.conf棋返,可以設(shè)置多個web后端。

????當(dāng)web后端成為瓶頸的時候雷猪,只要增加服務(wù)器數(shù)量睛竣,新增web服務(wù)的部署,在nginx配置中配置上新的web后端求摇,就能擴展站點層的性能射沟,做到理論上的無限高并發(fā)。


? ??服務(wù)層的水平擴展:

? ??服務(wù)層的水平擴展与境,是通過“服務(wù)連接池”實現(xiàn)的验夯。

????站點層通過RPC-client調(diào)用下游的服務(wù)層RPC-server時,RPC-client中的連接池會建立與下游服務(wù)多個連接摔刁,當(dāng)服務(wù)成為瓶頸的時候挥转,只要增加服務(wù)器數(shù)量,新增服務(wù)部署共屈,在RPC-client處建立新的下游服務(wù)連接绑谣,就能擴展服務(wù)層性能,做到理論上的無限高并發(fā)拗引。如果需要優(yōu)雅的進行服務(wù)層自動擴容域仇,這里可能需要配置中心里服務(wù)自動發(fā)現(xiàn)功能的支持。


? ??數(shù)據(jù)層的水平擴展:

????在數(shù)據(jù)量很大的情況下寺擂,數(shù)據(jù)層(緩存暇务,數(shù)據(jù)庫)涉及數(shù)據(jù)的水平擴展,將原本存儲在一臺服務(wù)器上的數(shù)據(jù)(緩存怔软,數(shù)據(jù)庫)水平拆分到不同服務(wù)器上去垦细,以達到擴充系統(tǒng)性能的目的。

????互聯(lián)網(wǎng)數(shù)據(jù)層常見的水平拆分方式有這么幾種挡逼,以數(shù)據(jù)庫為例:

? ??按照范圍水平拆分

? ??

? ??每一個數(shù)據(jù)服務(wù)括改,存儲一定范圍的數(shù)據(jù),上圖為例:

user0庫家坎,存儲uid范圍1-1kw

user1庫嘱能,存儲uid范圍1kw-2kw

????這個方案的好處是:

(1)規(guī)則簡單吝梅,service只需判斷一下uid范圍就能路由到對應(yīng)的存儲服務(wù);

(2)數(shù)據(jù)均衡性較好惹骂;

(3)比較容易擴展苏携,可以隨時加一個uid[2kw,3kw]的數(shù)據(jù)服務(wù)。

????不足是:

(1)請求的負載不一定均衡对粪,一般來說右冻,新注冊的用戶會比老用戶更活躍,大range的服務(wù)請求壓力會更大著拭。

? ??按照哈希水平拆分

? ??

????每一個數(shù)據(jù)庫纱扭,存儲某個key值hash后的部分數(shù)據(jù),上圖為例:

user0庫儡遮,存儲偶數(shù)uid數(shù)據(jù)

user1庫乳蛾,存儲奇數(shù)uid數(shù)據(jù)

????這個方案的好處是:

(1)規(guī)則簡單,service只需對uid進行hash能路由到對應(yīng)的存儲服務(wù)鄙币;

(2)數(shù)據(jù)均衡性較好肃叶;

(3)請求均勻性較好;

????不足是:

(1)不容易擴展爱榔,擴展一個數(shù)據(jù)服務(wù)被环,hash方法改變時候糙及,可能需要進行數(shù)據(jù)遷移详幽。

????這里需要注意的是,通過水平拆分來擴充系統(tǒng)性能浸锨,與主從同步讀寫分離來擴充數(shù)據(jù)庫性能的方式有本質(zhì)的不同唇聘。主要表現(xiàn)在:

????通過水平拆分擴展數(shù)據(jù)庫性能:

(1)每個服務(wù)器上存儲的數(shù)據(jù)量是總量的1/n,所以單機的性能也會有提升柱搜;

(2)n個服務(wù)器上的數(shù)據(jù)沒有交集迟郎,那個服務(wù)器上數(shù)據(jù)的并集是數(shù)據(jù)的全集;

(3)數(shù)據(jù)水平拆分到了n個服務(wù)器上聪蘸,理論上讀性能擴充了n倍宪肖,寫性能也擴充了n倍(其實遠不止n倍,因為單機的數(shù)據(jù)量變?yōu)榱嗽瓉淼?/n)健爬。

????通過主從同步讀寫分離擴展數(shù)據(jù)庫性能:

(1)每個服務(wù)器上存儲的數(shù)據(jù)量是和總量相同控乾;

(2)n個服務(wù)器上的數(shù)據(jù)都一樣,都是全集娜遵;

(3)理論上讀性能擴充了n倍蜕衡,寫仍然是單點,寫性能不變设拟。

????緩存層的水平拆分和數(shù)據(jù)庫層的水平拆分類似慨仿,也是以范圍拆分和哈希拆分的方式居多久脯,就不再展開。

? ??五镰吆、總結(jié)

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

????提高系統(tǒng)并發(fā)能力的方式骡和,方法論上主要有兩種:垂直擴展(Scale Up)與水平擴展(Scale Out)。前者垂直擴展可以通過提升單機硬件性能相寇,或者提升單機架構(gòu)性能慰于,來提高并發(fā)性,但單機性能總是有極限的唤衫,互聯(lián)網(wǎng)分布式架構(gòu)設(shè)計高并發(fā)終極解決方案還是后者:水平擴展婆赠。

????互聯(lián)網(wǎng)分層架構(gòu)中,各層次水平擴展的實踐又有所不同:

(1)反向代理層可以通過“DNS輪詢”的方式來進行水平擴展佳励;

(2)站點層可以通過nginx來進行水平擴展休里;

(3)服務(wù)層可以通過服務(wù)連接池來進行水平擴展;

(4)數(shù)據(jù)庫可以按照數(shù)據(jù)范圍赃承,或者數(shù)據(jù)哈希的方式來進行水平擴展妙黍。

? ??各層實施水平擴展后,能夠通過增加服務(wù)器數(shù)量的方式來提升系統(tǒng)的性能瞧剖,做到理論上的性能無限拭嫁。


~(完)~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抓于,隨后出現(xiàn)的幾起案子做粤,更是在濱河造成了極大的恐慌,老刑警劉巖捉撮,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怕品,死亡現(xiàn)場離奇詭異,居然都是意外死亡巾遭,警方通過查閱死者的電腦和手機肉康,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灼舍,“玉大人吼和,你說我怎么就攤上這事∑拢” “怎么了纹安?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我厢岂,道長光督,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任塔粒,我火速辦了婚禮结借,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卒茬。我一直安慰自己船老,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布圃酵。 她就那樣靜靜地躺著柳畔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪郭赐。 梳的紋絲不亂的頭發(fā)上薪韩,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音捌锭,去河邊找鬼俘陷。 笑死,一個胖子當(dāng)著我的面吹牛观谦,可吹牛的內(nèi)容都是我干的拉盾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼豁状,長吁一口氣:“原來是場噩夢啊……” “哼捉偏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起替蔬,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤告私,失蹤者是張志新(化名)和其女友劉穎屎暇,沒想到半個月后承桥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡根悼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年凶异,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挤巡。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡剩彬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矿卑,到底是詐尸還是另有隱情喉恋,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站轻黑,受9級特大地震影響糊肤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜氓鄙,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一馆揉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抖拦,春花似錦升酣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至复颈,卻和暖如春巢墅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背券膀。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工君纫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芹彬。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓蓄髓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舒帮。 傳聞我的和親對象是個殘疾皇子会喝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容