nginx、php-fpm、swoole HTTP/TCP压测对比

时间:2021-09-22 17:35:36

本次测试是在win7下docker环境中进行压测,共创建一个nginx容器、一个php-fpm容器和一个swoole容器,客户端请求nginx服务器,nginx接收用户访问请求并转发给php-fpm,php-fpm接收数据并发送数据给swoole服务器

软硬件:

  OS :boot2docker Linux
  cpu: i5-6500 单核
  内存:1G
  PHP Vsersion:7.2.9
  swoole:4.1.2

  nginx:1.12

  

nginx、php-fpm、swoole HTTP/TCP压测对比

均使用docker环境下进行ab压测并发100,1万次请求,结果如下:

nginx、php-fpm、swoole HTTP/TCP压测对比

压测数据表明,性能:swoole TCP 长连接 > SWOOLE HTTP > PHP-FPM,原因在于swoole创建的TCP连接在PHP请求结束或者调用$cli->close时并不会关闭,下一次执行connect调用时会复用上一次创建的连接,而HTTP是基于TCP连接的,如果连接被频繁地启动然后断开就会花费很多资源在TCP三次握手以及四次挥手上,效率比较低

具体压测数据如下:

1、swoole HTTP连接:

docker run --rm --net=host jordi/ab -n 10000 -c 100 http://test.epweike.net/

10000连接数并发100访问 只开启一个swoole client连接,qps:918

nginx、php-fpm、swoole HTTP/TCP压测对比

nginx、php-fpm、swoole HTTP/TCP压测对比

10000连接数并发100访问 ,开启1000个swoole client连接,qps:872

nginx、php-fpm、swoole HTTP/TCP压测对比

nginx、php-fpm、swoole HTTP/TCP压测对比

2、SWOOLE TCP连接

docker run --rm --net=host jordi/ab -n 10000 -c -k 100 http://test.epweike.net/

10000连接数并发100访问 只开启一个swoole client连接,qps:1733

nginx、php-fpm、swoole HTTP/TCP压测对比

nginx、php-fpm、swoole HTTP/TCP压测对比

10000连接数并发100访问 ,开启1000个swoole client连接,qps:1744

nginx、php-fpm、swoole HTTP/TCP压测对比

nginx、php-fpm、swoole HTTP/TCP压测对比

3、nginx+php-fpm

10000连接数并发100访问 ,不开swoole client连接,原生php输出,qps:115

nginx、php-fpm、swoole HTTP/TCP压测对比

nginx、php-fpm、swoole HTTP/TCP压测对比