【问题标题】:cron job periodicity and amount of workcron作业周期和工作量
【发布时间】:2011-10-12 15:04:12
【问题描述】:

我正在从事博客聚合项目。 主要任务之一是获取博客的 RSS 提要并对其进行处理。我目前有大约 500 个博客,但随着时间的推移,这个数字会稳步增加(很快就会达到数千个)。

目前(仍处于测试阶段),我有 cron 作业,它每天定期获取所有 RSS 提要一次。但这会使所有处理和网络 IO 每天只开启一次。

我应该:

  1. 保持当前状态(一次性)
  2. 每小时获取 number_of_blogs / 24(恒定的 cron 作业计时)
  3. 更改 cron 周期以获取恒定数量的 RSS(每更短时间 10 个博客)

还是有其他想法?

我在共享主机上,因此非常感谢减少 CPU 和网络 IO :)

【问题讨论】:

    标签: php rss cron load-balancing


    【解决方案1】:

    我会考虑使用 Google App Engine 来检索和处理“原始”信息,并让它以可管理大小的数据包的形式将数据发布到网络服务器。 GAE 有自己的 cron 作业系统,可以 24/7 独立运行。

    目前使用类似的系统从多个网站检索工作信息并将其编译为另一种出色的方式来抵消带宽和处理需求。

    【讨论】:

    • 好主意,但最好将所有东西都放在一台服务器上。
    【解决方案2】:

    我也有类似的情况,但是博客不多 :) 我以前是 24 小时导入一次,但为了节省 CPU 负载,我在每个博客之后都使用 sleep(),比如 sleep(10);它保护了我的安全。

    【讨论】:

    • 在每个博客仅扩展到大约 8,600 个博客后休眠 10 秒(假设实际获取数据不需要时间)。之后,一天中没有足够的秒数在 24 小时周期内获取博客。但是,该技术仍然可以在适当的延迟后应用。
    【解决方案3】:

    我使用了一个适应提要更新频率的系统,在this answer 中进行了描述。

    如果您使用条件 HTTP GET 来检索支持它的提要,您可以节省资源。保留来自 HTTP 响应的 Last-ModifiedETag 标头的值。下次尝试在 If-Modified-SinceIf-None-Match 请求标头中提供它们的值。

    现在,如果您收到 HTTP 304 响应代码,您就知道 Feed 没有更改。在这种情况下,完整的提要没有再次发送,只有标题告诉您没有新帖子。这会减少带宽和数据处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-22
      • 2012-02-18
      • 2023-02-09
      • 2011-05-28
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多