Nginx http2 應用感想

Nginx 1.9.6 在上週出來了,直接支援 HTTP 2(注意,openssl得是1.0.2版以上),然後不小心又看了Http2Demo,裡面的測試是用一了張切了48張小圖的相片,測了一下,嗯,HTTP 2好像比較快,二話不說,馬上把公司的網站直接升級到 1.9.6,試了一下,怎麼好像沒有快多少?


不多說,馬上測試一下(用一個有88張小切圖的網頁,使用反向代理,在無Cache的情況下),先來個HTTP連線測一下(用恐龍妹測的)

花了305微秒,然後再測一下 HTTP 2(over TLS)連線,

啥!居然花了636微秒,這是什麼回事!
趕快回去看Nginx是怎麼說的!

HTTP2使用單一連線,從上面的圖大概可以感受到,HTTP取得88張圖是同時開多個連線向主機要圖,而HTTP2則使用單一連線用多工的方式向主機要圖,也就是在人少的時候,主機應付的來的情況下,是同時給多張圖,而HTTP2則是把資料通過單一通道傳輸。

所以實際上 HTTP2會耗用比較多的記憶體,而下載大檔案或是媒體串流時,多工並無幫助,更重要的一點是HTTP2 的Hand Shake會花比較長的時間,而且更重要的是Nginx Http2一定要Over TLS,我相信加解密,不可避免地會耗用更多時間。

另外影響速度的關鍵是網路的往返(round trip)時間,以下是NGINX的實測狀況
可以看出,HTTP2 在須要加密傳輸時確實比較快,但比起單純的HTTP確實較慢。
或許有人會覺得,在大量用戶的時侯,單一連線會比較節省資源,但是我覺得有以下點須要加以考慮:
  1. NGINX是號稱可以抵擋DDOS攻擊的,大量用戶連線不致於造成問題
  2. 瀏覽器本身的Cache,Nginx會為每一個Resource加上ETag,下次再來時不會再次存取
  3. 不是每種瀏覽器都支援HTTP 2(其實不用太擔心,除了IE,大部份主流的瀏覽器都支援,不支援頂多回到HTTPS)
所以結論是
  1. 須要加密的網頁(像登錄、個資等敏感資料),請直升HTTP 2(不支援的瀏覽器直接回HTTPS)
  2. 非敏感的資料,還是維持原來的HTTP吧!畢竟速度較快(Google卻不這樣認為,她們把所有的Google網頁都用了HTTP 2/S通訊)
PS:
  1. 有個瀏覽器外掛(HTTP/2 and SPDY indicator)可以看目前的連線種類,有FirefoxChrome
  2. 根據這裡說法,目前只有Opera與Safari 9 支持HTTP/2 without TLS
  3. 2018/7 原來測不快在那裡的原因,是因為我沒有使用PUSH的緣故

留言

這個網誌中的熱門文章

企業人員的統一管理-FreeIPA學習筆記

證交所最佳五檔的程式解析

Postgresql HA