2.并發(fā)數(shù)
指系統(tǒng)能夠同時(shí)處理請(qǐng)求的數(shù)目,這個(gè)數(shù)字也反映了系統(tǒng)的負(fù)載特性。對(duì)于網(wǎng)站而言,并發(fā)數(shù)即網(wǎng)站并發(fā)用戶數(shù),指同時(shí)提交請(qǐng)求的用戶數(shù)目。
與網(wǎng)站并發(fā)用戶數(shù)相對(duì)應(yīng)的還有網(wǎng)站在線用戶數(shù)(當(dāng)前登錄網(wǎng)站的用戶總數(shù))和網(wǎng)站系統(tǒng)用戶數(shù)(可能訪問系統(tǒng)的總用戶數(shù),對(duì)多數(shù)網(wǎng)站而言就是注冊(cè)用戶數(shù))。其數(shù)量比較關(guān)系為:
網(wǎng)站系統(tǒng)用戶數(shù)>>網(wǎng)站在線用戶數(shù)>>網(wǎng)站并發(fā)用戶數(shù)
在網(wǎng)站產(chǎn)品設(shè)計(jì)初期,產(chǎn)品經(jīng)理和運(yùn)營(yíng)人員就需要規(guī)劃不同發(fā)展階段的網(wǎng)站系統(tǒng)用戶數(shù),并以此為基礎(chǔ),根據(jù)產(chǎn)品特性和運(yùn)營(yíng)手段,推算在線用戶數(shù)和并發(fā)用戶數(shù)。這些指標(biāo)將成為系統(tǒng)非功能設(shè)計(jì)的重要依據(jù)。
現(xiàn)實(shí)中,經(jīng)??吹侥承┚W(wǎng)站,特別是電商類網(wǎng)站,市場(chǎng)推廣人員興致勃勃地打廣告打折促銷,用戶興致勃勃地去搶購(gòu),結(jié)果活動(dòng)剛一開始,就因?yàn)椴l(fā)用戶數(shù)超過網(wǎng)站最大負(fù)載而響應(yīng)緩慢,急性子的用戶不停刷新瀏覽器,導(dǎo)致系統(tǒng)并發(fā)數(shù)更高,最后以服務(wù)器系統(tǒng)崩潰,用戶瀏覽器顯示“Service is too busy”而告終。出現(xiàn)這種情況,有可能是網(wǎng)站技術(shù)準(zhǔn)備不充分導(dǎo)致,也有可能是運(yùn)營(yíng)人員錯(cuò)誤地評(píng)估并發(fā)用戶數(shù)導(dǎo)致。
測(cè)試程序通過多線程模擬并發(fā)用戶的辦法來(lái)測(cè)試系統(tǒng)的并發(fā)處理能力,為了真實(shí)模擬用戶行為,測(cè)試程序并不是啟動(dòng)多線程然后不停地發(fā)送請(qǐng)求,而是在兩次請(qǐng)求之間加入一個(gè)隨機(jī)等待時(shí)間,這個(gè)時(shí)間被稱作思考時(shí)間。
3.吞吐量
指單位時(shí)間內(nèi)系統(tǒng)處理的請(qǐng)求數(shù)量,體現(xiàn)系統(tǒng)的整體處理能力。對(duì)于網(wǎng)站,可以用“請(qǐng)求數(shù)/秒”或是“頁(yè)面數(shù)/秒”來(lái)衡量,也可以用“訪問人數(shù)/天”或是“處理的業(yè)務(wù)數(shù)/小時(shí)”等來(lái)衡量。TPS(每秒事務(wù)數(shù))是吞吐量的一個(gè)常用量化指標(biāo),此外還有HPS(每秒HTTP請(qǐng)求數(shù))、QPS(每秒查詢數(shù))等。
在系統(tǒng)并發(fā)數(shù)由小逐漸增大的過程中(這個(gè)過程也伴隨著服務(wù)器系統(tǒng)資源消耗逐漸增大),系統(tǒng)吞吐量先是逐漸增加,達(dá)到一個(gè)極限后,隨著并發(fā)數(shù)的增加反而下降,達(dá)到系統(tǒng)崩潰點(diǎn)后,系統(tǒng)資源耗盡,吞吐量為零。
而這個(gè)過程中,響應(yīng)時(shí)間則是先保持小幅上升,到達(dá)吞吐量極限后,快速上升,到達(dá)系統(tǒng)崩潰點(diǎn)后,系統(tǒng)失去響應(yīng)。系統(tǒng)吞吐量、系統(tǒng)并發(fā)數(shù)及響應(yīng)時(shí)間之間的關(guān)系將在本章后面內(nèi)容中介紹。
系統(tǒng)吞吐量和系統(tǒng)并發(fā)數(shù),以及響應(yīng)時(shí)間的關(guān)系可以形象地理解為高速公路的通行狀況:吞吐量是每天通過收費(fèi)站的車輛數(shù)目(可以換算成收費(fèi)站收取的高速費(fèi)),并發(fā)數(shù)是高速公路上的正在行駛的車輛數(shù)目,響應(yīng)時(shí)間是車速。車輛很少時(shí),車速很快,但是收到的高速費(fèi)也相應(yīng)較少;隨著高速公路上車輛數(shù)目的增多,車速略受影響,但是收到的高速費(fèi)增加很快;隨著車輛的繼續(xù)增加,車速變得越來(lái)越慢,高速公路越來(lái)越堵,收費(fèi)不增反降;如果車流量繼續(xù)增加,超過某個(gè)極限后,任何偶然因素都會(huì)導(dǎo)致高速全部癱瘓,車走不動(dòng),費(fèi)當(dāng)然也收不著,而高速公路成了停車場(chǎng)(資源耗盡)。
網(wǎng)站性能優(yōu)化的目的,除了改善用戶體驗(yàn)的響應(yīng)時(shí)間,還要盡量提高系統(tǒng)吞吐量,最大限度利用服務(wù)器資源。
4.性能計(jì)數(shù)器
它是描述服務(wù)器或操作系統(tǒng)性能的一些數(shù)據(jù)指標(biāo)。包括System Load、對(duì)象與線程數(shù)、內(nèi)存使用、CPU使用、磁盤與網(wǎng)絡(luò)I/O等指標(biāo)。這些指標(biāo)也是系統(tǒng)監(jiān)控的重要參數(shù),對(duì)這些指標(biāo)設(shè)置報(bào)警閾值,當(dāng)監(jiān)控系統(tǒng)發(fā)現(xiàn)性能計(jì)數(shù)器超過閾值時(shí),就向運(yùn)維和開發(fā)人員報(bào)警,及時(shí)發(fā)現(xiàn)處理系統(tǒng)異常。
System Load即系統(tǒng)負(fù)載,指當(dāng)前正在被CPU執(zhí)行和等待被CPU執(zhí)行的進(jìn)程數(shù)目總和,是反映系統(tǒng)忙閑程度的重要指標(biāo)。多核CPU的情況下,完美情況是所有CPU都在使用,沒有進(jìn)程在等待處理,所以Load的理想值是CPU的數(shù)目。當(dāng)Load值低于CPU數(shù)目的時(shí)候,表示CPU有空閑,資源存在浪費(fèi);當(dāng)Load值高于CPU數(shù)目的時(shí)候,表示進(jìn)程在排隊(duì)等待CPU調(diào)度,表示系統(tǒng)資源不足,影響應(yīng)用程序的執(zhí)行性能。在Linux系統(tǒng)中使用top命令查看,該值是三個(gè)浮點(diǎn)數(shù),表示最近1分鐘,10分鐘,15分鐘的運(yùn)行隊(duì)列平均進(jìn)程數(shù)。如圖4.2所示。

圖2 在Linux命令行查看系統(tǒng)負(fù)載
性能測(cè)試方法
性能測(cè)試是一個(gè)總稱,具體可細(xì)分為性能測(cè)試、負(fù)載測(cè)試、壓力測(cè)試、穩(wěn)定性測(cè)試。
性能測(cè)試
以系統(tǒng)設(shè)計(jì)初期規(guī)劃的性能指標(biāo)為預(yù)期目標(biāo),對(duì)系統(tǒng)不斷施加壓力,驗(yàn)證系統(tǒng)在資源可接受范圍內(nèi),是否能達(dá)到性能預(yù)期。
負(fù)載測(cè)試
對(duì)系統(tǒng)不斷地增加并發(fā)請(qǐng)求以增加系統(tǒng)壓力,直到系統(tǒng)的某項(xiàng)或多項(xiàng)性能指標(biāo)達(dá)到安全臨界值,如某種資源已經(jīng)呈飽和狀態(tài),這時(shí)繼續(xù)對(duì)系統(tǒng)施加壓力,系統(tǒng)的處理能力不但不能提高,反而會(huì)下降。
壓力測(cè)試
超過安全負(fù)載的情況下,對(duì)系統(tǒng)繼續(xù)施加壓力,直到系統(tǒng)崩潰或不能再處理任何請(qǐng)求,以此獲得系統(tǒng)最大壓力承受能力。
穩(wěn)定性測(cè)試
被測(cè)試系統(tǒng)在特定硬件、軟件、網(wǎng)絡(luò)環(huán)境條件下,給系統(tǒng)加載一定業(yè)務(wù)壓力,使系統(tǒng)運(yùn)行一段較長(zhǎng)時(shí)間,以此檢測(cè)系統(tǒng)是否穩(wěn)定。在不同生產(chǎn)環(huán)境、不同時(shí)間點(diǎn)的請(qǐng)求壓力是不均勻的,呈波浪特性,因此為了更好地模擬生產(chǎn)環(huán)境,穩(wěn)定性測(cè)試也應(yīng)不均勻地對(duì)系統(tǒng)施加壓力。
性能測(cè)試是一個(gè)不斷對(duì)系統(tǒng)增加訪問壓力,以獲得系統(tǒng)性能指標(biāo)、最大負(fù)載能力、最大壓力承受能力的過程。所謂的增加訪問壓力,在系統(tǒng)測(cè)試環(huán)境中,就是不斷增加測(cè)試程序的并發(fā)請(qǐng)求數(shù),一般說來(lái),性能測(cè)試遵循如圖4.3所示的拋物線規(guī)律。
圖4.3中的橫坐標(biāo)表示消耗的系統(tǒng)資源,縱坐標(biāo)表示系統(tǒng)處理能力(吞吐量)。在開始階段,隨著并發(fā)請(qǐng)求數(shù)目的增加,系統(tǒng)使用較少的資源就達(dá)到較好的處理能力(a~b段),這一段是網(wǎng)站的日常運(yùn)行區(qū)間,網(wǎng)站的絕大部分訪問負(fù)載壓力都集中在這一段區(qū)間,被稱作性能測(cè)試,測(cè)試目標(biāo)是評(píng)估系統(tǒng)性能是否符合需求及設(shè)計(jì)目標(biāo);隨著壓力的持續(xù)增加,系統(tǒng)處理能力增加變緩,直到達(dá)到一個(gè)最大值(c點(diǎn)),這是系統(tǒng)的最大負(fù)載點(diǎn),這一段被稱作負(fù)載測(cè)試。測(cè)試目標(biāo)是評(píng)估當(dāng)系統(tǒng)因?yàn)橥话l(fā)事件超出日常訪問壓力的情況下,保證系統(tǒng)正常運(yùn)行情況下能夠承受的最大訪問負(fù)載壓力;超過這個(gè)點(diǎn)后,再增加壓力,系統(tǒng)的處理能力反而下降,而資源消耗卻更多,直到資源消耗達(dá)到極限(d點(diǎn)),這個(gè)點(diǎn)可以看作是系統(tǒng)的崩潰點(diǎn),超過這個(gè)點(diǎn)繼續(xù)加大并發(fā)請(qǐng)求數(shù)目,系統(tǒng)不能再處理任何請(qǐng)求,這一段被稱作壓力測(cè)試,測(cè)試目標(biāo)是評(píng)估可能導(dǎo)致系統(tǒng)崩潰的最大訪問負(fù)載壓力。

圖3 性能測(cè)試曲線
性能測(cè)試反應(yīng)的是系統(tǒng)在實(shí)際生產(chǎn)環(huán)境中使用時(shí),隨著用戶并發(fā)訪問數(shù)量的增加,系統(tǒng)的處理能力。與性能曲線相對(duì)應(yīng)的是用戶訪問的等待時(shí)間(系統(tǒng)響應(yīng)時(shí)間),如圖4.4所示。

圖4 并發(fā)用戶訪問響應(yīng)時(shí)間曲線
在日常運(yùn)行區(qū)間,可以獲得最好的用戶響應(yīng)時(shí)間,隨著并發(fā)用戶數(shù)的增加,響應(yīng)延遲越來(lái)越大,直到系統(tǒng)崩潰,用戶失去響應(yīng)。
性能測(cè)試報(bào)告
測(cè)試結(jié)果報(bào)告應(yīng)能夠反映上述性能測(cè)試曲線的規(guī)律,閱讀者可以得到系統(tǒng)性能是否滿足設(shè)計(jì)目標(biāo)和業(yè)務(wù)要求、系統(tǒng)最大負(fù)載能力、系統(tǒng)最大壓力承受能力等重要信息,表4.2是一個(gè)簡(jiǎn)單示例。

表2 性能測(cè)試結(jié)果報(bào)告
性能優(yōu)化策略
如果性能測(cè)試結(jié)果不能滿足設(shè)計(jì)或業(yè)務(wù)需求,那么就需要尋找系統(tǒng)瓶頸,分而治之,逐步優(yōu)化。
1.性能分析
大型網(wǎng)站結(jié)構(gòu)復(fù)雜,用戶從瀏覽器發(fā)出請(qǐng)求直到數(shù)據(jù)庫(kù)完成操作事務(wù),中間需要經(jīng)過很多環(huán)節(jié),如果測(cè)試或者用戶報(bào)告網(wǎng)站響應(yīng)緩慢,存在性能問題,必須對(duì)請(qǐng)求經(jīng)歷的各個(gè)環(huán)節(jié)進(jìn)行分析,排查可能出現(xiàn)性能瓶頸的地方,定位問題。
排查一個(gè)網(wǎng)站的性能瓶頸和排查一個(gè)程序的性能瓶頸的手法基本相同:檢查請(qǐng)求處理的各個(gè)環(huán)節(jié)的日志,分析哪個(gè)環(huán)節(jié)響應(yīng)時(shí)間不合理、超過預(yù)期;然后檢查監(jiān)控?cái)?shù)據(jù),分析影響性能的主要因素是內(nèi)存、磁盤、網(wǎng)絡(luò)、還是CPU,是代碼問題還是架構(gòu)設(shè)計(jì)不合理,或者系統(tǒng)資源確實(shí)不足。
2.性能優(yōu)化
定位產(chǎn)生性能問題的具體原因后,就需要進(jìn)行性能優(yōu)化,根據(jù)網(wǎng)站分層架構(gòu),可分為Web前端性能優(yōu)化、應(yīng)用服務(wù)器性能優(yōu)化、存儲(chǔ)服務(wù)器性能優(yōu)化3大類。
關(guān)于作者:
李智慧,曾在阿里巴巴擔(dān)任技術(shù)專家,參與阿里巴巴基礎(chǔ)技術(shù)平臺(tái)開發(fā)和www.alibaba.com架構(gòu)設(shè)計(jì)。目前就職英特爾亞太研發(fā)中心從事云計(jì)算與大數(shù)據(jù)方面的研發(fā)工作。本文節(jié)選自《大型網(wǎng)站技術(shù)架構(gòu):核心原理與案例分析》一書,李智慧著,由電子工業(yè)出版社出版。