为高负载而生的 PHP 进程管理器 —— PHP-PM (PPM)

file

PHP-PM 可以用于 php 应用程序的进程管理,增压和负载均衡。它使用 ReactPHP 实现 php 的事件驱动和非阻塞 I/O。

它是基于 ReactPHP,最好是工作在基于请求 - 响应式的框架,像 Symfony 的 HTTPKernel。这样做是为了减少 php 启动(包括变量声明,加载和解析文件)的时间,减少功能强大的框架的启动时间。想一睹为快就看看性能一节。 PHP-PM 启动了一些 PHP 进程,引导你的应用程序 像 Symfony 内核) ,把它加载到内存为请求做准备。这就是为什么 PHP-PM 使你的应用程序快的原因。

在高层次上,PPM 的主要特征是:

  • 性能提升达 15 倍(相对于 PHP-FPM,symfony 应用)。
  • 集成负载平衡
  • 热代码重新加载(更改 PHP 文件时)
  • 为易于开发的程序提供的静态文件
  • 支持 HttpKernel(symfony /laravel),Drupal(experimental),Zend(experimental)

在撰写本文时,PHP-PM 还没有处于黄金时段,但是这种技术是一种非常有趣的方法,它可以在服务于高性能的 PHP 程序的典型框架之外进行运作。 作者正在研究这个问题,并尝试将 PHP 中的非阻塞进程效能推到极限。 在我看来,PHP 将会更像 Java 和 Node 等其他选项,并且像 PHP-PM 这样的项目似乎是一个很好的解决更高 I/O 所需性能的方法。 我期待看到像 PPM 和 ReactPHP 这样的项目采取 PHP。

PHP 从 5 + 到 7 的性能提升了很多,在我看来,未来我们会更加关注它的性能,包括即将发布的 PHP 版本和那些使用 PHP 的开源项目。

了解更多#

请自行查看 PHP-PM GitHub 库 ,在 README 中了解更多关于怎样运行 PHP-PM 等。

项目的主要贡献者之一, Marc J. Schmidt ,也写了一篇详细的文章:Bring High Performance Into Your PHP App (with ReactPHP) ,这可以更好地帮助你理解 PPM 中使用的概念。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/php-pm

译文地址:https://learnku.com/laravel/t/7839/php-p...

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

常驻内存:

  1. 会放大 php 扩展的内存泄漏问题。
  2. 看他源码使用了 Pcntl 库,重量级的进程库

也有好处,每次省去 ZendVM 的 bootstrap 时间,省去 composer autoload 的 bootstrap 时间。

7年前 评论
xcaptain

还有个叫 amphp 的项目,比 react-php 开发更活跃,写一个类似的这样的服务器也很简单,我搞了一个例子,有兴趣的同学可以试试啊 https://github.com/amphp/http-server/issue... 我写了一个简单的例子在 https://gist.github.com/xcaptain/d3184e2d5...

6年前 评论
Stephen

PPM 性能只是提高了 3 倍,从近年来看 后续已经乏力 生态较差 版本较老 坑点较多 比如:

  • 内存泄漏,您还将在应用程序中发现泄漏。:) 但是作者说没什么大问题。
  • 不适用于 ExtEventLoop。(因此,请不要安装 php70-event,但您可以尝试 LibEventLoop php56-libevent
  • Drupal 和 Zend 的实验性很强,无法正常工作。
  • Laravel 的调试器无法完美运行,因为在每次请求后仍需要重置一些东西。
  • 流式响应尚未流式传输
  • 由于信号处理,没有窗口支持
  • 在所有工作程序中,STDOUT 都重定向到连接的客户端。所以要小心,var_dump,echo 不显示在控制台上。STDERR 不会重定向到客户端,需要开发人员自求多福。

而 laravel-swoole 方案 虽然也有上述缺点,但是出色的性能提升高达 30-50 倍,支持的版本新 性能更好,如果你的团队能够接受 PPM(有很多的时间修复漏洞),那么你肯定也可以接受 laravel-swoole。

github.com/swooletw/laravel-swoole

但是 最有前途的是 HookPHP

HookPHP 基于 C 扩展搭建内置 AI 编程的架构系统 - 支持微服务部署 | 热插拔业务组件 - 集成业务模型 | 权限模型 | UI 组件库 | 多模板 | 多平台 | 多域名 | 多终端 | 多语言 - 含常驻内存 | 前后分离 | API 平台 | LUA QQ 群:679116380

gitee.com/cart/HookPHP/blob/master...

[opcache]
zend_extension=opcache
opcache.enable_cli=1

opcache.save_comments=0
opcache.validate_timestamps=0
opcache.memory_consumption=512

opcache.jit_buffer_size=512M

opcache.preload=/usr/local/openresty/nginx/html/HookPHP/preload.php
opcache.preload_user=root

稍微配置 就很快啦~
比如 composer 就可以加入 preload.php 预加载 不需要每次解析
opcache jit preload 都往上怼
C 扩展往上怼
常驻内存、主从分离、弹性伸缩 都往上怼~
做到这些 PHP 还慢么?

my.oschina.net/cart/blog/2986804

github.com/letwang/HookPHP

5年前 评论