我有一个Node.js Web爬虫,可能需要一个多小时才能运行。尝试在App Engine标准环境上运行会超时。部署它的最佳方法是什么?
此外,它还触发了每天运行一次的cron.yaml,并命中了Express路线。有更好的方法吗?
这是该代码的简化片段。我可以在本地运行它,并将其部署到App Engine。 dlLinkArray中的链接很少,运行良好。但是,如果数量更多(数千个),它似乎无能为力。使用情况报告显示它运行了几秒钟。
const Storage = require('@google-cloud/storage');
const storage = new Storage();
function startDownload(){
dlLinkArray = [/*Array of objects with URL and Filename {link: 'http://source.com', filename: 'file123456'} */]; //About 10,000 links/files
var promises = [];
dlLinkArray.forEach(record =>{ //create array of nested promises
promises.push(
uploadFile(bucketName, record.link, record.filename)
.then((x) => {
if(x[1].name) //rename file from whatever is on the remote server to a usefull ID
return renameFile(bucketName, x[1].name, record.filename + ".pdf"); //renameFile uses storage.file.move to rename, returns a promise
else
return x;
})
);
});
return Promise.all(promises);
}
function uploadFile(bucketName, fileURL, reName) {
// Uploads a remove file to the Cloud Storage bucket
return storage
.bucket(bucketName)
.upload(fileURL, {
gzip: true,
metadata: {
cacheControl: 'public, max-age=31536000',
},
});
}
/*Express Route*/
app.get('/api/whatever/download', (req, res) => {
buckets2.startDownload().then(() => console.log("DONE"));
res.status(200).send("Download Started");
});
答案 0 :(得分:0)
我怀疑由于请求截止日期可能会出现问题。对于App Engine标准,默认情况下将其设置为60秒。但是,如果您使用manual scaling,则请求在标准环境中最多可以运行24小时。