如何从HTTP触发函数并行优化调用“子”云函数

时间:2019-05-05 18:42:22

标签: google-cloud-functions google-cloud-storage

我在一个云存储桶中有成千上万个日志文件,我需要使用HTTP触发的云功能来处理和聚合这些文件,并且正在寻找一种使用并行化以最快的方式计算任务的方法。

此刻,我有两个云功能(nodejs 8):

用户正在调用的“主要”功能,直接传递需要处理的日志文件列表;该函数为每个提供的日志文件调用“子”函数,我也通过使用async.each并行运行的HTTP请求触发了该日志文件。 “子”功能处理单个日志文件,并将数据返回到“主”功能,该功能汇总结果,并在处理完所有文件后将结果发送回用户。

如果我直接调用子函数,则完成一个文件大约需要1秒钟。我希望,如果我调用main函数来并行处理100个文件,那么时间仍然会或多或少1秒。批处理中的第一个文件确实是在1秒后返回的,但是时间随每个文件而增加,并且第100个文件将在7秒后返回。

最可能的罪魁祸首是我正在使用HTTP请求运行子功能,但是我还没有找到一种“内部”调用它们的方法。是否存在另一种特定于Google Cloud Functions的方法,或者我可以以某种方式优化HTTP请求的并行化?

1 个答案:

答案 0 :(得分:1)

最简单的方法是简单地共享执行子功能的代码,然后直接从主功能调用它。在某些情况下,由于较少的函数调用,因此更简单,成本更低。

另请参阅:Calling a Cloud Function from another Cloud Function