1. 程式人生 > >基於kylinTOP工具的HTTP2壓力測試

基於kylinTOP工具的HTTP2壓力測試

1、HTTP協議概述 說到http,那就應該先了解一下http協議的發展歷史。關於http協議的歷史,可以參考阮一峰老師的這篇部落格文章 HTTP 協議入門,裡面介紹的比較詳細了。簡單來說http先後存在0.91.01.1三個版本,我們目前上網使用最廣泛的是http/1.1協議,釋出於1997年,距今已經20多年了,至今仍然是訪問網站的主流協議(真是老而彌堅啊)。http/1.1的報文格式如下:

request報文

 

response報文

 

 

HTTP/1.1的問題

http協議早期為網際網路的普及做出了巨大的貢獻,構建了現代網際網路的基礎架構,但是由於協議制定的時間較早,在很多方面還是有著侷限性,在網際網路高速發展,資訊爆炸的今天,難免有些捉襟見肘。主要體現在以下幾個方面:

  • 傳輸報文為ascii文字形式,對於http header不會進行壓縮。這樣對於可讀性是比較友好,但對於計算機不太友好,此外傳輸效率較低
  • 請求只能由客戶端發起,不能由服務端發起。這種模式限制了一些主動推送或者有雙工需求的使用場景,當然也有比如websocket之類的解決方案,但那嚴格來說已經不屬於http協議的範疇了。
  • 同步阻塞通訊:其實在http/1.1中已經預設使用了持久連線(persistent connection),可以做到多個請求複用同一個tcp連線,同時利用管道機制(pipelining),可以讓請求同時在一個tcp連線上傳送,但是http本質上還是一個請求/響應模型,服務端仍然需要按照請求的順序依次回覆,不能亂序回覆。這樣要是前面的迴應特別慢,後面就會有許多請求排隊等著。這稱為"隊頭堵塞"(Head-of-line blocking)。
  • 由於隊頭堵塞問題的存在,在客戶端要下載大量資源的情況下,不得不和伺服器建立多個TCP連線(大部分瀏覽器允許最多建立6個和指定伺服器的持久連線),達到併發傳輸的效果,而眾所周知,建立和銷燬tcp連線的成本是非常高昂的(如果是https就更高),同時也增加了服務端的資源消耗。

基於以上的這些痛點,催生出了http/2。

HTTP/2

SPDY

http/2起源於谷歌的SPDY專案(沒錯,又是谷歌-_-),於 2009 年年中釋出,其主要目標是通過解決 HTTP/1.1 中廣為人知的一些效能限制來減少網頁的載入延遲(那些廣為人知的限制我在上面都提到了)。具體來說,這個專案設定的目標如下:

  • 頁面載入時間 (PLT) 減少 50%。
  • 無需網站作者修改任何內容。
  • 將部署複雜性降至最低,無需變更網路基礎設施。
  • 與開源社群合作開發這個新協議。
  • 收集真實效能資料,驗證這個實驗性協議是否有效。

到了2012 年,這個新的實驗性協議得到了 Chrome、Firefox 和 Opera 的支援,越來越多的大型網站(如 Google、Twitter、Facebook)和小型網站開始在其基礎設施內部署 SPDY。事實上,在被行業越來越多的採用之後,SPDY 已經具備了成為一個標準的條件。

觀察到這一趨勢後,HTTP 工作組 (HTTP-WG) 將這一工作提上議事日程,吸取 SPDY 的經驗教訓,並在此基礎上制定了官方“HTTP/2”標準。在擬定宣言草案、向社會徵集 HTTP/2 建議並經過內部討論之後,HTTP-WG 決定將 SPDY 規範作為新 HTTP/2 協議的基礎。2015 年初,IESG 審閱了新的 HTTP/2 標準並批准釋出。

 

2、HTTP2的壓力測試關注點

  現網中已經存在大量的基於HTTP2協議的WEB服務,對於HTTP2協議,瀏覽器訪問web服務存在較大的差異,主要體現在相同的併發量的情況下,WEB服務會受到突發性HTTP請求的衝擊。主要原因是對於瀏覽器訪問一個頁面,HTTP/1.1協議,瀏覽器最併發量控制在6個以內。但對於HTTP2的請求最高並量幾乎沒有限制,如下所示。

 

要對支援HTTP2協議的網站進行壓力測試,必須是基於HTTP/2協議的請求併發(一般支援HTTP2協議的WEB服務,都會同時支援HTTP/1.1,與客戶端之間建立連結時,必須進行握手,互方協商需要使用的協議,如果測試工具不支援HTTP/2協議,下發HTTP/1.1的協議請求,WEB伺服器也可以正常提供服務,這時測試的結果就不是你想要的結果)。

要想證明效能測試工具下的HTTP協議是HTTP/1.1還是HTTP2,可以通過抓包工具抓取server heloo的報文進行確認。如下所示:server hello報文中的ALPN  Next Protocol:h2 ,是判斷髮送HTTP請求協議版本的重要判斷依據。

 

 

 3、支援HTTP2協議的壓力測試工具

       國內常用的Jmeter,LoadRunner 12效能測試工具,這兩個均不支援HTTP2協議的請求。下圖是通過LR 12.55匯入chrome HAR包,傳送HTTP請求的抓包圖。報文中沒有ALPN  Next Protocol:h2的關鍵字(LR 沒有采用ie錄製指令碼的原因是ie不支援HTTP/2)。目前國內阿里PTS,騰訊WeTest,華為CPTS均不支援HTTP2協議。本文采用奇林軟體kylinTOP

 

 4、HTTP2壓力測試

4.1、錄製指令碼

      本次以指令碼錄製網站案採用:https://www.ustc.edu.cn/ (中國科學技術大學官網)

開啟HTTP2開關,點選確認,彈出如下對話方塊,輸入要錄製的URL

 

 

 錄製生成如下指令碼

 

 除錯指令碼

     除錯過程可以看到HTTP請求的瀑布圖,幾科所有HTTP請求都是同時併發。目前kylinTOP工具在處理HTTP/2協議的HTTP的請求併發模型依據請求的父子關係,按照一定的演算法進行併發。從並法的瀑布圖看,與HTTP2協議的標準相一致(HTTP2標準併發是按照儘可能的併發,除非兩個請求有依賴關係。最高併發可以達到300都有可能)。

 

 

 

 

 

 

&n