适用于大量用户的Cron Jobs Management

时间:2013-03-18 10:50:10

标签: php linux cron cron-task

我有backupify之类的服务。哪个下载来自不同社交媒体平台的数据,目前我有大约2500个活跃用户,每个用户运行一个脚本从facebook获取数据并将其存储在Amazon S3上,我的服务器是AWS上的Ec2 Instance。

我在表中有条目,如facebook用户的900个条目,有一个PHP脚本运行并从数据库表中获取用户,然后从Facebook备份数据,然后从Facebook中选择下一个用户。

当我的用户少于1000时,一切都很好,但现在我有超过2500个用户的问题是PHP脚本停止,或运行前100个用户然后停止,超时等我正在运行PHP脚本来自php -q myscript.php命令。

另一个问题是单个用户脚本从数据库表到达最后一个用户需要大约65秒才需要几天,所以最好的方法是在数据库表上运行并行等。

请建议我为大量用户备份大量数据的最佳方法是什么,我应该能够监控cron,就像漫画者一样。

1 个答案:

答案 0 :(得分:2)

如果我做对了,你就会为所有用户提供一个单独的cron任务,以某种频率运行,试图一次性处理每个用户的数据。

  1. 您是否尝试在代码开头发出set_time_limit(0);
  2. 此外,如果任务是资源需求,您是否考虑为每个N用户创建一个单独的cron任务(基本上模仿多线程行为;从而利用服务器的多个CPU核心)?
  3. 是将数据写入某种cache而不是数据库,并且有一个单独的任务将缓存内容提交给可行的数据库吗?
  4. 您是否有机会使用内存数据表(这很快)?您需要不时地将DB内容持久保存到磁盘,但是这个价格可以快速访问数据库。
  5. 您是否可以将任务外包给单独的服务器作为分发服务,并将cron脚本作为负载均衡器编写?
  6. 同时优化代码可能会有所帮助。例如(如果您还没有这样做),您可以缓冲收集的数据并在脚本末尾的单个事务中提交,这样执行流程就不会因DB重复发生的I / O阻塞而分散。