Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 谷歌云平台:运行数小时抓取脚本_Node.js_Google App Engine_Cron_Google Cloud Platform - Fatal编程技术网

Node.js 谷歌云平台:运行数小时抓取脚本

Node.js 谷歌云平台:运行数小时抓取脚本,node.js,google-app-engine,cron,google-cloud-platform,Node.js,Google App Engine,Cron,Google Cloud Platform,我有一个NodeJS脚本,每天都会刮取URL。 请求被限制为对服务器友好。这导致我的脚本运行了相当长的时间(几个小时) 我一直在寻找在GCP上部署它的方法。因为它以前是在cron中完成的,所以我很自然地了解了如何在googlecloud上运行cronjob。但是,根据,脚本必须作为API公开,对该API的http调用最多只能运行60分钟,这不符合我的需要 我看了一下,它建议使用云函数。但是,我不确定这种方法是否适合我的情况,因为我的脚本需要比这里描述的简单服务器监视工作多得多的处理 有没有人有在

我有一个NodeJS脚本,每天都会刮取URL。 请求被限制为对服务器友好。这导致我的脚本运行了相当长的时间(几个小时)

我一直在寻找在GCP上部署它的方法。因为它以前是在cron中完成的,所以我很自然地了解了如何在googlecloud上运行cronjob。但是,根据,脚本必须作为API公开,对该API的http调用最多只能运行60分钟,这不符合我的需要

我看了一下,它建议使用云函数。但是,我不确定这种方法是否适合我的情况,因为我的脚本需要比这里描述的简单服务器监视工作多得多的处理

有没有人有在GCP上这样做的经验

注意:为了澄清,我想避免在VPS上部署它

编辑: 我联系了谷歌,他们的回答如下:

谢谢你的耐心。目前,无法运行cron 自当前的cron限制以来,连续编写6到7小时的脚本 应用内引擎是。 如果您的用例可能,您可以将7个小时的时间分散到 重复任务,例如,每10分钟或1小时一次。亲信工作 请求的限制与请求的限制相同。自由的 应用程序最多可以有20个计划任务。你可以参考 用于cron计划格式

此外,还可以将Postgres和Redis与此一起使用。 然而,请注意Postgres仍处于测试阶段


由于我无法分散任务,因此我不得不继续为此管理dokku VPS。

我建议将两种服务结合起来,即GAE Cron作业和云任务

用于发布站点和范围的列表,以便刮取到云任务。这个初始化过程还不需要对服务器“友好”,并且可以简单地将所有的工作块发布到云任务队列,并在完成时考虑自己完成。p> 然后使用一个,并使用队列速率限制配置选项作为将总体请求速率限制到要从中删除的端点的方法。如果您需要少于1个QP,请直接在代码中添加一个sleep语句。如果你真的在排队等待数以百万或数十亿计的工作,请遵循他们的建议,让一个队列衍生到另一个队列

大规模/批量任务排队 当有大量的任务时,对于 例如,需要增加数百万或数十亿,一次双重注入 模式可能很有用。而不是从单个作业创建任务, 使用注入器队列。添加到注入器队列的每个任务都会扇出 并向所需队列或队列组添加100个任务。喷油器 队列可以随着时间的推移而加快,例如从5 TPS开始,然后 每5分钟增加50%


这应该是非常简单的,只需要您仔细考虑cron作业如何拉入下一个所需的站点和页面,以及它应该将工作负载分解为多小的过程

我也在做这个任务。我需要爬网网站,并有相同的问题

我没有在VM上运行主爬虫任务,而是将任务移动到Google云函数。任务包括添加、获取目标url、刮取web并将结果保存到数据存储,然后将结果返回给调用者


这就是它的工作原理,我有一个长时间运行的应用程序,可以称之为master。主机知道我们要访问的URL。但是,它不是自己访问目标网站,而是将url发送到GCF中的爬虫函数。然后完成爬行任务并将结果发送回主机。在这种情况下,主机只请求并获取少量数据,而从不接触目标网站,让其余内容转到GCF。你可以卸载你的主机并通过GCF并行抓取网站。或者,您也可以使用其他方法来触发GCF,而不是HTTP请求。

在许多小型单元中,scraper功能基本上是可破坏的,您可以重新编写它,使其具有极强的可扩展性,并且能够适用于当今几乎所有可用的云解决方案,包括GAE。例如,这里有一个GAE python爬虫程序(不是一个好的爬虫程序),但只是给你一个想法:你也可以使用计算引擎(传统的虚拟机)运行cron作业,只要你愿意。@DanCornilescu我的脚本很慢,因为我限制了它。我也知道我可以使用VPS,但我不想为一个脚本管理整个实例。虽然您的方法很有趣,但似乎增加了额外的开销。既然可以用cron作业替换API调用,那么为什么还要使用GCP呢?在发帖的时候,我一直在寻找一种方法来避免使用VPS,同时仍然能够在很长一段时间内使用VPS。最后我使用了一个dokku实例,它被证明更灵活、更便宜。