存档

2015年10月 的存档

ab测试swoole和ngixn+php-fpm对比

2015年10月29日 没有评论

最近由于公司项目需要,要将一些原来的业务提取分离出来做成服务的模式供调用,目前我们的解决方案是使用韩天峰大大的swoole框架来解决这个问题。swoole这个框架虽然不算是一个新的东西,但是目前使用的其实还真不太多,在上一家做游戏的公司,我接触到了swoole,但是一致没有机会实用,所以一直不知道这个东西到底有多犀利。公司有几位做php的同事,不过他们一方面公司的项目比较近,需要他们去做,另一方面以前我对swoole也有过简单的接触,实话是说挺喜欢这个东西的。又花了近一周的时间来了解swoole,今天用swoole写的一个短信发送的项目就基本完成了,就用ab做了一些swoole测试,同时做了一些nginx的测试。swoole卓越的性能让我惊呆了,发现php原来也可以做这么强大多工作,感觉php的春天来了!

说了这么多废话,看一下swoole和nginx的性能测试对比吧。我这里就只给出ngixn测试的脚本代码,就是一个简单的mysql插入,而swoole那边是swoole框架搭建的一个server,用来处理收到的各种请求多,里面包含http协议头部和body部分的解析,以及请求的验证,最终是短信记录和发送。不过由于发送短信要收费,所以测试时把发送短信功能去掉,只有入库纪录功能。

nginx测试脚本

<?php
$link = mysql_connect("127.0.0.1","root","") or die(mysql_error());
mysql_set_charset("utf8");
mysql_select_db("sql_test");
$sql = "INSERT INTO ab_test (`msg`,`record_time`) VALUE(\"".uniqid()."itest\ ",\"".date("Y-m-d H:i:s”).”\”)”;
$result = mysql_query($sql);
var_dump($result);

swoole部分的代码由于设计公司业务和也比较多就不上了,只贴出nginx和swoole pk的测试数据了。

测试环境

os:centos7(mac pro的虚拟机里面装的centos7)

mem:4G(虚拟设置的4G,free查看时发现不到4G)

disk:固态硬盘(其实这里的影响最大是mysql的写入)

nginx 环境下就是上面的代码,但是swoole 是验证请求以后直接返回,由于我们swoole里面mysql和http请求都是异步处理,所以返回速度要比阻塞的nginx+fpm效率要高很多(nginx并不阻塞,关键是fpm和mysql).

10000请求1000并发

nginx的表现

nginx_10000_1000

swoole的表现

swoole_10000_1000

10000请求1500的并发

nginx的表现

nginx_10000_1500

swoole的表现

swoole_10000_1500

测试数据不难看出nginx+php-fpm模式在1000并发的时候就有数百多失败请求你,而且请求时间 用了75秒,而swoole只有12秒。我们再看一下qps参数(Requests per second)参数,由于1500的时候nginx此时全部返回500已经不可用,那就拿1000并发来看,nginx的在100多,swoole的达到了800多,而swoole在1500并发时候QPS也是800+。1500并发的时候虽然用时都差不多,但是nginx这使用失败率超过97%了,这个失败nginx几乎不可用,而swoole还是出色完成了任务。你可能会说swoole是直接返回,异步处理中可能也有失败的吧?很遗憾,我对比了数据表纪录,swool以100%的完成率全部完成了任务。

当然就目前来看1500还不是swoole的瓶颈,我在做2000并发测试时ab工具出了一些问题就没有再做。如果以后有机会就把它补上!

swoole,phper的春天!

分类: PHP 标签: ,