高并發(fā)系列文章第一篇:高并發(fā)和大流量解決方案

本文將從宏觀的角度上全方位剖析高并發(fā)和大流量解決方案

? ?從一個(gè)面試題開(kāi)始講解:PHP如何解決網(wǎng)站大流量與高并發(fā)的問(wèn)題?

? ?其實(shí)這個(gè)問(wèn)題不光考察php的方向,更多的是考察你對(duì)高并發(fā)架構(gòu)優(yōu)化的方式和能力。

? ?主要考察點(diǎn)如下:

? ? ? ? ?一、高并發(fā)架構(gòu)相關(guān)概念

互聯(lián)網(wǎng)中的高并發(fā)通常指的是并發(fā)訪問(wèn),也就是在某個(gè)時(shí)間點(diǎn),有多少個(gè)請(qǐng)求來(lái)同時(shí)訪問(wèn);

通常如果一個(gè)系統(tǒng)的日PV在千萬(wàn)以上,就有可能是一個(gè)高并發(fā)的系統(tǒng),但是如果有些公司完全不走技術(shù)路線,全靠機(jī)器堆,那么這個(gè)不在我們所說(shuō)的高并發(fā)的討論范圍、純屬人傻錢(qián)多的?

1、對(duì)于高并發(fā)的問(wèn)題,我們具體應(yīng)該關(guān)心什么?

? ? ?QPS:每秒鐘請(qǐng)求或者查詢的數(shù)量,在互聯(lián)網(wǎng)領(lǐng)域,指的是每秒響應(yīng)的請(qǐng)求數(shù)(通常指的是HTTP請(qǐng)求);?這是一個(gè)非常重要的指標(biāo),通常在進(jìn)行理解并發(fā)數(shù)在哪個(gè)點(diǎn)該做什么的優(yōu)化可以根據(jù)QPS的量進(jìn)行操作;

? ? ?吞吐量:單位時(shí)間內(nèi)處理的請(qǐng)求數(shù)量(通常由QPS和并發(fā)數(shù)來(lái)決定的)

? ? ?響應(yīng)時(shí)間:從請(qǐng)求發(fā)出到收到響應(yīng)花費(fèi)的時(shí)間。例如系統(tǒng)處理一個(gè)HTTP請(qǐng)求需要100ms,那么這100ms就是系統(tǒng)的響應(yīng)時(shí)間;

? ? ?每個(gè)資源的響應(yīng)時(shí)間如下圖所示,


?PV:綜合瀏覽量(Page?View),即頁(yè)面瀏覽量或者點(diǎn)擊量,一個(gè)訪客在多長(zhǎng)時(shí)間內(nèi)訪問(wèn)的的頁(yè)面數(shù)量;用戶每1次對(duì)網(wǎng)站中的每個(gè)網(wǎng)頁(yè)訪問(wèn)均被記錄1次。用戶對(duì)同一頁(yè)面的多次訪問(wèn),訪問(wèn)量累計(jì)。

UV:獨(dú)立訪客(?UniQue?Visitor),即一定時(shí)間范圍內(nèi)相同訪客多次訪問(wèn)網(wǎng)站,只能算為1個(gè)獨(dú)立訪客;其實(shí)跟IP類似;

帶寬:計(jì)算帶寬大小需要關(guān)注兩個(gè)指標(biāo) ,峰值流量和頁(yè)面的平均大小;

日網(wǎng)站帶寬 = PV / 統(tǒng)計(jì)時(shí)間(換算成秒)*?平均頁(yè)面大?。▎挝籏B)* 8


此處澄清一個(gè)概念QPS并不等于并發(fā)鏈接數(shù)


QPS是每秒HTTP請(qǐng)求數(shù)量,并發(fā)鏈接數(shù)是系統(tǒng)同時(shí)能夠處理的請(qǐng)求數(shù)量


峰值(每秒請(qǐng)求數(shù))QPS? = (總PV數(shù) * 80%)/ (8小時(shí)秒數(shù)? * 20% )

? ?解釋:通常80%的訪問(wèn)量都集中在20%的時(shí)間內(nèi);俗稱二八定律 8小時(shí)是做了簡(jiǎn)單的估計(jì)

? 2、 那么對(duì)于QPS來(lái)說(shuō)?我們要做一個(gè)壓力測(cè)試??

? ? ?為什么要做壓力測(cè)試:


? (1)測(cè)試能承受的最大并發(fā)數(shù)


? (2)測(cè)試最大承受的QPS的值


? ? ? ? ? ? ?比如說(shuō)我們?nèi)誕PS為20000 單機(jī)峰值QPS能承受500 那么最少得40臺(tái)才能撐住


? ? 常用的性能測(cè)試工具如下:ab、wrk、http_load、Web?Bench、Apache?JMeter?

? ? ?性能測(cè)試工具非常多?我們通過(guò)ab來(lái)講解:

? ? ab?全稱(apache?benchmark):是apache官方推出的工具,可以創(chuàng)建多個(gè)并發(fā)訪問(wèn)線程,摸你多個(gè)訪問(wèn)者同時(shí)對(duì)某一URL地址進(jìn)行訪問(wèn)。它的測(cè)試目標(biāo)是基于URL的,因此,它既可以用來(lái)測(cè)試apache的訪問(wèn)壓力,也可以來(lái)測(cè)試?nginx、lighthttp、tomcat、IIS等其他的web服務(wù)器的壓力。

? ? ab的使用:模擬并發(fā)請(qǐng)求100次,總共請(qǐng)求5000次


? ? 注意事項(xiàng):


? ? ?1)測(cè)試機(jī)器與被測(cè)試機(jī)器要分開(kāi)?


? ? ?2)切記不要對(duì)線上服務(wù)做壓力測(cè)試


? ? 3)觀察測(cè)試工具ab所在的機(jī)器,以及被測(cè)試的前端機(jī)的 CPU、內(nèi)存、網(wǎng)絡(luò)等都不能超過(guò)最高限度的75%? 可以通過(guò)top、htop、glances命令來(lái)觀察



測(cè)試:ab -c 50? -n 1000? http://192.168.56.10:82/index.html

QPS達(dá)到極限我們?cè)撛趺醋觯?/b>

? 隨著QPS的增長(zhǎng),每個(gè)階段需要根據(jù)實(shí)際情況來(lái)進(jìn)行優(yōu)化,優(yōu)化的方案也與硬件條件,網(wǎng)絡(luò)帶寬息息相關(guān)。通常在對(duì)QPS進(jìn)行優(yōu)化的時(shí)候階段也是不一樣的

1、QPS達(dá)到50?

? ? ?可以稱為小型網(wǎng)站、一般的服務(wù)器都可以輕松應(yīng)付

2、QPS達(dá)到100

? ? ? 假設(shè)關(guān)系型數(shù)據(jù)庫(kù)的每次請(qǐng)求需要在0.01秒完成,如果單個(gè)頁(yè)面只有一個(gè)SQL查詢,那么100QPS意味著1秒要完成100次請(qǐng)求,但是此時(shí)我們并不能保證數(shù)據(jù)庫(kù)查詢能完成100次

? ? ? 優(yōu)化方案:數(shù)據(jù)庫(kù)緩存層(redis、memcache)、數(shù)據(jù)庫(kù)的負(fù)載均衡流量進(jìn)行分散

3、QPS達(dá)到800

? ? ? 假設(shè)我們使用的是百兆帶寬、意味著網(wǎng)站出口的實(shí)際帶寬是8M左右,假設(shè)每個(gè)頁(yè)面只有大小10KB,在這個(gè)條件下,百兆帶寬已經(jīng)被吃完、對(duì)于帶寬來(lái)說(shuō)已經(jīng)是極限

? ? ? 優(yōu)化方案:CDN加速訪問(wèn)、負(fù)載均衡

4、QPS達(dá)到1000

? ? ? 假設(shè)使用Redis緩存數(shù)據(jù)庫(kù)查詢,每個(gè)頁(yè)面對(duì)Redis的請(qǐng)求遠(yuǎn)大于直接對(duì)DB?的請(qǐng)求 ,那么Redis的悲觀并發(fā)數(shù)大于在4w左右,但有可能在之前內(nèi)網(wǎng)帶寬已經(jīng)唄吃光,表現(xiàn)出不穩(wěn)定

? ? ?優(yōu)化方案:靜態(tài)HTML緩存

5、QPS達(dá)到2000

? ? ?在這個(gè)級(jí)別下、文件系統(tǒng)訪問(wèn)鎖都成了災(zāi)難

? ? ?優(yōu)化方案:做業(yè)務(wù)分離、分布式存儲(chǔ)

? ? ? ? ?二、高并發(fā)架構(gòu)解決方案案例

? ? 1、流量?jī)?yōu)化:防盜鏈處理?

? ? 2、前端優(yōu)化:減少http請(qǐng)求、添加異步請(qǐng)求 、啟用瀏覽器緩存(添加緩存過(guò)期時(shí)間)和文件壓縮(圖片壓縮、文件壓縮、nginx gzip)、CDN加速、建立獨(dú)立的圖片服務(wù)器(減少IO消耗、集群處理優(yōu)化cpu、IO方面)

? ? 3、服務(wù)端優(yōu)化:頁(yè)面靜態(tài)化、并發(fā)處理、隊(duì)列處理

? ? 4、數(shù)據(jù)庫(kù)優(yōu)化:數(shù)據(jù)庫(kù)緩存(Redis、MongoDB)、分庫(kù)分表(水平、垂直拆分)、分區(qū)操作、讀寫(xiě)分離、負(fù)載均衡

? ? 5、web服務(wù)器優(yōu)化: 負(fù)載均衡(7層Nginx Proxy、 4層LVS)

本文就到此結(jié)束、下篇開(kāi)始會(huì)對(duì)上述方案逐一來(lái)詳細(xì)的進(jìn)行解答、請(qǐng)耐心等待。。。




? ? ? ? ? ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容