PHP 架构 - 每个用户的单个 cron 作业

Posted

技术标签:

【中文标题】PHP 架构 - 每个用户的单个 cron 作业【英文标题】:PHP architecture - Individual cron job per user 【发布时间】:2021-05-12 21:48:40 【问题描述】:

我正在用 php 构建一个网站,需要定期为每个用户单独检查一个 API。

简而言之,它是一种 SaaS,可通过附加/自动选项在另一个网站上引导用户帐户。如果您愿意,可以使用基于 Web 的机器人。

所以基本上,我需要为每个用户动态创建一个新的 cron 作业,并为其单独的时间间隔,并且这些应该并行执行(如果有很多用户,将所有查询放入一个 cron 作业会花费太长时间)。

此外,每个请求都可能需要使用不同的 IP 完成。原因可能是API提供者被我们惹恼了,想要屏蔽我们。由于 API 密钥是公开的,他们很可能会通过简单地阻止我们的 IP 来做到这一点。如果我们经常更改它,那应该会有很大帮助。

这样的事情可能吗?这需要什么?有什么不会太贵的选择吗?

例如,我想到了 RabbitMQ,但这并不能完全解决所有问题,我想知道是否有更好/更智能的解决方案。

谢谢!

【问题讨论】:

您不能只是“伪造”请求的 IP。您需要将其移动到不同的服务器,或者每次都为现有服务器分配不同的 IP。两者都不是很实用。 “如果有很多用户,将所有查询放到一个 cron 作业中会花费很长时间” - a),通常的 PHP 执行时间限制可以暂停命令行界面。 b) cron 本身不必在每次运行时都执行所有,您可以实现一个系统,该系统仅使用 cron 来触发一个脚本,该脚本将检查要执行的任务队列,然后选择下一个。为每个应用用户单独设置一个 cron 是个坏主意。 啊,所以您说的是一个基本上每秒运行一次的 cron 作业,以检查任务是否“启动”。尽管如此,可能有太多的用户查询需要太长时间,所以它们必须并行执行(简单的时间限制不能解决问题)。这确实可以通过消息队列来完成,好的。至于 IP - 也许各个消息队列工作人员可以在具有不同 IP 的不同机器上?或者也许可以对请求使用代理?不确定这里的最佳实践是什么方法,但必须有一些东西,因为这不是新事物:) 在任何标准实现中,cron 的最小间隔为 1 分钟。 【参考方案1】:

查看temporal.io 开源项目。它实际上支持无限数量的此类周期性作业。 PHP SDK 可以在here找到。

【讨论】:

以上是关于PHP 架构 - 每个用户的单个 cron 作业的主要内容,如果未能解决你的问题,请参考以下文章

PHP 用IFTTT设置一个cron作业,没有cron

Cron 作业未在所有站点上激活

php 数据库 - 为每个用户存储 30 天的数据

在 cron 作业中执行 PHP 脚本

PHP:运行计划作业(cron 作业)

阻止用户访问我的 cron 作业脚本