测试3种不同程序的负载

  • 前端:Nginx21.6
  • 后端:php-fpm7.4,go1.18,hyperf-7.4-swoole-3.15

单机测试

  • docker部署nginx

代码内读文本-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
  • 读数据库 redis性能略高于mysql

集群swarm测试

双机集群-调用mysql读-10Kb数据

  • 域名使用指向2台服务器的公网ip
程序 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的比例计算扩容