天天看點

性能不遜Nginx的Gateway,性能測試大PK

作者:程式員紫龍

前言

性能不遜Nginx的Gateway,性能測試大PK

昨天的一文《基于Fasthttp實作的Gateway,性能媲美Nginx》, 給大家介紹了一個Gateway的開源Go語言項目;boot4go-gateway是用springcloud-gateway的功能方式以golang實作的一個元件,功能上對等springcloud-gateway,在項目放到github上之初,就有朋友關注了,提出意見,既然作為初衷,那麼這個産品的性能必須要可nginx進行一下比較, 簡單地通過頁面通路進行,不比nginx差,但是作為服務端産品,在多并發的情況下,進行壓力和性能負載測試,才能更客觀的進行兩者性能的比較。

性能不遜Nginx的Gateway,性能測試大PK

PK的環境

是以先通過jmeter進行了簡單的并發和壓力測試,jmeter單機,本版本測試沒有部署多台jmeter進行測試,畢竟是第一輪,先簡單的比較下,有意義再模拟更多的場景,是以隻規劃準備一單節點的jmeter進行壓力測試

第一版本測試試,還沒有非常全面地進行測試,

場景如下:

分别使用Nginx和Boot4go-gateway作為前端的反向代理,代理的目标機器是nginx的兩台http伺服器,

測試場景中的傳回資料使用了4種場景的資料包。

場景1: 預設檔案,index.html 45KB檔案大小, html檔案

場景2: 中型檔案 index-m.html 20KB檔案大小, html檔案

場景3: 小型檔案 index-s.html 5KB檔案大小,html檔案

場景4: 超小型檔案 index-xs.html 1KB檔案大小,html檔案

環境均搭建在同一個開發機器的虛拟機上的不同的docker容器裡。 由于gateway使用了etcd作為資料存儲,還有一個3個節點etcd叢集作為gateway的服務治理端,

Nginx均使用官方的latest作為鏡像, boot4go-gateway是golang實作,直接dockerfile制作成本地鏡像進行容器的部署, etcd使用3.5.1的官方鏡像, 三節點都是3.5.1的版本, 資料大小為100M左右

性能不遜Nginx的Gateway,性能測試大PK

壓測政策

環境都是安裝在自己的筆記本上的, 沒有壓太多量,最大600的并發數, 持續加壓的政策。

性能不遜Nginx的Gateway,性能測試大PK

測試環境

作為gateway的nginx配置,

upstream gateway {
  server 192.168.56.101:10081;
  server 192.168.56.101:10082;
}



    location / {
        # root   /usr/share/nginx/html;
        # index  index.html index.htm;
		proxy_pass http://gateway;
    }           

可以看到是最簡單的場景,作為gateway的nginx的開發端口是10080,通路的位址

http://192.168.56.101:10080, 反向代理到後面的 192.168.56.101:10081 和192.168.56.101:10082

性能不遜Nginx的Gateway,性能測試大PK

PK方boot4go-gateway的配置

boot4go-gateway有管理的界面,在界面裡進行配置,

性能不遜Nginx的Gateway,性能測試大PK

boot4go-gateway支援多域名多網址代理模式,這裡可以看到,使用192.168.56.101:9000進行代理,沒有開放ssl,和nginx同等環境,

性能不遜Nginx的Gateway,性能測試大PK

路徑同樣代理到後面的兩台伺服器 192.168.56.101:10081和192.168.56.101:10082, 路徑的映射是代理/nginx/下的請求,即 通路http://192.168.56.101:9000/nginx/index-s.html即可通路到192.168.56.101:10081/index-s.html。

性能不遜Nginx的Gateway,性能測試大PK

測試結果

一)大資料,45KB資料包,summary

Boot4go-Gateway

性能不遜Nginx的Gateway,性能測試大PK

Nginx

性能不遜Nginx的Gateway,性能測試大PK

PK結果

請求錯誤數相同,但是請求總量,Boot4o-Gateway多于Nignx,使得錯誤率明顯比Nginx降低,TPS相差不大,10的差距,不過是45KB的資料包,在receive bytes/sec上差距明顯,

二)中等資料,20KB資料包, Summary

Boot4go-Gateway

性能不遜Nginx的Gateway,性能測試大PK

Nginx

性能不遜Nginx的Gateway,性能測試大PK

PK結果

此資料包情況的測試下, 在TPS上相差依然不大,隻是在錯誤率上,Nginx的錯誤傳回達到了2000多,boot4go-gateway的錯誤數不到1000,錯誤率相差較大,一個在2%左右,一個已經下降到了1%以内。總請求書依然相差不多。

三)小資料 , 5KB資料包, Summary

Boot4go-gateway

性能不遜Nginx的Gateway,性能測試大PK

Nginx

性能不遜Nginx的Gateway,性能測試大PK

PK結果

此資料包測試情況下, 錯誤率都大幅下降,boot4go-gateway沒有錯誤,nginx錯誤降到了800左右,

四)精簡資料, 1KB資料包,Summary

Boot4go-gateway

性能不遜Nginx的Gateway,性能測試大PK

Nginx

性能不遜Nginx的Gateway,性能測試大PK

PK結果

精簡資料包情況下,Boot4go-gateway沒有錯誤,Nginx的錯誤下降到500以内,

此次為簡單的測試,隻是測試的get協定,沒有測試上傳資料,單單從資料下載下傳的情況上來看,boot4o-gatteay不遜色于nginx作為反向代理,而且在某些方面,還稍稍優于nginx,在逾時錯誤這塊還要再進一步仔細的去查找原因,boot4go-gateway是使用的fasthttp作為通訊底層的支援,反向代理作為背景伺服器的client,也是使用fasthttpclient作為http的通道,進而獲得較好的性能支援。

結束語

本篇文章,概要介紹了性能測試方案和測試結果,以及PK的結果,後面會有文章詳細的去解析性能測試的具體環節和分析過程。并且彙總一下,性能測試中對boot4go-gateway發現的一些bug及性能優化的過程。 請各位朋友持續關注。

性能不遜Nginx的Gateway,性能測試大PK