c++多线程实现反向代理 QPS 达到 Haproxy/Nginx 的 3 倍

2023-09-12 16:32:08 +08:00
 shaoyie

NiubiX.

项目地址

实验性项目,NiubiX 只提供反向代理功能,大家轻拍有不好的地方可以留言或提 issue/pr. 觉得好就点个 star ,我会持续完善它

与 Nginx/Haproxy 对比测试

Linux 5.19.0-1030-gcp #32~22.04.1-Ubuntu
Instacne 1 GCP cloud VM, 2 cores, 4GB RAM 10.146.0.2 (nginx,haproxy, niubix run at here)
Instacne 2 GCP cloud VM, 2 cores, 4GB RAM 10.146.0.3 (backend, wrk run at here)

nginx version config

nginx version: nginx/1.18.0 (Ubuntu)

server {
    listen       8082 reuseport;
    server_name  localhost;

    access_log  off;
    error_log off;

    location / {
        proxy_pass http://10.146.0.3:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

root         516       1  0 Aug24 ?        00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data  417322     516  0 12:13 ?        00:00:06 nginx: worker process
www-data  417323     516  0 12:13 ?        00:00:08 nginx: worker process

haproxy version config

HAProxy version 2.4.22-0ubuntu0.22.04.2 2023/08/14

listen niubix
    bind 0.0.0.0:8083
    mode http
    option forwardfor
    server s1 10.146.0.3:8080

ps -eLf | grep haproxy
root      449421       1  449421  0    1 15:11 ?        00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
haproxy   449423  449421  449423  0    2 15:11 ?        00:00:05 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
haproxy   449423  449421  449429  0    2 15:11 ?        00:00:05 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock

单独测试后端程序处理能力, 确保不存在吞吐量瓶颈

run at 10.146.0.2

wrk -t 2 -c 100 -d 10s  http://10.146.0.3:8080/xxx
Running 10s test @ http://10.146.0.3:8080/xxx
  2 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   520.95us  203.98us   4.09ms   68.03%
    Req/Sec    59.25k     2.68k   63.62k    52.50%
  1179133 requests in 10.00s, 173.17MB read
Requests/sec: 117888.45
Transfer/sec:     17.31MB

为了数据真实性,我只取了 1 次测试结果,连续对 3 个服务测试截图

对于 nginx 的数据声明一下:只有偶尔能跑到 1.7w 的 qps ,如果 proxy_pass http://10.146.0.3:8080; 换到 127.0.0.1:8080 ,qps 能到 9000 qps ,至于局域网内为什么这么低通过 strace 也没看到异常,而且 cpu 也通跑满,不知道它在干嘛

tcpdump tcp port 8080 抓包查看 niubix 实际数据,包含 X-Real-IP, XFF ,并且响应在微秒级

目前具备功能:

测试声明

接下来开发计划

7150 次点击
所在节点    程序员
125 条回复
1423
2023-09-12 16:55:43 +08:00
Nginx 1K tps?
我是秦始皇,信我
xiaooloong
2023-09-12 17:31:35 +08:00
nginx 上 upstream ,开 http 1.1 和 keepalive 试下
lovelylain
2023-09-12 18:47:42 +08:00
nginx 进程数?
sadfQED2
2023-09-12 19:00:21 +08:00
我宁愿信#1 是秦始皇,我都不信你这玩意能吊打 ha 和 nginx
nmap
2023-09-12 19:10:25 +08:00
测出这种荒唐的结果,首先应该是怀疑自己的问题,而不是感觉发现了新大陆
ugpu
2023-09-12 19:33:42 +08:00
不知道为什么要写这么个标题.
如果不是为了喧哗惑众 那么请看看 nginx 的配置. 以及测试姿势是否正确.
shaoyie
2023-09-12 19:43:16 +08:00
@ugpu 标题有什么问题?测试结果确实是这样,nginx 我也不知道为什么在我这边特别不稳定,只是偶尔能跑出过万的 qps ,但是 haproxy 比较稳定,haproxy 在性能上略高 nginx 这是事实,我测出来的比 haproxy 高出很多,我不可以这样写吗?
shaoyie
2023-09-12 19:43:51 +08:00
@nmap 是不是新大陆,那也是我一行一行码出来的代码跑出来的。
shaoyie
2023-09-12 19:44:18 +08:00
@sadfQED2 认真看,我说的是仅限反向代理功能
shaoyie
2023-09-12 19:44:48 +08:00
@lovelylain 上边不是展示 nginx 的进程数了吗,也是 2 个,开了 reuseport
shaoyie
2023-09-12 19:45:29 +08:00
@xiaooloong wrk 就是长链接的,如果用 ab 短链接测试,数据更差
shaoyie
2023-09-12 19:46:13 +08:00
@ugpu 配置我贴出来了,你觉得哪里有问题可以指出来我再去测
shaoyie
2023-09-12 19:50:24 +08:00
刚注册不久,不知道 V2EX 上边戾气这么重,我开头就说了,是实验性项目,我一没收你们钱,二没吃你们家大米,遇到新鲜事物,上来就是批评,不应该是先确定是不是,再问为什么,最后研究怎么做到的
deorth
2023-09-12 19:52:52 +08:00
因为没空
u20237
2023-09-12 19:57:29 +08:00
nginx 有那么弱吗?
shaoyie
2023-09-12 20:00:26 +08:00
@u20237 确实没搞懂在 gcp 上为啥这么不稳定
shaoyie
2023-09-12 20:37:55 +08:00
@deorth 烂鸟蛋
kkk9
2023-09-12 21:07:02 +08:00
首先 nginx 肯定没那么弱,其次 ha 也不是这样测的,最后其实我啥也不懂
dasf53adf
2023-09-12 21:23:55 +08:00
不明觉历,希望有大佬出来做个二次测试验证一下。
ugpu
2023-09-12 21:45:06 +08:00
@shaoyie 不会 我啥也不懂.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/973075

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX