Asf 性能测试

机器配置: 8 CPU, 16G 内存, 操作系统: CentOS release 6.2 (Final), 磁盘: STAT

PHP 7.0.19 (cli) (NTS), with Zend OPcache v7.0.19, with pm.max_children = 12, GCC 4.4.7 (Recommended GCC 4.8+)


测试描述

简单做了并发100, 请求10000次与原生PHP进行性能对比 (ab -c100 -n10000)

原生PHP文件 php.php

<?php
class IndexController
{
    public function actionIndex()
    {
        echo 'Php Hello world';
    }
}

$controller = new IndexController();
$controller->actionIndex();

Asf 入口文件 asf.php

<?php
$configs =  array(
    'asf' => array(
        'root_path' => '/tmp/asf/project/modules',
    )
);

$handle = new Asf_Application($configs);
$handle->run();

Asf 默认控制器文件 Index.php

<?php
class IndexService
{
    public function indexAction()
    {/*{{{*/
        echo 'Asf Hello world';
    }/*}}}*/
}

压测结果

并发100, 请求10000次, 原生的PHP

Document Path:          /php.php
Document Length:        11 bytes

Concurrency Level:      100
Time taken for tests:   0.695 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1480888 bytes
HTML transferred:       110066 bytes
Requests per second:    14378.64 [#/sec] (mean)
Time per request:       6.955 [ms] (mean)
Time per request:       0.070 [ms] (mean, across all concurrent requests)
Transfer rate:          2079.41 [Kbytes/sec] received

Connection Times (ms)
                min  mean[+/-sd] median   max
Connect:        0    0   0.7      0       6
Processing:     1    7   2.7      6      29
Waiting:        0    6   2.7      6      27
Total:          3    7   2.7      6      30

Percentage of the requests served within a certain time (ms)
    50%      6
    66%      6
    75%      8
    80%      8
    90%     12
    95%     12
    98%     13
    99%     14
   100%     30 (longest request)

并发100, 请求10000次, Asf 框架

Document Path:          /asf.php
Document Length:        16 bytes

Concurrency Level:      100
Time taken for tests:   0.746 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Non-2xx responses:      10000
Total transferred:      1600000 bytes
HTML transferred:       160000 bytes
Requests per second:    13412.23 [#/sec] (mean)
Time per request:       7.456 [ms] (mean)
Time per request:       0.075 [ms] (mean, across all concurrent requests)
Transfer rate:          2095.66 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.8      0       5
Processing:     1    7   3.4      6      27
Waiting:        1    7   3.4      6      27
Total:          3    7   3.3      6      27

Percentage of the requests served within a certain time (ms)
    50%      6
    66%      8
    75%      9
    80%      9
    90%     12
    95%     13
    98%     15
    99%     20
    100%     27 (longest request)

See the following illustration / 图示

pie chart

Conclusion / 得出结论

压测结论

没有挑取漂亮的数据, 或者配置一个为了压测的最优环境. 只是简单地采用以大部分web机器使用的环境进行测评。

这里只是给出了一种测试方法, 通过多次不同并发数测试结果得知, Asf 与原生 PHP 做比较, RPS消耗 6% ~ 15%。CPU消耗 5% ~ 10%。

业务开发速度结论

在多个项目中实际得知, 采用 Asf 框架开发业务, 代码量能节约 20% ~ 25%。假如一个项目需要开发4天 x 8小时, 能节约出整整1天 x 8小时的工作时间。