横向压力测试:Ruby on Rails PK CakePHP(1)

Ruby on Rails以优雅的MVC架构闻名,这个架构如此诱人和美丽,而CakePHP则是PHP开发中常用的框架之一。如果你不想束缚于传统的PHP的砖头式开发,那么你可以尝试转向MVC架构,不过Rails的性能和部署问题一直让人担心。

两者对比的话题在网上众说纷纭,很少见到客观而有说服力的论证和充分模拟实际环境下的压力测评。作为架构选型的重要决定,我们既不能人云亦云,更不可凭空臆想,一定要有充分的测试数据才能帮助做出正确的决定。

心动不如行动,立刻着手安排了仿真环境测试。第一步是设计测试方案:

压力测试的目标集中在Ruby On Rails和CakePHP的效率,所以采用同样的Nginx生产环境,但避开所有数据库操作以避免瓶颈转嫁到数据库影响结果。

代码的主要部分都是通过输出128000个4位的十进制随机数,来模拟总计约500KB的页面数据输出。调用的指令都很基本,对脚本测试来说很公平。

不过既然是虚拟高压力测试,实际环境中数据库读写等操作的时间开销应该有一个仿真替代,所以通过Sleep 200ms来仿真具有高度数据压力的服务端。当然我们都知道Sleep是没有真实的cpu开销的,所以不会影响测试结果的公平。

测试工具使用经典的ApacheBench。先后测试10并发100请求(-c 10 -n 100) 的中等压力,和200并发5000请求(-c 200 -n 5000)高压测试。

环境

    OS:FreeBSD8.1 CPU:Intel4核心Core2 RAM:4GB内存 PHP环境:nginx+php-fpm(5.3.3)+APC Rails环境:nginx+passenger+Ruby(1.8.7)onRails(3.0.0) 所有软件均使用ports安装

fpm的优化配置:

    pm.max_children=1000pm.start_servers=20pm.min_spare_servers=5pm.max_spare_servers=1000

passenger的优化配置(nginx.conf):

passenger_max_pool_size 300;//4GB内存最大的允许值,再追加便无法启动passenger

通过Rails脚本创建Test App:

rails new dummy

Ruby on Rails 代码:

    //app/controller/test_controller.rb classTestController<ApplicationControllerdefindex sleep(0.2) end end//app/views/test/index.html.rb

PHP代码:

    //vsruby.php <?php usleep(200000); echo""; for($i=0;$i<128000;$i++) { echomt_rand(8999,9999); } echo"";

CakePHP代码:

    //CakePHP //app/controller/test_controller.php <?phpclassTestControllerextendsAppController{ var$name='Test'; functionindex() { usleep(200000); } }//CakePHP //app/views/test/index.ctp <?phpfor($i=0;$i

我无所事事的度过了今天,是昨天死去的人们所期望的明天。

横向压力测试:Ruby on Rails PK CakePHP(1)

相关文章:

你感兴趣的文章:

标签云: