目录
webman是什么?webman理念webman特点webman性能传统框架请求处理流程webman的请求处理流程与go语言的web框架性能比对压力测试压测结果受到哪些因素影响?HTTP keep-alive是什么?压测时如何开启HTTP keep-alive?为什么通过外网压测QPS很低?为什么经过nginx代理后性能下降?如何知道系统已经达到性能极限?压测命令示例webman是什么?
webman是一款基于workerman开发的高性能HTTP服务框架。webman用于替代传统的php-fpm架构,提供超高性能可扩展的HTTP服务。你可以用webman开发网站,也可以开发HTTP接口或者微服务。
除此之外,webman还支持自定义进程,可以做workerman能做的任何事情,例如websocket服务、物联网、游戏、TCP服务、UDP服务、unix socket服务等等。
webman理念
以最小内核提供最大的扩展性与最强的性能。
webman仅提供最核心的功能(路由、中间件、session、自定义进程接口)。其余功能全部复用composer生态,这意味着你可以在webman里使用最熟悉的功能组件,例如在数据库方面开发者可以选择使用Laravel的illuminate/database,也可以是ThinkPHP的ThinkORM,还可以是其它组件如Medoo。在webman里集成他们是非常容易的事情。
webman特点
1、高稳定性。webman基于workerman开发,workerman一直是业界bug极少的高稳定性socket框架。
2、超高性能。webman性能高于传统php-fpm框架10-100倍左右,比go的gin echo等框架性能高一倍左右。
3、高复用。无需修改,可以复用绝大部分composer组件及类库。
4、高扩展性。支持自定义进程,可以做workerman能做的任何事情。
5、超级简单易用,学习成本极低,代码书写与传统框架没有区别。
6、使用最为宽松友好的MIT开源协议。
webman性能
传统框架请求处理流程
nginx/apache接收请求
nginx/apache将请求传递给php-fpm
php-fpm初始化环境,如创建变量列表
php-fpm调用各个扩展/模块的RINIT
php-fpm磁盘读取php文件(使用opcache可避免)
php-fpm词法分析、语法分析、编译成opcode(使用opcache可避免)
php-fpm执行opcode 包括8.9.10.11
框架初始化,如实例化各种类,包括如容器、控制器、路由、中间件等。
框架连接数据库并权限验证,连接redis
框架执行业务逻辑
框架关闭数据库、redis连接
php-fpm释放资源、销毁所有类定义、实例、销毁符号表等
php-fpm顺序调用各个扩展/模块的RSHUTDOWN方法
php-fpm将结果转发给nginx/apache
nginx/apache将结果返回给客户端
webman的请求处理流程
框架接收请求
框架执行业务逻辑
框架将结果返回给客户端
注意:没错,在没有nginx反代的情况下,框架只有这3步。可以说这已经是php框架的极致,这使得webman性能是传统框架的几倍甚至数十倍。
传统的 FPM/Apache 的 PHP 应用性能无法与 Java、Golang 等应用抗衡, 主要有两点原因:
短生命周期,每次请求都会重复的初始化/销毁很多内存结构。
传统的 PHP 应用都是阻塞IO的,在高并发下大量的CPU浪费在进程上下文切换。
与go语言的web框架性能比对
带数据库查询业务,webman比同类型go语言的web框架性能高一倍左右。