什么是高并發(fā)? 狹義來講就是你的網(wǎng)站/軟件同一時(shí)間能承受的用戶數(shù)量有多少 相關(guān)指標(biāo)有 并發(fā)數(shù):對(duì)網(wǎng)站/軟件同時(shí)發(fā)起的請(qǐng)求數(shù),一般也可代表實(shí)際的用戶 每秒響應(yīng)時(shí)間:常指一次請(qǐng)求到系統(tǒng)正確響的時(shí)間(以秒為單位) TPS(每秒事務(wù)數(shù)):每秒鐘可以處理的事務(wù)(請(qǐng)求響應(yīng)),大概的計(jì)算公式為:并發(fā)數(shù)/每秒響應(yīng)時(shí)間=TPS QPS(每秒查詢數(shù)):TPS事務(wù)有讀有寫,而QPS指的是讀取,一般情況QPS應(yīng)是高于TPS的 IP(獨(dú)立IP):一個(gè)IP可以發(fā)生多次UV和PV PV(訪問量):即Page View,頁(yè)面瀏覽或點(diǎn)周量,用戶每次新刷新即被計(jì)算一次 UV(獨(dú)立訪客):一般通過cookies記錄等判斷為一個(gè)獨(dú)立用戶,同一IP可能有多個(gè)UV(共享IP),發(fā)生多次PV 流量(網(wǎng)絡(luò)流量):請(qǐng)求所產(chǎn)生的網(wǎng)絡(luò)流量,因?yàn)槭芟抻趲捯彩遣l(fā)中的一個(gè)重要指 一般公司演化階段 1、優(yōu)化運(yùn)算代碼、SQL查詢、數(shù)據(jù)庫(kù)索引等 2、進(jìn)行應(yīng)用負(fù)載均衡、數(shù)據(jù)庫(kù)做主從/主主復(fù)制進(jìn)行讀寫分離、增加緩存(Redis\Mem) 3、對(duì)系統(tǒng)和數(shù)據(jù)進(jìn)行垂直拆分,按業(yè)務(wù)模塊拆分成不同的應(yīng)用及數(shù)據(jù)庫(kù)表 4、分布式服務(wù)化、異步消息機(jī)制、數(shù)據(jù)庫(kù)表水平拆分 優(yōu)化運(yùn)算代碼、SQL查詢、數(shù)據(jù)庫(kù)索引等 一般初創(chuàng)公司系統(tǒng)大多數(shù)都是單體單庫(kù)的系統(tǒng),按照成本優(yōu)先級(jí)第一要做的就是對(duì)系統(tǒng)進(jìn)行代碼級(jí)的優(yōu)化。比如應(yīng)用代碼邏輯梳理、合理使用多線程、SQL避免全表掃描、少使用LIKE、 根據(jù)業(yè)務(wù)創(chuàng)建索引等。 案例 單次LIKE大數(shù)據(jù)量統(tǒng)計(jì)查詢Sending data狀態(tài)過多導(dǎo)致數(shù)據(jù)庫(kù)連接被耗盡,系統(tǒng)停止響應(yīng)。通過在統(tǒng)計(jì)表建立觸發(fā)器更新單值表解決 負(fù)載均衡、讀寫分離、緩存 到了第二階段,單體應(yīng)用通過優(yōu)化與增加硬件配置已無法解決高并發(fā)的問題,這時(shí)可以考慮進(jìn)行以下架構(gòu)的演化,這種演化對(duì)系統(tǒng)基本沒有侵入性,成本低廉 負(fù)載均衡: 可以通過Nginx反向代理、F5等進(jìn)行應(yīng)用的多流量分發(fā),需要解決的問題就是會(huì)話問題,可采用Nginx的路由或是SESSION同步/獨(dú)立。 讀寫分離: 采用數(shù)據(jù)庫(kù)的主從復(fù)制機(jī)制,將寫入庫(kù)與讀取庫(kù)分離,可采用中間件進(jìn)行代理路由,基本可以不改代碼。 緩存: 可跟據(jù)業(yè)務(wù)規(guī)則將部分?jǐn)?shù)據(jù)進(jìn)行緩存 應(yīng)用、數(shù)據(jù)垂直拆分 第二階段支撐過一定量后,隨著并發(fā)量再次的提升,由于單庫(kù)表數(shù)據(jù)量變大以及訪問限制已經(jīng)不能滿足,這時(shí)可以考慮進(jìn)行數(shù)據(jù)庫(kù)表的按系統(tǒng)模塊垂直拆分。將內(nèi)聯(lián)的業(yè)務(wù)劃分為獨(dú)立的庫(kù)表,相應(yīng)的應(yīng)用也 應(yīng)隨之拆分(應(yīng)用這時(shí)加機(jī)器還能挺,不過做不到可審縮資源利用最大化)。同一應(yīng)用系統(tǒng)訪問同一庫(kù)表,應(yīng)用系統(tǒng)之間進(jìn)行少量通信。 分布式服務(wù)化、異步消息機(jī)制、數(shù)據(jù)庫(kù)表水平拆分 在經(jīng)歷過前三階段后,能走到第四階段說明平臺(tái)的發(fā)展非常好了,對(duì)系統(tǒng)的高并發(fā)又有了進(jìn)一步的要求,這也是成本最高最復(fù)雜的,系統(tǒng)架構(gòu)需要進(jìn)行很大的改造 分布式: 對(duì)系統(tǒng)應(yīng)用進(jìn)行服務(wù)化(如微服務(wù)),服務(wù)化的目的不只是為了高并發(fā),也從系統(tǒng)的可維護(hù)性(團(tuán)隊(duì)大了)、資源利用最大化(對(duì)服務(wù)進(jìn)行差異化支撐)方面考慮。 面臨的挑戰(zhàn)主要是分布式事務(wù)方面的控制,可采用二階段提交方式或是分布式事務(wù)容器實(shí)現(xiàn)分布式事務(wù)。 異步消息機(jī)制: 主要解決大并發(fā)寫入瓶頸,利用消息對(duì)列對(duì)寫入消息進(jìn)行排隊(duì),待數(shù)據(jù)庫(kù)進(jìn) 行處理。 數(shù)據(jù)庫(kù)表水平拆分:按一定規(guī)則將同一業(yè)務(wù)表的數(shù)據(jù)拆分到不同的庫(kù)/表中(如HASH),面臨的挑戰(zhàn)主要是跟業(yè)務(wù)關(guān)聯(lián)性強(qiáng)、跨表的數(shù)據(jù)合并等。解決方案就是寫 好代碼吧。。。 |
|