PHP - 一起使用Cron Jobs和GD

时间:2014-09-29 13:47:53

标签: php performance cron gd

我有一个基于客户的网站,要求他们上传图像,这样我的脚本将使用GD库将大约25-30种图像变体保存到服务器上。由于图像数量的原因,目前客户需要等待很长时间才能继续在网站上等待所有图像都已创建并保存。在那之前他们无法继续,所以我们让高水平的客户离开了网站。

上传之后是否有可能将图片网址存储在数据库表记录中,然后创建一个php脚本,创建25-30个图像,拉动数据库中的每条记录,并使用cronjob每天运行5分钟。这样,它允许客户继续浏览网站,并在“后台”自动创建图像

在后台进行所有这些会导致我的网站速度出现任何问题吗?如果10-100的客户同时使用它,它会减慢浏览网站的速度吗?

3 个答案:

答案 0 :(得分:1)

我建议您开始查看queues,更具体针对Gearman

这将减少客户的加载时间,因为您可以将图像的生成卸载到单独的服务器。如果您需要更多处理能力,它可以轻松扩展到多个服务器。

答案 1 :(得分:0)

使用PHP脚本处理图像将导致cron作业不会比客户上传图像并等待处理实时完成时更多延迟。简而言之,这种方法没有额外的影响。

问题是,您需要确保您的cron作业具有自我意识并且不会产生重叠。例如,如果cron运行并且花费超过5分钟来完成其当前任务,当第二个cron旋转并开始处理另一个图像时会发生什么(如果你没有正确实现队列,那么会发生同样的情况)?那么现在你有两个crons跑,争取资源。这意味着第二个也可能需要5分钟。最终你得到了3,4,等等所有同时运行的crons。所以要确保你的crons只是"启动"如果还没有人在跑步。

所有这些都说明了,根据客户网站的大小以及流量的大小,您可能最好让其他服务器处理图像处理。您可以在群集中使用生产站点服务器的云服务器,该服务器可以通过本地网络连接以访问映像,处理它,并将25-30份副本返回到适当位置的服务器。这样,您的处理队列占用面向公众的Web服务器的0个资源,并且不会对站点本身的速度产生影响。

答案 2 :(得分:0)

当然,您可以在服务器上存储图像的PATH并在以后处理它。 创建php脚本,运行时创建一个LOCK文件,即“/tmp/imgprocessor.lock”,并在最后删除它,如果cron启动一个新进程,你首先检查该文件是否不存在。 我将上传的图像存储在ie pathtoimages / toprocess /中,并在处理后删除每个图像或将其移动到其他位置。在ie / processed /

中有新图像

这样您就不需要查询数据库的图像路径,只需处理“toprocess”文件夹中的内容,您就可以在表格中使用UNIQ_NAME_OF_IMAGE。在加载oage之前的Web脚本中检查“processed”文件夹中是否存在UNIQ_NAME_OF_IMAGE,如果存在,则显示它...

在服务器负载上,它取决于你原来有多少图像和大小,图像处理可能在服务器上很重,但处理1000个用户* 30图像不会是一项繁重的任务,正如我所说,取决于图像的大小。

注意:如果你这样做,你需要确保在启动cron时ERROR日志也会输出到某个日志文件。 Cron脚本必须是防弹,即如果它由于某种原因失败LOCK文件将保留,所以不再进行处理,你需要手动删除它(或创建删除它并可能发送一些邮件的自定义错误处理程序),你应该定期检查日志文件,以便了解最新情况。