我正在学习PHP和Laravel。我工作的公司有一个用纯PHP构建的web应用程序。我注意到,当执行诸如从CPU和内存密集型的大型CSV文件执行数据库更新时,web应用程序几乎什么也做不了。例如,用一些无关紧要的内容更新某人的帐户,而根本不需要CPU和内存。基本上,以前的砖块系统,直到它完成。查看Linux上的TOP,可以看到CPU使用率高达99%,内存使用率相当高。
不管怎么说,这并不是一个像系统这样的企业,只是一些用户用来管理另一个web应用程序的用户,该应用程序是用Python框架编写的,客户可以使用它。但是,这让我想到了基于PHP的企业系统的方法是什么?
显然,在系统完成之前,不能让单个用户执行密集的任务。我想在现实世界中有很多的例子,PHP正在处理非常复杂的内存密集型任务,而且其他用户并不明显。
编辑:当我说“砌筑系统”时,我指的是服务器本身,因此管理PHP web应用程序和客户机Python应用程序实际上都不会响应请求。
发布于 2016-09-10 00:43:39
我敢打赌,您已经为长时间运行的请求提供了一个开放会话,用于执行数据库插入,从而阻止后续请求打开会话。你需要做的是:
<?php
session_start();
/* pre-game stuff that depends on $_SESSION */
session_write_close();
/* long-running stuff that doesn't need to update $_SESSION */或者更好的是,如果可能的话,跳过打开此任务的会话。
增编:
发布于 2016-09-09 23:24:14
在企业系统中,首先要处理的是冗余。一切都必须是多余的。对于基于PHP的应用程序,设置是至关重要的。
如果我们谈论的是一个网站,以下是步骤
nginx (因为nginx是--你猜的--棒极了)。由于DNS池中有多个IP地址,因此有多个可用的web服务器。同样,哪个web服务器将处理客户的请求nginx要么提供静态内容,要么在满足规则的情况下将请求传递给PHP。我们使用php-fpm。每个nginx服务器都将HTTP请求代理到一个php-fpm节点集群。在常规语言中,它在计算机集群中选择了另一台为PHP服务的计算机。哪一个PHP节点将处理请求-冗余的胜利是无关紧要的。好了,给你。这是一个简短的概述,您将如何在PHP中处理企业级的问题。每一件作品都应该是冗余的,水平可伸缩的,并针对它所做的工作类型进行优化。
你肯定不想让你的应用程序挂起,或者在有人搞砸了的时候就无法使用。
发布于 2016-09-10 21:48:04
对于web请求,不应该进行高要求的处理。
例如,您应该使用队列。
这样,您就允许文件上传并创建一个队列进程来提供服务,然后请求就完成了,在进程在服务器上启动后的一分钟内,但是用户得到了请求。
然后可以考虑配置具有较低CPU优先级的队列,或者在数据处理之间添加睡眠时间,从而允许CPU为其他进程服务。
或者,您可以在上传文件后记录该文件,并配置一个控制台作业,以便在有待处理的数据时每分钟检查一次,然后处理一个批处理,并允许下一个批处理在下一分钟检查中处理,将当前行保持在某个位置。
但是,再次尝试避免在web请求上执行那些冗长的重进程,使用web请求获取信息,然后单独触发该过程。
Laravel对框架中的控制台作业或队列都有很好的支持。
https://stackoverflow.com/questions/39420801
复制相似问题