目前有很多提供Go語言HTTP應用服務的方法,但其中最好的選擇取決于每個應用的實際情況。目前,Nginx看起來是每個新項目的標準Web服務器,即使在有其他許多不錯Web服務器的情況下。然而,在Nginx上提供Go應用服務的開銷是多少呢?我們需要一些nginx的特性參數(vhosts,負載均衡,緩存,等等)或者直接使用Go提供服務?如果你需要nginx,最快的連接機制是什么?這就是在這我試圖回答的問題。該基準測試的目的不是要驗證Go比nginx的快或慢。那將會很愚蠢。
下面是我們要比較不同的設置:
Go HTTP standalone (as the control group) Nginx proxy to Go HTTP Nginx fastcgi to Go TCP FastCGI Nginx fastcgi to Go Unix Socket FastCGI
硬件
因為我們將在相同的硬件下比較所有設置,硬件選擇的是廉價的一個。這不應該是一個大問題。
Samsung 筆記本 NP550P5C-AD1BR Intel Core i7 3630QM @2.4GHz (quad core, 8 threads) CPU caches: (L1: 256KiB, L2: 1MiB, L3: 6MiB) RAM 8GiB DDR3 1600MHz軟件
Ubuntu 13.10 amd64 Saucy Salamander (updated) Nginx 1.4.4 (1.4.4-1~saucy0 amd64) Go 1.2 (linux/amd64) wrk 3.0.4設置
內核
只需很小的一點調整,將內核的limits調高。如果你對這一變量有更好的想法,請在寫在下面評論處:
代碼如下:fs.file-max 9999999
fs.nr_open 9999999
net.core.netdev_max_backlog 4096
net.core.rmem_max 16777216
net.core.somaxconn 65535
net.core.wmem_max 16777216
net.ipv4.ip_forward 0
net.ipv4.ip_local_port_range 1025 65535
net.ipv4.tcp_fin_timeout 30
net.ipv4.tcp_keepalive_time 30
net.ipv4.tcp_max_syn_backlog 20480
net.ipv4.tcp_max_tw_buckets 400000
net.ipv4.tcp_no_metrics_save 1
net.ipv4.tcp_syn_retries 2
net.ipv4.tcp_synack_retries 2
net.ipv4.tcp_tw_recycle 1
net.ipv4.tcp_tw_reuse 1
新聞熱點
疑難解答