基於kylinTOP工具的HTTP2壓力測試
- 2020 年 3 月 18 日
- 筆記
0.9
、1.0
、1.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起源於Google的SPDY項目(沒錯,又是Google-_-),於 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都有可能)。