天天看點

負載均衡SLB壓測為何不符合預期?壓測環境準備為什麼HTTPS壓測性能不及HTTP?為什麼SLB并發上不去?總結

負載均衡(Server Load Balancer)是對多台雲伺服器進行流量分發的負載均衡服務。負載均衡可以通過流量分發擴充應用系統對外的服務能力,通過消除單點故障提升應用系統的可用性。

大多數公司購買SLB後會進行壓測來檢測其性能是否達标,經常會發現壓測不符合預期的情況,此文針對SLB7層監聽部分壓測場景進行分析。

壓測環境準備

  • 壓測用戶端(使用 Apache Benchmark(簡稱ab) 壓測)
  • 性能保障型SLB
  • 壓測服務端(Nginx web server)

為什麼HTTPS壓測性能不及HTTP?

如下圖所示,使用HTTP壓測1000請求5個并發的時候qps是331.7,但是使用HTTPS壓測的時候qps隻有34qps,很多人認為是SLB對HTTPS的處理性能不及HTTP。

負載均衡SLB壓測為何不符合預期?壓測環境準備為什麼HTTPS壓測性能不及HTTP?為什麼SLB并發上不去?總結

首先可以在SLB控制台監控界面檢視是否有丢棄連接配接和丢棄流量,如果沒有丢棄連接配接和丢棄流量說明并未達到SLB的性能上限。

接着可以檢視SLB 7層通路日志,看下request_time,通過下圖可以看到不管是HTTP還是HTTPS,SLB的響應時間都非常快,且request_time并沒有明顯增大的情況,響應的狀态碼也都是200,從此可以判斷SLB後端伺服器沒有達到瓶頸,SLB本身也沒達到瓶頸.

負載均衡SLB壓測為何不符合預期?壓測環境準備為什麼HTTPS壓測性能不及HTTP?為什麼SLB并發上不去?總結

那為什麼會出現HTTPS壓測性能不及HTTP的感覺呢?是因為AB壓測的時候其實是串行進行的,當完成一個請求後才會進行下一個請求,HTTPS因為要進行SSL握手且是加密互動的,是以在SSL握手階段耗時的時間會導緻總體的QPS下降。下面通過抓包分析。可以看到HTTP的單個請求總的互動時間隻有十幾毫秒,但是HTTPS單個請求總的互動時間需要200多毫秒,這就導緻用戶端每秒發送的請求數量變少,是以這種情況并非是SLB處理不過來導緻性能不行。

負載均衡SLB壓測為何不符合預期?壓測環境準備為什麼HTTPS壓測性能不及HTTP?為什麼SLB并發上不去?總結
負載均衡SLB壓測為何不符合預期?壓測環境準備為什麼HTTPS壓測性能不及HTTP?為什麼SLB并發上不去?總結

如果遇到這種情況可以使用HTTP長連接配接壓測或者增加多個用戶端來壓測,這時候SLB的QPS可以進一步提升。

為什麼SLB并發上不去?

壓測用戶端壓測發現SLB并發始終上不去。當用戶端發送5000個請求,5個并發的時候總的qps在280左右。5個并發相當于模拟5個使用者并發請求,但是每個使用者自己的請求都是串行的,隻有完成一個請求後才會發第二個請求。

通過netstat可以檢視同一時刻差不多會有5個TCP連接配接發生請求

負載均衡SLB壓測為何不符合預期?壓測環境準備為什麼HTTPS壓測性能不及HTTP?為什麼SLB并發上不去?總結
負載均衡SLB壓測為何不符合預期?壓測環境準備為什麼HTTPS壓測性能不及HTTP?為什麼SLB并發上不去?總結

如果SLB并未發生丢包,丢棄連接配接,沒有響應異常狀态碼且7層通路日志檢視request_time和upstream_request_time均比較小,那麼可以增加用戶端并發來提升qps,也可以增加多個用戶端。

總結

如果壓測SLB的時候感覺SLB性能不及預期可以通過下面幾個資訊判斷

  1. 控制台SLB監控界面檢視SLB是否有丢棄流量,丢棄連接配接
  2. 如果是7層監聽,可以開通7層通路日志,檢視壓測時候狀态碼是否都是200,是否有異常狀态碼,例如5xx,4xx等
  3. 可以在7層通路日志裡面檢視upstream_request_time和request_times 是否有比較大的情況。

如果以上情況均沒有發現異常,那可以增加壓測用戶端來提升qps,筆者多次遇到因為壓測用戶端(使用ab,jmeter等)問題,導緻壓測時候SLB的性能不及預期。

繼續閱讀