Sta*_*ica 5 cron google-app-engine node.js google-cloud-platform
我有一个 NodeJS 脚本,每天都会抓取 URL。请求被限制以对服务器友好。这导致我的脚本运行了相当长的时间(几个小时)。
我一直在寻找一种在 GCP 上部署它的方法。而且因为之前是在 cron 中完成的,所以我很自然地看看如何在 Google Cloud 上运行一个 cronjob。但是,根据docs,脚本必须作为 API 公开,并且对该 API 的 http 调用最多只能运行 60 分钟,这不符合我的需要。
我看了一下这个 SO question,它建议使用云函数。但是,我不确定这种方法是否适合我的情况,因为我的脚本需要比那里描述的简单服务器监控作业更多的处理。
有没有人在 GCP 上做这件事的经验?
注意:澄清一下,我想避免在 VPS 上部署它。
编辑:我联系了谷歌,这是他们的回复:
感谢您的耐心等待。目前,无法连续运行 cron 脚本 6 到 7 个小时,因为 App Engine 中 cron 的当前限制是每个 HTTP 请求 60 分钟。如果您的用例可能,您可以将 7 小时分散到重复性任务中,例如,每 10 分钟或 1 小时。cron 作业请求与推送任务队列的限制相同。免费应用程序最多可以有 20 个计划任务。您可以参考 cron 计划格式的文档。
此外,仍然可以使用 Postgres 和 Redis。但是,请注意 Postgres 仍处于测试阶段。
由于我无法分配任务,因此我不得不为此继续管理 dokku VPS。
我建议结合两种服务:GAE Cron Jobs 和 Cloud Tasks。
使用GAE Cron 作业发布要抓取到云任务的站点和范围列表。这个初始化过程还不需要对服务器“友善”,并且可以简单地将所有工作块发布到云任务队列,并在完成时认为自己已完成。
接下来是任务队列,并使用队列速率限制配置选项作为限制您从中抓取的端点的总体请求速率的方法。如果您需要少于 1 qps,请直接在代码中添加 sleep 语句。如果您确实正在排队数百万或数十亿个作业,请遵循他们的建议,将一个队列生成到另一个队列。
大规模/批量任务排队 当需要添加大量任务(例如数百万或数十亿)时,双注入模式可能会很有用。不要从单个作业创建任务,而是使用注入器队列。添加到注入器队列的每个任务都会散开,并将 100 个任务添加到所需的队列或队列组。注入器队列可以随着时间的推移而加速,例如以 5 TPS 开始,然后每 5 分钟增加 50%。
这应该是非常方便的,只需要您考虑 cron 作业如何提取下一个所需的站点和页面的过程,以及它应该将工作负载分解成多小。
| 归档时间: |
|
| 查看次数: |
2870 次 |
| 最近记录: |