我正在使用 GCP 云功能,计划通过请求触发运行。我的函数运行网络抓取工具来构建数据集,这可能需要大约 30 分钟。我想我看到了用于调度作业的 GCP 选项,但就我而言,我需要在每次运行时手动更新并传递 API 密钥,并且我认为通过向 GCP 函数端点发出 HTTP 请求并传递请求正文中的 API 密钥。
但是,整个作业必须在我的云函数发回响应之前运行,因此请求方总是会超时。这不会影响我的作业运行的能力,但这似乎意味着云函数不适合运行长时间的作业。 GCP 云功能是否不适合我想要做的事情?有更好的选择吗?
彼此独立工作的长期运行的临时进程可以位于它们自己的虚拟机中。 您可以将您喜欢的任何软件集合安装到虚拟机中,并将其保存到映像或快照中,并使用它们来启动新虚拟机。 您可以从 Google Cloud Function 调用 Compute Engine API。 启动 VM 可能需要 30 秒。告诉用户任务已经开始,并在 XX 分钟后回来查看结果。 让虚拟机将结果发布到网站可以获取的位置。
按需虚拟机的运营成本低于功能。 Spot VM 仍然更便宜,但可能不会完成。
您可以在创建时限制虚拟机的运行时间(这样它就不会在 3 个月后仍然运行,从而产生大额账单),并为虚拟机设置特定的服务帐户来建立其访问其他资源的权限 - 例如只读或读写存储桶。 有一个用于虚拟机创建的元数据字段,可能对于传达作业参数很有用。
Google Batch 位于虚拟机之上,将提供一些额外的管理,但您可能会发现不需要它。 我注意到 kubernetes 中也有批处理作业和其他一些功能,例如托管的 Argo 工作流程,但如果您还没有使用这些,那么仅进行批处理就没有多大意义。