qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          PAAS平臺的web應(yīng)用性能測試與分析

          引言
            為什么我會寫這一篇博客,因為最近很多京東云擎jae的用戶反應(yīng)一個問題就是他們部署在jae上面的應(yīng)用訪問很慢,有極少數(shù)應(yīng)用甚至經(jīng)常出現(xiàn)504超時現(xiàn)象,當(dāng)然大家首先想到的是jae性能太差,這也是人之常情,往往出現(xiàn)什么錯誤的時候首先想到是別人的不好,工作中很多同事也是這樣,如果軟件系統(tǒng)出現(xiàn)一個bug首先懷疑的肯定不是自己寫的代碼。今天花時間寫這一篇博客主要就是告訴大家怎樣確定我們部署在PAAS平臺(不僅僅是JAE哦)web應(yīng)用為什么慢?慢在哪兒了?有什么方法可以解決?
            原因分析
            出現(xiàn)訪問自己web應(yīng)用慢從宏觀上可以總結(jié)為下面三點:
            (1)網(wǎng)絡(luò)慢:具體來說就是訪問者同部署web應(yīng)用的PAAS平臺之間的網(wǎng)絡(luò)慢;
            (2)PAAS平臺性能出現(xiàn)問題:具體來說就是由于各種原因?qū)е翽AAS平臺不能很好服務(wù)部署在它上面的應(yīng)用;
            (3)web應(yīng)用本身慢:由于各種原因(頻繁讀寫磁盤,大量耗時的計算,資源競爭等)導(dǎo)致web應(yīng)用不能很快的響應(yīng)訪問者的請求。
            上面三點主要總結(jié)于web應(yīng)用的訪問路徑,因為訪問PAAS平臺的web應(yīng)用首先需要經(jīng)過網(wǎng)絡(luò),然后經(jīng)過PAAS平臺的過濾和轉(zhuǎn)發(fā)等處理,最后才到達(dá)web應(yīng)用本身處理。這三個環(huán)節(jié)任何一個出現(xiàn)問題都會導(dǎo)致web應(yīng)用訪問變慢。知道原因了,我們還需要判斷到底是哪一個環(huán)節(jié)出現(xiàn)了問題,下面就說說怎樣定位具體的環(huán)節(jié)。
            定位具體原因
            上面分析的三個原因除了第二個原因以外,大家都可以自己定位和排除,首先檢查網(wǎng)絡(luò),為了更加準(zhǔn)確我們可以從一下方面進(jìn)行排除:
            (1)首先檢查訪問其他網(wǎng)站是否出現(xiàn)很慢的現(xiàn)象,如果很快,那么說明你的網(wǎng)絡(luò)肯定大體上是正常的;
            (2)訪問對應(yīng)PAAS平臺提供的相關(guān)網(wǎng)站和PAAS平臺所屬公司的網(wǎng)站,例如JAE,你可以訪問京東商城主站和京東云平臺首頁等,BAE可以訪問百度相關(guān)網(wǎng)站,SAE可以訪問新浪相關(guān)網(wǎng)站,因為這些關(guān)聯(lián)網(wǎng)站一般部署在同一個機(jī)房或者同一個城市,如果這些網(wǎng)站也很慢,那多半說明這些網(wǎng)站相關(guān)機(jī)房網(wǎng)絡(luò)出現(xiàn)問題或者訪問量很大,導(dǎo)致這些網(wǎng)站對外出口流量和訪問速度變慢,也就是對外提供服務(wù)的能力扛不住了,如果沒有問題,那么可以排除大的網(wǎng)絡(luò)環(huán)境是沒有問題的;
            排除了網(wǎng)絡(luò)因素,我們就可以排除后面兩個原因了,由于PAAS平臺的性能對用戶基本上是透明的,就是用戶基本上無從得知,所以可以直接跳過這個原因的排除,當(dāng)然其實是有手段的,只是稍微復(fù)雜,所以不方便所有用戶,如果是這種原因最好還是交給PAAS平臺的開發(fā)人員去處理。
            最后一個原因當(dāng)然就是web應(yīng)用自身的實現(xiàn)了,我發(fā)現(xiàn)很多用戶反饋的網(wǎng)站訪問慢的原因都是由于自己代碼實現(xiàn)的問題。
            首先出現(xiàn)問題的網(wǎng)站大多數(shù)是有一定訪問量的,特別是某一個時間段出現(xiàn)訪問量巨大,而且頻繁讀寫磁盤。為了定位這種原因希望大家把應(yīng)用部署在自己本地使用web性能測試工具做驗證即可,例如比較常用的web性能測試工具ab,這個事apache自帶的測試工具,ubuntu下安裝和使用都非常方便,例如我們直接在控制臺中輸入ab,如果沒有安裝,ubuntu系統(tǒng)會如下提示:
            The program 'ab' is currently not installed.  You can install it by typing:
            sudo apt-get install apache2-utils
            然后安裝提示安裝即可,安裝成功以后我們就可以使用ab軟件對我們部署在本地的web應(yīng)用進(jìn)行性能測試評估了,命令如下:
            ab -n1000 -c10 http://localhost/
            上面命令的意思是總共發(fā)送1000次請求,每次10各并發(fā)請求,訪問的路徑就是本地web服務(wù)器的根路徑,結(jié)果如下:
          This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
          Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
          Licensed to The Apache Software Foundation, http://www.apache.org/
          Benchmarking localhost (be patient)
          Completed 100 requests
          Completed 200 requests
          Completed 300 requests
          Completed 400 requests
          Completed 500 requests
          Completed 600 requests
          Completed 700 requests
          Completed 800 requests
          Completed 900 requests
          Completed 1000 requests
          Finished 1000 requests
          Server Software:        Apache/2.4.6
          Server Hostname:        localhost
          Server Port:            80
          Document Path:          /
          Document Length:        177 bytes
          Concurrency Level:      10
          Time taken for tests:   0.075 seconds
          Complete requests:      1000
          Failed requests:        0
          Write errors:           0
          Total transferred:      446000 bytes
          HTML transferred:       177000 bytes
          Requests per second:    13283.74 [#/sec] (mean)
          Time per request:       0.753 [ms] (mean)
          Time per request:       0.075 [ms] (mean, across all concurrent requests)
          Transfer rate:          5785.69 [Kbytes/sec] received
          Connection Times (ms)
          min  mean[+/-sd] median   max
          Connect:        0    0   0.1      0       1
          Processing:     0    1   0.2      0       2
          Waiting:        0    0   0.2      0       2
          Total:          0    1   0.1      1       2
          ERROR: The median and mean for the processing time are more than twice the standard
          deviation apart. These results are NOT reliable.
          Percentage of the requests served within a certain time (ms)
          50%      1
          66%      1
          75%      1
          80%      1
          90%      1
          95%      1
          98%      1
          99%      1
          100%      2 (longest request)
          上面具體每一項代碼什么意義可以網(wǎng)上查找,這里我們主要關(guān)心一下如下這個選項:
            Requests per second,從結(jié)果看這個值是13283.74 [#/sec] (mean),表示每一秒鐘可以處理13283.74各請求,因為我這個很簡單的一個靜態(tài)頁面(就是apache服務(wù)器安裝后默認(rèn)的首頁),所以看起很不錯,而且是通過本地localhost,沒有經(jīng)過網(wǎng)絡(luò)。我們可以改變訪問的條件持續(xù)做很多組測試,例如我把并發(fā)請求數(shù)改為100,即-c100,得到參數(shù)值為:
            Requests per second:    11843.29 [#/sec] (mean)
            明顯比上面減少了一些,繼續(xù)改總請求數(shù)為10000,并發(fā)數(shù)1000,即-n10000 -c1000得到如下值:
            Requests per second:    747.98 [#/sec] (mean)
            這個時候減少的相當(dāng)?shù)目膳铝耍酝ㄟ^這個ab測試工具就能夠知道我們的web應(yīng)用能夠承擔(dān)多少的并發(fā)訪問,當(dāng)然我們可以通過不斷的挑戰(zhàn)參數(shù)進(jìn)行測試,然后繪制成一個曲線圖觀察就很方便看出我們web應(yīng)用的最佳性能點,超過那么最佳性能點可能就導(dǎo)致性能下降,那么訪問速度也就跟著下降了。
            當(dāng)然只看上面一個參數(shù)看不出具體一個用戶訪問所需要等待的時間,另一個參數(shù)可以看出,我對應(yīng)三次的測試這個參數(shù)值分別如下:
            Time per request:       0.753 [ms] (mean)
            Time per request:       8.444 [ms] (mean)
            Time per request:       1336.942 [ms] (mean)
            從三次測試可以看出,隨著并發(fā)數(shù)的增長,一個用戶平均等待的時間也在變長,這個最終就反應(yīng)到用戶web訪問的結(jié)果(速度的快慢),這里測試的只是一個簡單的靜態(tài)網(wǎng)頁,如果是復(fù)雜的動態(tài)網(wǎng)頁(例如訪問數(shù)據(jù)庫,讀寫磁盤和大量的計算等)那么就更加復(fù)雜了,一個請求的快慢由于web應(yīng)用需要處理的業(yè)務(wù)邏輯有很大的關(guān)系,當(dāng)然怎樣讓這些業(yè)務(wù)邏輯執(zhí)行更快并且并行執(zhí)行,這個就需要程序?qū)崿F(xiàn)者考慮了。
            總結(jié)
            這里只是簡單介紹了部署在PAAS平臺web應(yīng)用訪問很慢的可能原因和簡單定位方法,起始我覺得大家應(yīng)該中的關(guān)注在第三點上,自身應(yīng)用的優(yōu)化,因為前面兩點都是我們不可控的,網(wǎng)絡(luò)這個PAAS平臺自身也解決不了,最多可以部署多個機(jī)房多個寬帶運營商和cdn處理等,但是用戶自身的網(wǎng)絡(luò)問題PAAS平臺也是解決不了的。至于PAAS平臺自身的原因,大家就更不用擔(dān)心了,他們比你們更關(guān)系自身PAAS平臺的性能,因為上面托管著成千上萬的web應(yīng)用,他們時時刻刻都在關(guān)系著自身平臺的性能拼勁,想著各種方法優(yōu)化。如果PAAS平臺的原因?qū)е掠脩舨渴鸬膚eb應(yīng)用訪問很慢甚至不可用那么這個PAAS平臺自身也做不下去的。
            最后還想強調(diào)一點就是web應(yīng)用自身的性能優(yōu)化問題,現(xiàn)在各種語言都提供了很好的開發(fā)框架,理論上都是穩(wěn)定的并且性能是不錯的,當(dāng)然特殊場景需要特殊考慮。但是我們自身在設(shè)計web應(yīng)用的時候可能需要考慮的更多,不要妄想一個簡單的開發(fā)框架就能解決所有的問題,尤其是性能問題。設(shè)計到web應(yīng)用優(yōu)化的知識和技術(shù)非常的多也非常的復(fù)雜,還有很多場景,所以這是各長久的過程。后面有機(jī)會也會給大家介紹一些web性能優(yōu)化的方法和技術(shù),并且結(jié)合實際場景進(jìn)行分析和演練。

          posted on 2014-04-29 10:46 順其自然EVO 閱讀(293) 評論(0)  編輯  收藏 所屬分類: 性能測試web 前端性能測試

          <2014年4月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南陵县| 鹿邑县| 山阴县| 阿坝县| 桐柏县| 温宿县| 广宁县| 福建省| 万源市| 阳原县| 东明县| 犍为县| 修文县| 忻州市| 平遥县| 天镇县| 大同县| 青龙| 曲阳县| 皮山县| 城固县| 内江市| 澄江县| 封开县| 通化市| 洛隆县| 连州市| 游戏| 孟村| 五大连池市| 郧西县| 大埔区| 湛江市| 乐东| 凤凰县| 黔西| 若羌县| 永济市| 东辽县| 页游| 扎赉特旗|