压测 php 框架

栏目: PHP · 发布时间: 6年前

内容简介:压测 php 框架

title: 压测 PHP 框架

date: 2017-8-20 21:28:57

最近一个项目因为性能原因(原项目使用 nodejs, 单项目中同时提供 http tcp websocket 服务)需要重构, 短连接(http api) 准备用PHP(开发速度快, 所以 xxx 是世界上最好的语言) 重写.

下面对CI / lumen / hyper-api 3 个框架进行压测, 来选择这次重写需要使用的框架.

关于 压测 , 参考 rango 的博客: http://rango.swoole.com/archives/254

压测结果

qps: query per second, 查看服务器性能最直观的指标

关于 qps 低: 服务器基础服务是最低配的 阿里云 ecs + docker

PHP/qps ab/hello ab/db ab/Redis
hyper-api 133.29 25.06 89.13
CI 115.47 23.66 45.03
lumen 67.52 18.15 36.39

不得不说, hyper-api 的表现非常亮眼, 欢迎大家尝试

3 个测试项目的代码:

  • hayper-api: https://coding.net/u/daydaygo/p/hyper-api/git

  • CI: https://coding.net/u/daydaygo/p/CI/git

  • lumen: https://coding.net/u/daydaygo/p/lumen/git

压测 case

  • ab/hello: 3 个框架均返回 json 数据: {"code":"0000","msg":"success"}

  • ab/db: 3 个框架均使用 model 并返回 10 条 users 表数据

1   牟萍  dolorem_qui@example.net $2y$10$MLYoIDH0DHwzpnLlVkIV0u/NoWcio1cta2Q4xtdAXFf8HR1fvAMwe    hLSviARL7f  2017-08-20 18:14:22 2017-08-20 18:14:22 2   丘智敏 vcum@example.com    $2y$10$MLYoIDH0DHwzpnLlVkIV0u/NoWcio1cta2Q4xtdAXFf8HR1fvAMwe    JTg0zvrG5S  2017-08-20 18:14:22 2017-08-20 18:14:22 3   胥斌  in.nostrum@example.org  $2y$10$MLYoIDH0DHwzpnLlVkIV0u/NoWcio1cta2Q4xtdAXFf8HR1fvAMwe    FRekYNw2NA  2017-08-20 18:14:22 2017-08-20 18:14:22 4   唐秀云 vnatus@example.com  $2y$10$MLYoIDH0DHwzpnLlVkIV0u/NoWcio1cta2Q4xtdAXFf8HR1fvAMwe    oOxO2oRneR  2017-08-20 18:14:22 2017-08-20 18:14:22 5   罗海燕 tqui@example.net    $2y$10$MLYoIDH0DHwzpnLlVkIV0u/NoWcio1cta2Q4xtdAXFf8HR1fvAMwe    0FPqnEbWlt  2017-08-20 18:14:22 2017-08-20 18:14:22 6   卜欢  aut.labore@example.net  $2y$10$MLYoIDH0DHwzpnLlVkIV0u/NoWcio1cta2Q4xtdAXFf8HR1fvAMwe    ZaqOYvfq7q  2017-08-20 18:14:22 2017-08-20 18:14:22 7   白欣  optio_nesciunt@example.net  $2y$10$MLYoIDH0DHwzpnLlVkIV0u/NoWcio1cta2Q4xtdAXFf8HR1fvAMwe    aIU2QRm6kJ  2017-08-20 18:14:22 2017-08-20 18:14:22 8   甘鹰  natus07@example.com $2y$10$MLYoIDH0DHwzpnLlVkIV0u/NoWcio1cta2Q4xtdAXFf8HR1fvAMwe    azP1OW5QKW  2017-08-20 18:14:22 2017-08-20 18:14:22 9   欧东  excepturi.nulla@example.com $2y$10$MLYoIDH0DHwzpnLlVkIV0u/NoWcio1cta2Q4xtdAXFf8HR1fvAMwe    Yg8tJhNvDN  2017-08-20 18:14:22 2017-08-20 18:14:22 10  原晨  ipsa.quis@example.net   $2y$10$MLYoIDH0DHwzpnLlVkIV0u/NoWcio1cta2Q4xtdAXFf8HR1fvAMwe    Xa91IMhTfu  2017-08-20 18:14:22 2017-08-20 18:14:22
  • db/Redis: 3 个框架均访问 Redis 获取 1 条存储的 user 数据

127.0.0.1:6379> get ab-test  "{/"id/":1,/"name/":/"//u725f//u840d/",/"email/":/"dolorem_qui@example.net/",/"password/":/"$2y$10$MLYoIDH0DHwzpnLlVkIV0u///NoWcio1cta2Q4xtdAXFf8HR1fvAMwe/",/"remember_token/":/"hLSviARL7f/",/"created_at/":/"2017-08-20 18:14:22/",/"updated_at/":/"2017-08-20 18:14:22/"}"

压测数据

在压测 db 的时候, 一直报 apr_pollset_poll: The timeout speCIfied has expired (70007) , 所以只发起了 100 的访问

  • CI – ab/hello

ab -c 100 -n 10000 http://ci.daydaygo.top/ab/hello  Document Path:          /ab/hello Document Length:        31 bytes  Concurrency Level:      100 Time taken for tests:   86.604 seconds Complete requests:      10000 Failed requests:        0 Total transferred:      1860000 bytes HTML transferred:       310000 bytes Requests per second:    115.47 [#/sec] (mean) Time per request:       866.044 [ms] (mean) Time per request:       8.660 [ms] (mean, across all concurrent requests) Transfer rate:          20.97 [Kbytes/sec] received
  • lumen ab/hello

ab -c 100 -n 10000 http://lumen.daydaygo.top/ab/hello  Document Path:          /ab/hello Document Length:        31 bytes  Concurrency Level:      100 Time taken for tests:   148.115 seconds Complete requests:      10000 Failed requests:        0 Total transferred:      2120000 bytes HTML transferred:       310000 bytes Requests per second:    67.52 [#/sec] (mean) Time per request:       1481.150 [ms] (mean) Time per request:       14.811 [ms] (mean, across all concurrent requests) Transfer rate:          13.98 [Kbytes/sec] received
  • hyper-api ab/hello

ab -c 100 -n 10000 http://hyper.daydaygo.top/ab/hello  Document Path:          /ab/hello Document Length:        31 bytes  Concurrency Level:      100 Time taken for tests:   75.025 seconds Complete requests:      10000 Failed requests:        0 Total transferred:      2520000 bytes HTML transferred:       310000 bytes Requests per second:    133.29 [#/sec] (mean) Time per request:       750.254 [ms] (mean) Time per request:       7.503 [ms] (mean, across all concurrent requests) Transfer rate:          32.80 [Kbytes/sec] received
  • CI ab/db

ab -c 100 -n 400 -k http://ci.daydaygo.top/ab/db  Document Path:          /ab/db Document Length:        2351 bytes  Concurrency Level:      100 Time taken for tests:   4.226 seconds Complete requests:      100 Failed requests:        0 Total transferred:      250600 bytes HTML transferred:       235100 bytes Requests per second:    23.66 [#/sec] (mean) Time per request:       4226.170 [ms] (mean) Time per request:       42.262 [ms] (mean, across all concurrent requests) Transfer rate:          57.91 [Kbytes/sec] received
  • lumen ab/db

ab -c 100 -n 100 -k http://lumen.daydaygo.top/ab/db  Document Path:          /ab/db Document Length:        2400 bytes  Concurrency Level:      100 Time taken for tests:   5.510 seconds Complete requests:      100 Failed requests:        0 Total transferred:      258100 bytes HTML transferred:       240000 bytes Requests per second:    18.15 [#/sec] (mean) Time per request:       5509.861 [ms] (mean) Time per request:       55.099 [ms] (mean, across all concurrent requests) Transfer rate:          45.75 [Kbytes/sec] received
  • hyper ab/db

ab -c 100 -n 100 -k http://hyper.daydaygo.top/ab/db  Document Path:          /ab/db Document Length:        2321 bytes  Concurrency Level:      100 Time taken for tests:   3.991 seconds Complete requests:      100 Failed requests:        0 Total transferred:      254200 bytes HTML transferred:       232100 bytes Requests per second:    25.06 [#/sec] (mean) Time per request:       3991.113 [ms] (mean) Time per request:       39.911 [ms] (mean, across all concurrent requests) Transfer rate:          62.20 [Kbytes/sec] received
  • CI ab/Redis

ab -c 100 -n 1000 -k http://ci.daydaygo.top/ab/redis  Document Path:          /ab/redis Document Length:        239 bytes  Concurrency Level:      100 Time taken for tests:   22.205 seconds Complete requests:      1000 Failed requests:        0 Keep-Alive requests:    0 Total transferred:      394000 bytes HTML transferred:       239000 bytes Requests per second:    45.03 [#/sec] (mean) Time per request:       2220.522 [ms] (mean) Time per request:       22.205 [ms] (mean, across all concurrent requests) Transfer rate:          17.33 [Kbytes/sec] received
  • hyper ab/Redis

ab -c 100 -n 1000 -k http://hyper.daydaygo.top/ab/redis  Document Path:          /ab/redis Document Length:        239 bytes  Concurrency Level:      100 Time taken for tests:   11.220 seconds Complete requests:      1000 Failed requests:        0 Keep-Alive requests:    0 Total transferred:      468000 bytes HTML transferred:       239000 bytes Requests per second:    89.13 [#/sec] (mean) Time per request:       1121.954 [ms] (mean) Time per request:       11.220 [ms] (mean, across all concurrent requests) Transfer rate:          40.74 [Kbytes/sec] received
  • lumen ab/Redis

127.0.0.1:6379> get ab-test  "{/"id/":1,/"name/":/"//u725f//u840d/",/"email/":/"dolorem_qui@example.net/",/"password/":/"$2y$10$MLYoIDH0DHwzpnLlVkIV0u///NoWcio1cta2Q4xtdAXFf8HR1fvAMwe/",/"remember_token/":/"hLSviARL7f/",/"created_at/":/"2017-08-20 18:14:22/",/"updated_at/":/"2017-08-20 18:14:22/"}"

0

后记

因为 3 个框架都不算特别熟悉, 在写压测 case 时, 基本是照着文档来实现的, 所以, 尽管 还有很大的优化的空间 , 但是这个时候我的选择倾向于 hyper-api .

关于性能, 也有几点认识:

  • 性能优化是没有止境的

  • 要多好的性能才够, 1 个亿够不够

  • 什么时候该考虑性能, 至少要业务能有量才行


以上所述就是小编给大家介绍的《压测 php 框架》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learning PHP 5

Learning PHP 5

David Sklar / O'Reilly / July, 2004 / $29.95

Learning PHP 5 is the ideal tutorial for graphic designers, bloggers, and other web crafters who want a thorough but non-intimidating way to understand the code that makes web sites dynamic. The book ......一起来看看 《Learning PHP 5》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试