這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
聲明:這裡的測試架構都是很常用的架構,不去跟一些奇葩但是所謂效能極高的架構進行對比
由於我們在項目中大量使用Iris和nginx這兩個Web架構(純Go語言實現,零記憶體拷貝),同時也聽過很多人問Go的Http效能對比nginx、對比nodejs到底如何,有鑒於此,今天我們就來做一個Web架構效能真實比拼。
測試環境圖:
下面從多個維度對4個架構進行對比:Nginx VS Nginx-php-fpm VS Iris VS nodejs-Express
一、 Nginx
並發壓力測試100 - 100K
第一張圖是在不同並發壓力下,每秒處理的請求數
第二張是每秒吞吐的資料量
第三張是99.9%、平均、標準方差的延遲統計,可以看出有0.01%的請求延遲在2秒左右
第四張是單線程統計
(這些圖後面不會再解釋,請大家自行對比)
這張圖是soccket錯誤和請求總數的對比,這裡的比例是100K / 3.5M
二、Nginx-Php-Fpm
三、Iris(Golang)
四、Express-Nodejs
總結:
因為其它的評測往往對比的是Go最慢的架構之一 --標準庫,因此這裡對比了另外一個常用的最快的架構iris。
從上面圖可以看出,Iris和Nginx的速度、請求延遲、吞吐、socket錯誤率都是差不多的,在延遲方面iris的表現甚至更好,nginx 最大2秒,iris 0.2-0.3秒
nginx-php的並發數是不錯的,但是在並發超過數百後,錯誤率明顯上升的非常高
Express這個結果我不知道為什麼,可能是沒有調優的原因?(這四個架構都沒有進行調優)
最後再對比一下二次開發難度,iris因為是基於go的,因此非常非常非常簡單,而且二次開發效率非常高,nginx用lua可以做一些事情,但是總是沒有直接用同一種語言方便,而且用lua可能存在一些缺陷;Express不清楚,不評價,但是go的網路編程模型應該是比回調的方式簡單很多的。