瞬時響應(yīng):網(wǎng)站的高性能架構(gòu)
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
發(fā)表于1小時前| 次閱讀| 來源《程序員》| 0 條評論| 作者李智慧
摘要:網(wǎng)站性能是客觀的指標,可以具體體現(xiàn)到響應(yīng)時間、吞吐量等技術(shù)指標,同時也是主觀的感受,而感受則是一種與具體參與者相關(guān)的微妙的東西,用戶的感受和工程師的感受不同,不同的用戶感受也不同。 什么叫高性能的網(wǎng)站? 兩個網(wǎng)站性能架構(gòu)設(shè)計方案:A方案和B方案,A方案在小于100個并發(fā)用戶訪問時,每個請求的響應(yīng)時間是1秒,當(dāng)并發(fā)請求達到200的時候,請求的響應(yīng)時間將驟增到10秒。B方案不管是100個并發(fā)用戶訪問還是200個并發(fā)用戶訪問,每個請求的響應(yīng)時間都差不多是1.5秒。哪個方案的性能好?如果老板說"我們要改善網(wǎng)站的性能",他指的是什么? 同類型的兩個網(wǎng)站,X網(wǎng)站服務(wù)器平均每個請求的處理時間是500毫秒,Y網(wǎng)站服務(wù)器平均每個請求的處理時間是1000毫秒,為什么用戶卻反映Y網(wǎng)站的速度快呢? 網(wǎng)站性能是客觀的指標,可以具體體現(xiàn)到響應(yīng)時間、吞吐量等技術(shù)指標,同時也是主觀的感受,而感受則是一種與具體參與者相關(guān)的微妙的東西,用戶的感受和工程師的感受不同,不同的用戶感受也不同。 網(wǎng)站性能測試 性能測試是性能優(yōu)化的前提和基礎(chǔ),也是性能優(yōu)化結(jié)果的檢查和度量標準。不同視角下的網(wǎng)站性能有不同的標準,也有不同的優(yōu)化手段。 不同視角下的網(wǎng)站性能 軟件工程師說到網(wǎng)站性能的時候,通常和用戶說的不一樣。 1.用戶視角的網(wǎng)站性能 從用戶角度,網(wǎng)站性能就是用戶在瀏覽器上直觀感受到的網(wǎng)站響應(yīng)速度快還是慢。用戶感受到的時間,包括用戶計算機和網(wǎng)站服務(wù)器通信的時間、網(wǎng)站服務(wù)器處理的時間、用戶計算機瀏覽器構(gòu)造請求解析響應(yīng)數(shù)據(jù)的時間,如圖1所示。 圖1 用戶視角的網(wǎng)站性能 不同計算機的性能差異,不同瀏覽器解析HTML速度的差異,不同網(wǎng)絡(luò)運營商提供的互聯(lián)網(wǎng)寬帶服務(wù)的差異,這些差異最終導(dǎo)致用戶感受到的響應(yīng)延遲可能會遠遠大于網(wǎng)站服務(wù)器處理請求需要的時間。 在實踐中,使用一些前端架構(gòu)優(yōu)化手段,通過優(yōu)化頁面HTML式樣、利用瀏覽器端的并發(fā)和異步特性、調(diào)整瀏覽器緩存策略、使用CDN服務(wù)、反向代理等手段,使瀏覽器盡快地顯示用戶感興趣的內(nèi)容、盡可能近地獲取頁面內(nèi)容,即使不優(yōu)化應(yīng)用程序和架構(gòu),也可以很大程度地改善用戶視角下的網(wǎng)站性能。 2.開發(fā)人員視角的網(wǎng)站性能 開發(fā)人員關(guān)注的主要是應(yīng)用程序本身及其相關(guān)子系統(tǒng)的性能,包括響應(yīng)延遲、系統(tǒng)吞吐量、并發(fā)處理能力、系統(tǒng)穩(wěn)定性等技術(shù)指標。主要的優(yōu)化手段有使用緩存加速數(shù)據(jù)讀取,使用集群提高吞吐能力,使用異步消息加快請求響應(yīng)及實現(xiàn)削峰,使用代碼優(yōu)化手段改善程序性能。 3.運維人員視角的網(wǎng)站性能 運維人員更關(guān)注基礎(chǔ)設(shè)施性能和資源利用率,如網(wǎng)絡(luò)運營商的帶寬能力、服務(wù)器硬件的配置、數(shù)據(jù)中心網(wǎng)絡(luò)架構(gòu)、服務(wù)器和網(wǎng)絡(luò)帶寬的資源利用率等。主要優(yōu)化手段有建設(shè)優(yōu)化骨干網(wǎng)、使用高性價比定制服務(wù)器、利用虛擬化技術(shù)優(yōu)化資源利用等。 性能測試指標 不同視角下有不同的性能標準,不同的標準有不同的性能測試指標,從開發(fā)和測試人員的視角,網(wǎng)站性能測試的主要指標有響應(yīng)時間、并發(fā)數(shù)、吞吐量、性能計數(shù)器等。 1.響應(yīng)時間 指應(yīng)用執(zhí)行一個操作需要的時間,包括從發(fā)出請求開始到收到最后響應(yīng)數(shù)據(jù)所需要的時間。響應(yīng)時間是系統(tǒng)最重要的性能指標,直觀地反映了系統(tǒng)的"快慢"。表4.1列出了一些常用的系統(tǒng)操作需要的響應(yīng)時間。 表1 常用系統(tǒng)操作響應(yīng)時間表 測試程序通過模擬應(yīng)用程序,記錄收到響應(yīng)和發(fā)出請求之間的時間差來計算系統(tǒng)響應(yīng)時間。但是記錄及獲取系統(tǒng)時間這個操作也需要花費一定的時間,如果測試目標操作本身需要花費的時間極少,比如幾微秒,那么測試程序就無法測試得到系統(tǒng)的響應(yīng)時間。實踐中通常采用的辦法是重復(fù)請求,比如一個請求操作重復(fù)執(zhí)行一萬次,測試一萬次執(zhí)行需要的總響應(yīng)時間之和,然后除以一萬,得到單次請求的響應(yīng)時間。 2.并發(fā)數(shù) 指系統(tǒng)能夠同時處理請求的數(shù)目,這個數(shù)字也反映了系統(tǒng)的負載特性。對于網(wǎng)站而言,并發(fā)數(shù)即網(wǎng)站并發(fā)用戶數(shù),指同時提交請求的用戶數(shù)目。 與網(wǎng)站并發(fā)用戶數(shù)相對應(yīng)的還有網(wǎng)站在線用戶數(shù)(當(dāng)前登錄網(wǎng)站的用戶總數(shù))和網(wǎng)站系統(tǒng)用戶數(shù)(可能訪問系統(tǒng)的總用戶數(shù),對多數(shù)網(wǎng)站而言就是注冊用戶數(shù))。其數(shù)量比較關(guān)系為: 網(wǎng)站系統(tǒng)用戶數(shù)>>網(wǎng)站在線用戶數(shù)>>網(wǎng)站并發(fā)用戶數(shù) 在網(wǎng)站產(chǎn)品設(shè)計初期,產(chǎn)品經(jīng)理和運營人員就需要規(guī)劃不同發(fā)展階段的網(wǎng)站系統(tǒng)用戶數(shù),并以此為基礎(chǔ),根據(jù)產(chǎn)品特性和運營手段,推算在線用戶數(shù)和并發(fā)用戶數(shù)。這些指標將成為系統(tǒng)非功能設(shè)計的重要依據(jù)。 現(xiàn)實中,經(jīng)??吹侥承┚W(wǎng)站,特別是電商類網(wǎng)站,市場推廣人員興致勃勃地打廣告打折促銷,用戶興致勃勃地去搶購,結(jié)果活動剛一開始,就因為并發(fā)用戶數(shù)超過網(wǎng)站最大負載而響應(yīng)緩慢,急性子的用戶不停刷新瀏覽器,導(dǎo)致系統(tǒng)并發(fā)數(shù)更高,最后以服務(wù)器系統(tǒng)崩潰,用戶瀏覽器顯示"Service is too busy"而告終。出現(xiàn)這種情況,有可能是網(wǎng)站技術(shù)準備不充分導(dǎo)致,也有可能是運營人員錯誤地評估并發(fā)用戶數(shù)導(dǎo)致。 測試程序通過多線程模擬并發(fā)用戶的辦法來測試系統(tǒng)的并發(fā)處理能力,為了真實模擬用戶行為,測試程序并不是啟動多線程然后不停地發(fā)送請求,而是在兩次請求之間加入一個隨機等待時間,這個時間被稱作思考時間。 3.吞吐量 指單位時間內(nèi)系統(tǒng)處理的請求數(shù)量,體現(xiàn)系統(tǒng)的整體處理能力。對于網(wǎng)站,可以用"請求數(shù)/秒"或是"頁面數(shù)/秒"來衡量,也可以用"訪問人數(shù)/天"或是"處理的業(yè)務(wù)數(shù)/小時"等來衡量。TPS(每秒事務(wù)數(shù))是吞吐量的一個常用量化指標,此外還有HPS(每秒HTTP請求數(shù))、QPS(每秒查詢數(shù))等。 在系統(tǒng)并發(fā)數(shù)由小逐漸增大的過程中(這個過程也伴隨著服務(wù)器系統(tǒng)資源消耗逐漸增大),系統(tǒng)吞吐量先是逐漸增加,達到一個極限后,隨著并發(fā)數(shù)的增加反而下降,達到系統(tǒng)崩潰點后,系統(tǒng)資源耗盡,吞吐量為零。 而這個過程中,響應(yīng)時間則是先保持小幅上升,到達吞吐量極限后,快速上升,到達系統(tǒng)崩潰點后,系統(tǒng)失去響應(yīng)。系統(tǒng)吞吐量、系統(tǒng)并發(fā)數(shù)及響應(yīng)時間之間的關(guān)系將在本章后面內(nèi)容中介紹。 系統(tǒng)吞吐量和系統(tǒng)并發(fā)數(shù),以及響應(yīng)時間的關(guān)系可以形象地理解為高速公路的通行狀況:吞吐量是每天通過收費站的車輛數(shù)目(可以換算成收費站收取的高速費),并發(fā)數(shù)是高速公路上的正在行駛的車輛數(shù)目,響應(yīng)時間是車速。車輛很少時,車速很快,但是收到的高速費也相應(yīng)較少;隨著高速公路上車輛數(shù)目的增多,車速略受影響,但是收到的高速費增加很快;隨著車輛的繼續(xù)增加,車速變得越來越慢,高速公路越來越堵,收費不增反降;如果車流量繼續(xù)增加,超過某個極限后,任何偶然因素都會導(dǎo)致高速全部癱瘓,車走不動,費當(dāng)然也收不著,而高速公路成了停車場(資源耗盡)。 網(wǎng)站性能優(yōu)化的目的,除了改善用戶體驗的響應(yīng)時間,還要盡量提高系統(tǒng)吞吐量,最大限度利用服務(wù)器資源。 4.性能計數(shù)器 它是描述服務(wù)器或操作系統(tǒng)性能的一些數(shù)據(jù)指標。包括System Load、對象與線程數(shù)、內(nèi)存使用、CPU使用、磁盤與網(wǎng)絡(luò)I/O等指標。這些指標也是系統(tǒng)監(jiān)控的重要參數(shù),對這些指標設(shè)置報警閾值,當(dāng)監(jiān)控系統(tǒng)發(fā)現(xiàn)性能計數(shù)器超過閾值時,就向運維和開發(fā)人員報警,及時發(fā)現(xiàn)處理系統(tǒng)異常。 System Load即系統(tǒng)負載,指當(dāng)前正在被CPU執(zhí)行和等待被CPU執(zhí)行的進程數(shù)目總和,是反映系統(tǒng)忙閑程度的重要指標。多核CPU的情況下,完美情況是所有CPU都在使用,沒有進程在等待處理,所以Load的理想值是CPU的數(shù)目。當(dāng)Load值低于CPU數(shù)目的時候,表示CPU有空閑,資源存在浪費;當(dāng)Load值高于CPU數(shù)目的時候,表示進程在排隊等待CPU調(diào)度,表示系統(tǒng)資源不足,影響應(yīng)用程序的執(zhí)行性能。在Linux系統(tǒng)中使用top命令查看,該值是三個浮點數(shù),表示最近1分鐘,10分鐘,15分鐘的運行隊列平均進程數(shù)。如圖4.2所示。 圖2 在Linux命令行查看系統(tǒng)負載 性能測試方法 性能測試是一個總稱,具體可細分為性能測試、負載測試、壓力測試、穩(wěn)定性測試。 以系統(tǒng)設(shè)計初期規(guī)劃的性能指標為預(yù)期目標,對系統(tǒng)不斷施加壓力,驗證系統(tǒng)在資源可接受范圍內(nèi),是否能達到性能預(yù)期。 對系統(tǒng)不斷地增加并發(fā)請求以增加系統(tǒng)壓力,直到系統(tǒng)的某項或多項性能指標達到安全臨界值,如某種資源已經(jīng)呈飽和狀態(tài),這時繼續(xù)對系統(tǒng)施加壓力,系統(tǒng)的處理能力不但不能提高,反而會下降。 超過安全負載的情況下,對系統(tǒng)繼續(xù)施加壓力,直到系統(tǒng)崩潰或不能再處理任何請求,以此獲得系統(tǒng)最大壓力承受能力。 被測試系統(tǒng)在特定硬件、軟件、網(wǎng)絡(luò)環(huán)境條件下,給系統(tǒng)加載一定業(yè)務(wù)壓力,使系統(tǒng)運行一段較長時間,以此檢測系統(tǒng)是否穩(wěn)定。在不同生產(chǎn)環(huán)境、不同時間點的請求壓力是不均勻的,呈波浪特性,因此為了更好地模擬生產(chǎn)環(huán)境,穩(wěn)定性測試也應(yīng)不均勻地對系統(tǒng)施加壓力。 性能測試是一個不斷對系統(tǒng)增加訪問壓力,以獲得系統(tǒng)性能指標、最大負載能力、最大壓力承受能力的過程。所謂的增加訪問壓力,在系統(tǒng)測試環(huán)境中,就是不斷增加測試程序的并發(fā)請求數(shù),一般說來,性能測試遵循如圖4.3所示的拋物線規(guī)律。 圖4.3中的橫坐標表示消耗的系統(tǒng)資源,縱坐標表示系統(tǒng)處理能力(吞吐量)。在開始階段,隨著并發(fā)請求數(shù)目的增加,系統(tǒng)使用較少的資源就達到較好的處理能力(a~b段),這一段是網(wǎng)站的日常運行區(qū)間,網(wǎng)站的絕大部分訪問負載壓力都集中在這一段區(qū)間,被稱作性能測試,測試目標是評估系統(tǒng)性能是否符合需求及設(shè)計目標;隨著壓力的持續(xù)增加,系統(tǒng)處理能力增加變緩,直到達到一個最大值(c點),這是系統(tǒng)的最大負載點,這一段被稱作負載測試。測試目標是評估當(dāng)系統(tǒng)因為突發(fā)事件超出日常訪問壓力的情況下,保證系統(tǒng)正常運行情況下能夠承受的最大訪問負載壓力;超過這個點后,再增加壓力,系統(tǒng)的處理能力反而下降,而資源消耗卻更多,直到資源消耗達到極限(d點),這個點可以看作是系統(tǒng)的崩潰點,超過這個點繼續(xù)加大并發(fā)請求數(shù)目,系統(tǒng)不能再處理任何請求,這一段被稱作壓力測試,測試目標是評估可能導(dǎo)致系統(tǒng)崩潰的最大訪問負載壓力。 圖3 性能測試曲線 性能測試反應(yīng)的是系統(tǒng)在實際生產(chǎn)環(huán)境中使用時,隨著用戶并發(fā)訪問數(shù)量的增加,系統(tǒng)的處理能力。與性能曲線相對應(yīng)的是用戶訪問的等待時間(系統(tǒng)響應(yīng)時間),如圖4.4所示。 圖4 并發(fā)用戶訪問響應(yīng)時間曲線 在日常運行區(qū)間,可以獲得最好的用戶響應(yīng)時間,隨著并發(fā)用戶數(shù)的增加,響應(yīng)延遲越來越大,直到系統(tǒng)崩潰,用戶失去響應(yīng)。 性能測試報告 測試結(jié)果報告應(yīng)能夠反映上述性能測試曲線的規(guī)律,閱讀者可以得到系統(tǒng)性能是否滿足設(shè)計目標和業(yè)務(wù)要求、系統(tǒng)最大負載能力、系統(tǒng)最大壓力承受能力等重要信息,表4.2是一個簡單示例。 表2 性能測試結(jié)果報告 性能優(yōu)化策略 如果性能測試結(jié)果不能滿足設(shè)計或業(yè)務(wù)需求,那么就需要尋找系統(tǒng)瓶頸,分而治之,逐步優(yōu)化。 1.性能分析 大型網(wǎng)站結(jié)構(gòu)復(fù)雜,用戶從瀏覽器發(fā)出請求直到數(shù)據(jù)庫完成操作事務(wù),中間需要經(jīng)過很多環(huán)節(jié),如果測試或者用戶報告網(wǎng)站響應(yīng)緩慢,存在性能問題,必須對請求經(jīng)歷的各個環(huán)節(jié)進行分析,排查可能出現(xiàn)性能瓶頸的地方,定位問題。 排查一個網(wǎng)站的性能瓶頸和排查一個程序的性能瓶頸的手法基本相同:檢查請求處理的各個環(huán)節(jié)的日志,分析哪個環(huán)節(jié)響應(yīng)時間不合理、超過預(yù)期;然后檢查監(jiān)控數(shù)據(jù),分析影響性能的主要因素是內(nèi)存、磁盤、網(wǎng)絡(luò)、還是CPU,是代碼問題還是架構(gòu)設(shè)計不合理,或者系統(tǒng)資源確實不足。 2.性能優(yōu)化 定位產(chǎn)生性能問題的具體原因后,就需要進行性能優(yōu)化,根據(jù)網(wǎng)站分層架構(gòu),可分為Web前端性能優(yōu)化、應(yīng)用服務(wù)器性能優(yōu)化、存儲服務(wù)器性能優(yōu)化3大類。 李智慧,曾在阿里巴巴擔(dān)任技術(shù)專家,參與阿里巴巴基礎(chǔ)技術(shù)平臺開發(fā)和www.alibaba.com架構(gòu)設(shè)計。目前就職英特爾亞太研發(fā)中心從事云計算與大數(shù)據(jù)方面的研發(fā)工作。本文節(jié)選自《大型網(wǎng)站技術(shù)架構(gòu):核心原理與案例分析》一書,李智慧著,由電子工業(yè)出版社出版。 原文地址:http://iphone.myzaker.com/l.php?l=5243f2847f52e95940000000 該文章在 2013/10/24 21:33:33 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |