1. 程式人生 > >PAAS平臺的web應用性能測試與分析

PAAS平臺的web應用性能測試與分析

首頁 ebe -s long 排除 nec 意義 時間段 提示安裝

引言

為什麽我會寫這一篇博客,由於近期非常多京東雲擎jae的用戶反應一個問題就是他們部署在jae上面的應用訪問非常慢,有極少數應用甚至常常出現504超時現象。當然大家首先想到的是jae性能太差,這也是人之常情,往往出現什麽錯誤的時候首先想到是別人的不好。工作中非常多同事也是這樣,假設軟件系統出現一個bug首先懷疑的肯定不是自己寫的代碼。今天花時間寫這一篇博客主要就是告訴大家如何確定我們部署在PAAS平臺(不不過JAE哦)web應用為什麽慢?慢在哪兒了?有什麽方法能夠解決?


原因分析
出現訪問自己web應用慢從宏觀上能夠總結為以下三點:
(1)網絡慢:詳細來說就是訪問者同部署web應用的PAAS平臺之間的網絡慢;

(2)PAAS平臺性能出現故障:詳細來說就是因為各種原因導致PAAS平臺不能非常好服務部署在它上面的應用;
(3)web應用本身慢:因為各種原因(頻繁讀寫磁盤,大量耗時的計算,資源競爭等)導致web應用不能非常快的響應訪問者的請求。

上面三點主要總結於web應用的訪問路徑。由於訪問PAAS平臺的web應用首先須要經過網絡,然後經過PAAS平臺的過濾和轉發等處理,最後才到達web應用本身處理。這三個環節不論什麽一個出現故障都會導致web應用訪問變慢。知道原因了,我們還須要推斷究竟是哪一個環節出現了問題,以下就說說如何定位詳細的環節。


定位詳細原因
上面分析的三個原因除了第二個原因以外。大家都能夠自己定位和排除,首先檢查網絡。為了更加準確我們能夠從一下方面進行排除:

(1)首先檢查訪問其它站點是否出現非常慢的現象,假設非常快,那麽說明你的網絡肯定大體上是正常的;
(2)訪問相應PAAS平臺提供的相關站點和PAAS平臺所屬公司的站點。比如JAE。你能夠訪問京東商城主站和京東雲平臺首頁等,BAE能夠訪問百度相關站點。SAE能夠訪問新浪相關站點。由於這些關聯站點一般部署在同一個機房或者同一個城市。假設這些站點也非常慢。那多半說明這些站點相關機房網絡出現故障或者訪問量非常大。導致這些站點對外出口流量和訪問速度變慢,也就是對外提供服務的能力扛不住了,假設沒有問題。那麽能夠排除大的網絡環境是沒有問題的;

排除了網絡因素,我們就能夠排除後面兩個原因了,因為PAAS平臺的性能對用戶基本上是透明的,就是用戶基本上無從得知,所以能夠直接跳過這個原因的排除,當然事實上是有手段的,僅僅是略微復雜,所以不方便全部用戶。假設是這樣的原因不妨交給PAAS平臺的開發者去處理。


最後一個原因當然就是web應用自身的實現了,我發現非常多用戶反饋的站點訪問慢的原因都是因為自己代碼實現的問題。
首先出現故障的站點大多數是有一定訪問量的,特別是某一個時間段出現訪問量巨大,並且頻繁讀寫磁盤。

為了定位這樣的原因希望大家把應用部署在自己本地使用web性能測試工具做驗證就可以,比如比較經常使用的web性能測試工具ab,這個事apache自帶的測試工具,ubuntu下安裝和使用都很方便,比如我們直接在控制臺中輸入ab。假設沒有安裝,ubuntu系統會例如以下提示:
The program ‘ab‘ is currently not installed. You can install it by typing:
sudo apt-get install apache2-utils
然後安裝提示安裝就可以,成功安裝以後我們就能夠使用ab軟件對我們部署在本地的web應用進行性能測試評估了,命令例如以下:
ab -n1000 -c10 http://localhost/
上面命令的意思是總共發送1000次請求,每次10各並發請求。訪問的路徑就是本地webserver的根路徑。結果例如以下:
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)
上面詳細每一項代碼什麽意義能夠網上查找,這裏我們主要關心一下例如以下這個選項:
Requests per second,從結果看這個值是13283.74 [#/sec] (mean),表示每一秒鐘能夠處理13283.74各請求。由於我這個非常easy的一個靜態頁面(就是apacheserver安裝後默認的首頁),所以看起非常不錯,並且是通過本地localhost。沒有經過網絡。

我們能夠改變訪問的條件持續做非常多組測試。比如我把並發請求數改為100,即-c100,得到參數值為:
Requests per second: 11843.29 [#/sec] (mean)
明顯比上面降低了一些,繼續改總請求數為10000,並發數1000,即-n10000 -c1000得到例如以下值:
Requests per second: 747.98 [#/sec] (mean)
這個時候降低的相當的可怕了,所以通過這個ab測試工具就行知道我們的web應用可以承擔多少的並發訪問,當然我們可以通過不斷的挑戰參數進行測試,然後繪制成一個曲線圖觀察就非常方便看出我們web應用的最佳性能點。超過那麽最佳性能點可能就導致性能下降。那麽訪問速度也就跟著下降了。


當然僅僅看上面一個參數看不出詳細一個用戶訪問所須要等待的時間,還有一個參數能夠看出。我相應三次的測試這個參數值分別例如以下:
Time per request: 0.753 [ms] (mean)
Time per request: 8.444 [ms] (mean)
Time per request: 1336.942 [ms] (mean)

從三次測試能夠看出,隨著並發數的增長。一個用戶平均等待的時間也在變長,這個終於就反應到用戶web訪問的結果(速度的快慢),這裏測試的僅僅是一個簡單的靜態網頁,假設是復雜的動態網頁(比如訪問數據庫,讀寫磁盤和大量的計算等)那麽就更加復雜了。一個請求的快慢因為web應用須要處理的業務邏輯有非常大的關系,當然如何讓這些業務邏輯運行更快而且並行運行,這個就須要程序實現者考慮了。


總結
這裏僅僅是簡介了部署在PAAS平臺web應用訪問非常慢的可能原因和簡單定位方法,起始我認為大家應該中的關註在第三點上,自身應用的優化,由於前面兩點都是我們不可控的,網絡這個PAAS平臺自身也解決不了,最多能夠部署多個機房多個寬帶運營商和cdn處理等,可是用戶自身的網絡問題PAAS平臺也是解決不了的。

至於PAAS平臺自身的原因。大家就更不用操心了。他們比你們更關系自身PAAS平臺的性能,由於上面托管著成千上萬的web應用。他們時時刻刻都在關系著自身平臺的性能拼勁,想著各種方法優化。

假設PAAS平臺的原因導致用戶部署的web應用訪問非常慢甚至不可用那麽這個PAAS平臺自身也做不下去的。
最後還想強調一點就是web應用自身的性能優化問題,如今各種語言都提供了非常好的開發框架,理論上都是穩定的而且性能是不錯的,當然特殊場景須要特殊考慮。

可是我們自身在設計web應用的時候可能須要考慮的很多其它,不要妄想一個簡單的開發框架就能解決全部的問題,尤其是性能問題。設計到web應用優化的知識和技術非常的多也非常的復雜,還有非常多場景,所以這是各長久的過程。後面有機會也會給大家介紹一些web性能優化的方法和技術,而且結合實際場景進行分析和演練。

PAAS平臺的web應用性能測試與分析