【问题标题】:Are Cron Jobs Practical When Dealing With > 190,000 Monthly Tasks?处理超过 190,000 个每月任务时,Cron 作业是否实用?
【发布时间】:2014-02-11 04:00:28
【问题描述】:

我必须为我的老板设置一个循环发票系统,我们的系统是在 centos linux 服务器上使用 php 构建的。我们每个月大约有 50,000 个客户开具发票,我的工作是构建一种方法来每周为所有 50,000 个客户处理发票脚本,因此该脚本将创建一个新发票并在我们的 mysql 中的发票表中执行插入查询数据库。

我担心如果每周运行 50,000 个单独的 cron 作业会导致我们的服务器负载过重,那么 crontab 在导致性能问题之前能够处理什么样的限制?

还需要注意的是,需要经常通过 php 脚本编辑 crontab 文件以编辑和/或删除单个发票/cronjobs。

基本上这是最好的路线吗?

【问题讨论】:

  • 我想对 crontabs 的限制主要是处理系统的硬件属性——比如内存和处理能力。但是,创建一个 cron 作业来处理所有 50,000 个客户而不是为每个客户处理一个不是更有意义吗??

标签: php mysql linux cron


【解决方案1】:

您应该有一个运行一次并循环访问 50,000 个客户的 Cron 作业。

我通常做的是从数据库中挑选一个,处理它,将其标记为完成,然后继续下一个。我让我的循环在运行超过 170 秒后退出,并设置一个 Cron 作业在整个月内每 3 分钟运行一次 - 它会尽可能地通过它们。

【讨论】:

  • 这绝对是这样做的方法,但是你需要注意它不会花费超过 3 分钟来运行每个批次,并且在 x 秒后终止可能不是你想要的做 - 特别是如果您正在进行交易。一个名为Fat Controller 的程序将重复一个任务,但间隔是从运行结束时开始测量的——因此间隔为 0,您可以在前一个实例结束后立即启动一个新实例。它甚至会为您处理并行处理。
  • 我应该澄清一下。如果时间超过 170 秒,我不会让它开始新批次(例如,创建新发票、发送新电子邮件/短信等)。对我来说,每个“批次”只需要一两秒钟,因此实例之间应该有大约 9 秒的停机时间。如果它们重叠,我也有内置保护。
【解决方案2】:

绝对不是!您可能安排了一项 cron 作业来生成发票。该作业将获取客户列表并为他们生成发票。如果一项工作需要大量时间来生成发票,您可以考虑并行处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2016-09-13
    • 1970-01-01
    • 2014-11-04
    • 2014-05-16
    相关资源
    最近更新 更多