MixPHP 与 Phalcon 性能对比测试 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
onanying
V2EX    PHP

MixPHP 与 Phalcon 性能对比测试

  •  
  •   onanying Sep 19, 2017 5459 views
    This topic created in 3143 days ago, the information mentioned may be changed or developed.

    今天完成了 MixPHP 的 Mysql/Redis 进程级长连接处理,想着做一下压测,试试性能,于是就拿公司在使用的 Phalcon C 扩展框架对比一下,对比后的结果吓我一跳,感慨 MixPHP 极简架构 + 基于 Swoole 的 MixHttpd + 进程级长连接 带来了如此强大的性能。

    测试统计在最后面。

    硬件

    虚拟机:4 核 1G

    环境

    [ Phalcon ]

    Apache worker 模式,mpm 配置如下:

    这个配置基本上不会有连接上的瓶颈了,这样测试才公平。

    <IfModule worker.c> ServerLimit 50 ThreadLimit 200 StartServers 5 MaxClients 5000 MinSpareThreads 25 MaxSpareThreads 500 ThreadsPerChild 100 MaxRequestsPerChild 0 </IfModule> 

    [ MixPHP ]

    MixHttpd 配置如下:

    4 个线程处理连接,8 个进程处理 PHP 代码。

    reactor_num = 4 worker_num = 8 

    源代码

    请求数据表的第一行,并输出 json。

    [ Phalcon ]

    public function actionIndex() { $this->view->disable(); $query = $this->modelsManager->executeQuery("SELECT * FROM Test")->getFirst(); $data = $query->toArray(); header("Content-Type:application/json;charset="); echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); } 

    [ MixPHP ]

    function actionIndex() { $rows = \Mix::app()->rdb->createCommand("SELECT * FROM `test`")->queryOne(); return $rows; } 

    普通测试

    工具为 Apache 的 ab 命令。

    [ Phalcon ]

    100 并发,请求全部成功,QPS 为 174.39

    C:\Server\apache24vc11\bin>ab -n 2000 -c 100 http://www.t.com/index/test This is ApacheBench, Version 2.3 <$Revision: 1757674 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.t.com (be patient) Completed 200 requests Completed 400 requests Completed 600 requests Completed 800 requests Completed 1000 requests Completed 1200 requests Completed 1400 requests Completed 1600 requests Completed 1800 requests Completed 2000 requests Finished 2000 requests Server Software: Apache/2.2.32 Server Hostname: www.t.com Server Port: 80 Document Path: /index/test Document Length: 631 bytes Concurrency Level: 100 Time taken for tests: 11.468 seconds Complete requests: 2000 Failed requests: 0 Total transferred: 1692000 bytes HTML transferred: 1262000 bytes Requests per second: 174.39 [#/sec] (mean) Time per request: 573.422 [ms] (mean) Time per request: 5.734 [ms] (mean, across all concurrent requests) Transfer rate: 144.08 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 2 3.6 1 55 Processing: 27 559 452.9 426 2604 Waiting: 26 555 453.2 422 2603 Total: 28 560 452.8 428 2604 Percentage of the requests served within a certain time (ms) 50% 428 66% 598 75% 717 80% 819 90% 1238 95% 1538 98% 1868 99% 2103 100% 2604 (longest request) 

    [ MixPHP ]

    100 并发,请求全部成功,QPS 为 637.81

    C:\Server\apache24vc11\bin>ab -n 2000 -c 100 http://www.ve.com:9501/ This is ApacheBench, Version 2.3 <$Revision: 1757674 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.ve.com (be patient) Completed 200 requests Completed 400 requests Completed 600 requests Completed 800 requests Completed 1000 requests Completed 1200 requests Completed 1400 requests Completed 1600 requests Completed 1800 requests Completed 2000 requests Finished 2000 requests Server Software: swoole-http-server Server Hostname: www.ve.com Server Port: 9501 Document Path: / Document Length: 613 bytes Concurrency Level: 100 Time taken for tests: 3.136 seconds Complete requests: 2000 Failed requests: 0 Total transferred: 1566000 bytes HTML transferred: 1226000 bytes Requests per second: 637.81 [#/sec] (mean) Time per request: 156.787 [ms] (mean) Time per request: 1.568 [ms] (mean, across all concurrent requests) Transfer rate: 487.70 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.7 1 10 Processing: 88 149 22.2 151 209 Waiting: 26 146 26.9 150 207 Total: 89 150 22.1 152 209 Percentage of the requests served within a certain time (ms) 50% 152 66% 160 75% 165 80% 167 90% 175 95% 182 98% 192 99% 198 100% 209 (longest request) 

    暴力测试

    [ Phalcon ]

    1000 并发,由于响应太慢,服务器卡死了很久,不得不手动终止,执行成功 5139,失败 8,QPS 为 3.77

     C:\Server\apache24vc11\bin>ab -n 10000 -c 1000 http://www.t.com/index/test This is ApacheBench, Version 2.3 <$Revision: 1757674 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.t.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Server Software: Apache/2.2.32 Server Hostname: www.t.com Server Port: 80 Document Path: /index/test Document Length: 631 bytes Concurrency Level: 1000 Time taken for tests: 1364.772 seconds Complete requests: 5139 Failed requests: 8 (Connect: 0, Receive: 0, Length: 8, Exceptions: 0) Total transferred: 4388782 bytes HTML transferred: 3275767 bytes Requests per second: 3.77 [#/sec] (mean) Time per request: 265571.594 ms] (mean) Time per request: 265.572 [ms] (mean, across all concurrent requests) Transfer rate: 3.14 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 6 118.5 1 3044 Processing: 14 76341 202529.3 16190 1363728 Waiting: 12 75306 202698.3 15302 1363726 Total: 14 76346 202529.0 16191 1363729 Percentage of the requests served within a certain time (ms) 50% 16190 66% 26254 75% 45141 80% 58735 90% 150683 95% 399760 98% 946039 99% 1294335 100% 1363729 (longest request) 

    [ MixPHP ]

    1000 并发,请求全部成功,QPS 任然高达 561.51

    C:\Server\apache24vc11\bin>ab -n 10000 -c 1000 http://www.ve.com:9501/ This is ApacheBench, Version 2.3 <$Revision: 1757674 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.ve.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: swoole-http-server Server Hostname: www.ve.com Server Port: 9501 Document Path: / Document Length: 613 bytes Concurrency Level: 1000 Time taken for tests: 17.809 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 7830000 bytes HTML transferred: 6130000 bytes Requests per second: 561.51 [#/sec] (mean) Time per request: 1780.914 [ms] (mean) Time per request: 1.781 [ms] (mean, across all concurrent requests) Transfer rate: 429.36 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.9 1 12 Processing: 1211 1642 98.5 1676 1833 Waiting: 368 1343 306.3 1448 1774 Total: 1211 1644 98.6 1677 1836 Percentage of the requests served within a certain time (ms) 50% 1677 66% 1694 75% 1702 80% 1705 90% 1718 95% 1729 98% 1748 99% 1769 100% 1836 (longest request) 

    结论

    MixPHP 以压倒性的性能优势 KO Phalcon。

    | 框架 | 并发数 | 失败数 | QPS | | MixPHP | 100 并发 | 0 | 637.81 | | Phalcon | 100 并发 | 0 | 174.39 | | 框架 | 并发数 | 失败数 | QPS | | MixPHP | 1000 并发 | 0 | 561.51 | | Phalcon | 1000 并发 | 8 | 3.77 | 
    8 replies    2017-09-24 12:00:26 +08:00
    sagaxu
        1
    sagaxu  
       Sep 19, 2017
    Phalcon 数据库开长连接了吗?
    gouchaoer
        2
    gouchaoer  
       Sep 20, 2017 via Android
    phalcon 只能在没有 io 的 hello-world 里性能爆表,在正常的有 session/sql 之类的 io 的业务中和纯 php 性能差别很小,有人做了实验提给 phalcon 社区然后社区也很吃惊。。。

    所以我的理解是主要瓶颈还是 io,把 io 弄成异步也好协程也好就能大幅度提高性能。。。。至于 mysql 的连接池问题,我记得有 2 倍不到的 qps 差距,并不大
    abccccabc
        3
    abccccabc  
       Sep 21, 2017
    @gouchaoer 你说的 phalcon 这块 session/sql 在那个贴子上呀,我也看看。
    onanying
        4
    onanying  
    OP
       Sep 22, 2017
    @sagaxu Phalcon 并没有开长连接,框架本身没有提供长连接,不过我认为 mysql 连接数在这个测试中,应该不是瓶颈。
    onanying
        5
    onanying  
    OP
       Sep 22, 2017
    @gouchaoer 你说到点子上了,哈哈
    sagaxu
        6
    sagaxu  
       Sep 22, 2017
    @onanying
    https://docs.phalconphp.com/en/latest/db-layer#connecting-to-databases
    https://github.com/phalcon/cphalcon/blob/master/phalcon/db/adapter/pdo.zep

    Phalcon 本身没有长连接,但 PDO 有,建议还是测试一下有无长连接时的性能差距
    mingyun
        7
    mingyun  
       Sep 23, 2017
    看安装要求里 https://www.kancloud.cn/onanying/mixphp1/403489,不装 Swoole 也可以吧
    onanying
        8
    onanying  
    OP
       Sep 24, 2017
    @mingyun 在 LNMP/LAMP 下不需要 swoole 的
    About     Help     Advertise     Blog     API     FAQ     Solana     5674 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 01:36 PVG 09:36 LAX 18:36 JFK 21:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86