QPS/TPS压力测试3个框架3种调用对比(phpfpm,golang,hyperf),(text,mysql.redis)
测试3种不同程序的负载
- 前端:Nginx21.6
- 后端:php-fpm7.4,go1.18,hyperf-7.4-swoole-3.15
单机测试
代码内读文本-1Kb
程序 |
QPS-并发请求 |
TPS |
成功率 |
网络使用率 |
PHP-FPM |
3000 |
3000 |
99.8% |
30MB |
3500 |
3500 |
98% |
33MB |
GoLang |
3500 |
3500 |
99.97% |
39Mb |
4000 |
4000 |
99.6% |
48Mb |
Hyperf |
3500 |
3500 |
99.99% |
32MB |
4000 |
3800 |
99.2% |
46Mb |
- 1Kb接口返回测试,最大并发PHP-FPM:3000,GO:4000,hyperf:3800
- php-fpm随着测试时间加长,错误率和影应时间逐步增长,go和hyperf则相反响应时间加快,成功率增高。
- hyperf在响应时RT上比golang性能更好,网络使用率也略优于go
调用mysql读-10Kb数据
- mysql8.0.32,1主+2从 proxysql代理
程序 |
QPS-并发请求 |
TPS |
成功率 |
网络使用率 |
PHP-FPM |
500 |
500 |
75% |
10MB |
GoLang |
1000 |
1000 |
100% |
51Mb |
1200 |
1200 |
97.8% |
82Mb |
Hyperf |
1000 |
1000 |
100% |
59MB |
1200 |
1200 |
97.7% |
82Mb |
- 在mysql处理上go和hyperf都是php-fpm的一倍性能
调用Redis读-10Kb数据
程序 |
QPS-并发请求 |
TPS |
成功率 |
网络使用率 |
PHP-FPM |
500 |
500 |
99.9..% |
30MB |
600 |
600 |
97.6% |
35Mb |
GoLang |
1000 |
1000 |
100% |
51Mb |
1200 |
1200 |
99.3% |
78Mb |
Hyperf |
1000 |
1000 |
100% |
59MB |
1200 |
1200 |
99.8% |
78Mb |
集群swarm测试
双机集群-调用mysql读-10Kb数据
程序 |
QPS-并发请求 |
TPS |
成功率 |
网络使用率 |
PHP-FPM |
1000 |
950 |
79% |
43Mb+36Mb |
GoLang |
2000 |
2000 |
100% |
86Mb+81MB |
Hyperf |
2000 |
2000 |
100% |
86Mb+81MB |
双机集群-调用mysql读-50Kb数据
程序 |
QPS-并发请求 |
TPS |
成功率 |
网络使用率 |
PHP-FPM |
400 |
400 |
99.99% |
GoLang |
500 |
500 |
100% |
Hyperf |
500 |
500 |
100% |
600 |
600 |
75% |
- 双机集群的负载是单机的一倍,但最好按0.8的比例计算扩容