瞬時(shí)響應(yīng):網(wǎng)站的高性能架構(gòu)
什么叫高性能的網(wǎng)站?
深圳網(wǎng)站建設(shè)兩個(gè)網(wǎng)站性能架構(gòu)設(shè)計(jì)方案:A方案和B方案,A方案在小于100個(gè)并發(fā)用戶訪問(wèn)時(shí),每個(gè)請(qǐng)求的響應(yīng)時(shí)間是1秒,當(dāng)并發(fā)請(qǐng)求達(dá)到200的時(shí)候,請(qǐng)求的響應(yīng)時(shí)間將驟增到10秒。B方案不管是100個(gè)并發(fā)用戶訪問(wèn)還是200個(gè)并發(fā)用戶訪問(wèn),每個(gè)請(qǐng)求的響應(yīng)時(shí)間都差不多是1.5秒。哪個(gè)方案的性能好?如果老板說(shuō)“我們要改善網(wǎng)站的性能”,他指的是什么?
同類(lèi)型的兩個(gè)網(wǎng)站,X網(wǎng)站服務(wù)器平均每個(gè)請(qǐng)求的處理時(shí)間是500毫秒,Y網(wǎng)站服務(wù)器平均每個(gè)請(qǐng)求的處理時(shí)間是1000毫秒,為什么用戶卻反映Y網(wǎng)站的速度快呢?
網(wǎng)站性能是客觀的指標(biāo),可以具體體現(xiàn)到響應(yīng)時(shí)間、吞吐量等技術(shù)指標(biāo),同時(shí)也是主觀的感受,而感受則是一種與具體參與者相關(guān)的微妙的東西,用戶的感受和工程師的感受不同,不同的用戶感受也不同。
4.1網(wǎng)站性能測(cè)試
性能測(cè)試是性能優(yōu)化的前提和基礎(chǔ),也是性能優(yōu)化結(jié)果的檢查和度量標(biāo)準(zhǔn)。不同視
角下的網(wǎng)站性能有不同的標(biāo)準(zhǔn),也有不同的優(yōu)化手段。
4.1.1不同視角下的網(wǎng)站性能
軟件工程師說(shuō)到網(wǎng)站性能的時(shí)候,通常和用戶說(shuō)的不一樣。
1.用戶視角的網(wǎng)站性能
從用戶角度,網(wǎng)站性能就是用戶在瀏覽器上直觀感受到的網(wǎng)站響應(yīng)速度快還是慢。用戶感受到的時(shí)間,包括用戶計(jì)算機(jī)和網(wǎng)站服務(wù)器通信的時(shí)間、網(wǎng)站服務(wù)器處理的時(shí)間、用戶計(jì)算機(jī)瀏覽器構(gòu)造請(qǐng)求解析響應(yīng)數(shù)據(jù)的時(shí)間,如圖4.1所示。
不同計(jì)算機(jī)的性能差異,不同瀏覽器解析HTML速度的差異,不同網(wǎng)絡(luò)運(yùn)營(yíng)商提供的互聯(lián)網(wǎng)寬帶服務(wù)的差異,這些差異最終導(dǎo)致用戶感受到的響應(yīng)延遲可能會(huì)遠(yuǎn)遠(yuǎn)大于網(wǎng)站服務(wù)器處理請(qǐng)求需要的時(shí)間。
也可以很大程度地改善用戶視角下的網(wǎng)站性能。
2.開(kāi)發(fā)人員視角的網(wǎng)站性能
開(kāi)發(fā)人員關(guān)注的主要是應(yīng)用程序本身及其相關(guān)子系統(tǒng)的性能,包括響應(yīng)延遲、系統(tǒng)吞吐量、并發(fā)處理能力、系統(tǒng)穩(wěn)定性等技術(shù)指標(biāo)。主要的優(yōu)化手段有使用緩存加速數(shù)據(jù)讀取,使用集群提高吞吐能力,使用異步消息加快請(qǐng)求響應(yīng)及實(shí)現(xiàn)削峰,使用代碼優(yōu)化手段改善程序性能。
3.運(yùn)維人員視角的網(wǎng)站性能
運(yùn)維人員更關(guān)注基礎(chǔ)設(shè)施性能和資源利用率,如網(wǎng)絡(luò)運(yùn)營(yíng)商的帶寬能力、服務(wù)器硬件的配置、數(shù)據(jù)中心網(wǎng)絡(luò)架構(gòu)、服務(wù)器和網(wǎng)絡(luò)帶寬的資源利用率等。主要優(yōu)化手段有建設(shè)優(yōu)化骨干網(wǎng)、使用高性?xún)r(jià)比定制服務(wù)器、利用虛擬化技術(shù)優(yōu)化資源利用等。
4.1.2性能測(cè)試指標(biāo)
不同視角下有不同的性能標(biāo)準(zhǔn),不同的標(biāo)準(zhǔn)有不同的性能測(cè)試指標(biāo),從開(kāi)發(fā)和測(cè)試人員的視角,網(wǎng)站性能測(cè)試的主要指標(biāo)有響應(yīng)時(shí)間、并發(fā)數(shù)、吞吐量、性能計(jì)數(shù)器等。
1.響應(yīng)時(shí)間
指應(yīng)用執(zhí)行一個(gè)操作需要的時(shí)間,包括從發(fā)出請(qǐng)求開(kāi)始到收到最后響應(yīng)數(shù)據(jù)所需要的時(shí)間。響應(yīng)時(shí)間是系統(tǒng)最重要的性能指標(biāo),直觀地反映了系統(tǒng)的“快慢”。表4.1列出了一些常用的系統(tǒng)操作需要的響應(yīng)時(shí)間。
測(cè)試程序通過(guò)模擬應(yīng)用程序,記錄收到響應(yīng)和發(fā)出請(qǐng)求之間的時(shí)間差來(lái)計(jì)算系統(tǒng)響應(yīng)時(shí)問(wèn)。但是記錄及獲取系統(tǒng)時(shí)間這個(gè)操作也需要花費(fèi)一定的時(shí)間,如果測(cè)試目標(biāo)操作本身需要花費(fèi)的時(shí)間極少,比如幾微秒,那么測(cè)試程序就無(wú)法測(cè)試得到系統(tǒng)的響應(yīng)時(shí)間。
實(shí)踐中通常采用的辦法是重復(fù)請(qǐng)求,比如一個(gè)請(qǐng)求操作重復(fù)執(zhí)行一萬(wàn)次,測(cè)試一萬(wàn)次執(zhí)行需要的總響應(yīng)時(shí)間之和,然后除以一萬(wàn),得到單次請(qǐng)求的響應(yīng)時(shí)間。
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ù)0。與網(wǎng)站并發(fā)用戶數(shù)相對(duì)應(yīng)的還有網(wǎng)站在線用戶數(shù)(當(dāng)前登錄網(wǎng)站的用戶總數(shù))和網(wǎng)站系統(tǒng)用戶數(shù)(可能訪問(wèn)系統(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)站,特別是電商類(lèi)網(wǎng)站,市場(chǎng)推廣人員興致勃勃地打廣告打折促銷(xiāo),用戶興致勃勃地去搶購(gòu),結(jié)果活動(dòng)剛一開(kāi)始,就因?yàn)椴l(fā)用戶數(shù)超過(guò)網(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è)試程序通過(guò)多線程模擬并發(fā)用戶的辦法來(lái)測(cè)試系統(tǒng)的并發(fā)處理能力,為了真實(shí)模擬用戶行為,測(cè)試程序并不是啟動(dòng)多線程然后不停地發(fā)送請(qǐng)求,而是在兩次請(qǐng)求之間加入一個(gè)隨機(jī)等待時(shí)間,這個(gè)時(shí)間被稱(chēng)作思考時(shí)間。
3.吞吐量
指單位時(shí)間內(nèi)系統(tǒng)處理的請(qǐng)求數(shù)量,體現(xiàn)系統(tǒng)的整體處理能力。對(duì)于網(wǎng)站,可以用“請(qǐng)求數(shù)/秒”或是“頁(yè)面數(shù)/秒”來(lái)衡最,也可以用“訪問(wèn)人數(shù)/天”或是“處理的業(yè)務(wù)數(shù)/小時(shí)”等來(lái)衡量。TPS (每秒事務(wù)數(shù))是吞吐量的一個(gè)常用量化指標(biāo),此外還有HPS (每秒HTTP請(qǐng)求數(shù))、QPS (每秒查詢(xún)數(shù))等。
在系統(tǒng)并發(fā)數(shù)由小逐漸增大的過(guò)程中(這個(gè)過(guò)程也伴隨著服務(wù)器系統(tǒng)資源消耗逐漸
增大),系統(tǒng)吞吐量先是逐漸增加,達(dá)到一個(gè)極限后,隨著并發(fā)數(shù)的增加反而下降,達(dá)到系統(tǒng)崩潰點(diǎn)后,系統(tǒng)資源耗盡,吞吐量為零。
而這個(gè)過(guò)程中,響應(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)系可以形象地理解為高速公路的通行狀況:吞吐量是每天通過(guò)收費(fèi)站的車(chē)輛數(shù)目(可以換算成收費(fèi)站收取的高速費(fèi)),并發(fā)數(shù)是高速公路上的正在行駛的車(chē)輛數(shù)0,響應(yīng)時(shí)間是車(chē)速。車(chē)輛很少時(shí),車(chē)速很快,但是收到的高速費(fèi)也相應(yīng)較少;隨著高速公路上車(chē)輛數(shù)目的增多,車(chē)速略受影響,但是收到的高速費(fèi)增加很快;隨著車(chē)輛的繼續(xù)增加,車(chē)速變得越來(lái)越慢,高速公路越來(lái)越堵,收費(fèi)不增反降;如果車(chē)流量繼續(xù)增加,超過(guò)某個(gè)極限后,任何偶然因素都會(huì)導(dǎo)致高速全部癱瘓,車(chē)走不動(dòng),費(fèi)當(dāng)然也收不著,而高速公路成了停車(chē)場(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使用、磁盤(pán)與網(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ù)器超過(guò)閾值時(shí),就向運(yùn)維和開(kāi)發(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都在使用,沒(méi)有進(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ù)。