京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

PHP 超高性能可扩展HTTP服务框架Webman

2024-11-3 20:47| 发布者: 284cc| 查看: 91| 评论: 0

摘要: 目录webman是什么?webman理念webman特点webman性能传统框架请求处置惩罚流程webman的请求处置惩罚流程与go语言的web框架性能比对压力测试压测结果受到哪些因素影响?HTTP keep-alive是什么?压测时如何开启HTTP keep
目录

webman是什么?

webman是一款基于workerman开发的高性能HTTP服务框架。webman用于替换传统的php-fpm架构,提供超高性能可扩展的HTTP服务。你可以用webman开发网站,也可以开发HTTP接口大概微服务。

除此之外,webman还支持自界说进程,可以做workerman能做的任何事情,例如websocket服务、物联网、游戏、TCP服务、UDP服务、unix socket服务等等。

webman理念

[code]以最小内核提供最大的扩展性与最强的性能。[/code]

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 包罗 [code]8.9.10.11[/code]

  • 框架初始化,如实例化各种类,包罗如容器、控制器、路由、中间件等。

  • 框架连接数据库并权限验证,连接redis

  • 框架实行业务逻辑

  • 框架关闭数据库、redis连接

  • php-fpm释放资源、烧毁全部类界说、实例、烧毁符号表等

  • php-fpm次序调用各个扩展/模块的RSHUTDOWN方法

  • php-fpm将结果转发给nginx/apache

  • nginx/apache将结果返回给客户端

webman的请求处置惩罚流程

  • 框架吸收请求

  • 框架实行业务逻辑

  • 框架将结果返回给客户端

[code]注意:没错,在没有nginx反代的环境下,框架只有这3步。可以说这已经是php框架的极致,这使得webman性能是传统框架的几倍甚至数十倍。[/code] [code]传统的 FPM/Apache 的 PHP 应用性能无法与 Java、Golang 等应用抗衡, 重要有两点原因: 短生命周期,每次请求都会重复的初始化/烧毁很多内存布局。 传统的 PHP 应用都是壅闭IO的,在高并发下大量的CPU浪费在进程上下文切换。[/code]

与go语言的web框架性能比对

[code]带数据库查询业务,webman比同类型go语言的web框架性能高一倍左右。以上数据来自techempower.com[/code]

压力测试

压测结果受到哪些因素影响?

  • 压力机到服务器的网络耽误 (发起内网或本机压测)

  • 压力机到服务器的带宽 (发起内网或本机压测)

  • 是否开启HTTP keep-alive (发起开启)

  • 并发数是否足够 (外网压测要只管开启更大的并发)

  • 服务端进程数是否合理 (helloworld业务进程数发起与cpu数相同,数据库业务进程数发起为cpu的四倍及以上)

  • 业务自身性能 (例如是否使用了外网数据库)

HTTP keep-alive是什么?

HTTP Keep-Alive机制是一种用于在单个TCP连接上发送多个HTTP请求和响应的技能,它对于性能测试结果影响很大,关闭keep-alive后QPS可能成倍降落。

目前欣赏器都是默认开启keep-alive的,也就是欣赏器访问某一个http地址后会将连接暂时保存不关闭,下一次请求时复用这个连接,用来提高性能。 压测时发起开启keep-alive。

压测时如何开启HTTP keep-alive?

假如是用的ab步伐压测必要加-k参数,例如 [code]ab -n100000 -c200 -k http://127.0.0.1:8787/[/code]。 apipost必要在返回头中返回gzip头才能开启keep-alive(apipost的bug,参考下面)。 其它压测步伐一般会默认开启。

为什么通过外网压测QPS很低?

外网耽误很大导致QPS很低,是正常现象。例如压测baidu页面QPS可能只有几十。发起内网大概本机压测,排除网络耽误影响。假如一定要在外网压测,可以通过增长并发数来增长吞吐量(需包管带宽富足)。

为什么经过nginx署理后性能降落?

nginx运行必要消耗体系资源。同时,nginx和webman之间的通讯也必要消耗一定的资源。然而,体系的资源是有限的,webman无法获取到全部的体系资源,因此,整个体系的性能可能会有所降落是正常现象。

为了尽可能减少nginx署理带来的性能影响,可以考虑关闭nginx日记([code]access_log off;[/code]),开启nginx到webman之间的keep-alive,参考nginx署理。

别的https和http相比会消耗更多资源,因为https必要进行SSL/TLS握手,数据加密解密,包的尺寸变大占用更多带宽,这些会导致性能降落。

压测假如用的是短链接(不开启HTTP keep-alive),每次请求都必要额外的SSL/TLS握手通讯,性能会大幅降低。发起压测https开启HTTP keep-alive。

如何知道体系已经到达性能极限?

一般来说CPU到达100%时阐明体系性能已经到达极限。假如CPU还有空闲阐明还没到达极限,这时候可以适当增长并发提高QPS。

假如增长并发无法提高QPS则可能是webman进程数不够,请适当增长webman进程。假如仍然无法提高考虑带宽是否足够。

压测下令示例

ab

[code]# 100000请求 200并发 开启keep-alive ab -n100000 -c200 -k http://127.0.0.1:8787/ # 100000请求 200并发 未开启keep-alive ab -n100000 -c200 http://127.0.0.1:8787/ [/code]

wrk

[code]# 200 并发压测10秒 开启keep-alive(默认) wrk -c 200 -d 10s http://example.com[/code]

到此这篇关于PHP 超高性能可扩展HTTP服务框架Webman的文章就介绍到这了,更多相干Webman框架内容请搜索脚本之家以前的文章或继承欣赏下面的相干文章希望大家以后多多支持脚本之家! 


来源:https://www.jb51.net/program/315276voa.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-1 20:08 , Processed in 0.034543 second(s), 18 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部