【问题标题】:Execute very long-running tasks using Google Cloud使用 Google Cloud 执行长时间运行的任务
【发布时间】:2021-02-11 19:43:32
【问题描述】:

我已经使用 Google CLoud 几个星期了,由于我有限的 GCP 知识,我面临着一个大问题。

我有一个 python 项目,其目标是使用它的 API 从网站“抓取”数据。我的项目在执行期间运行了数万个请求,并且可能需要很长时间(几个小时,也许更多)

我的项目中有 4 个 python 脚本,它们都是由 bash 脚本编排的

执行如下:

  • 第一个脚本检查包含所有请求指令的 CSV 文件,然后执行请求,将请求的所有结果保存在 CSV 文件中
  • 第二个脚本检查之前创建的 CSV 文件并重新创建另一个 CSV 指令文件
  • 第一个脚本再次运行,但使用新指令并再次将结果保存在 CSV 文件中
  • 再次检查第二个脚本并再次执行相同操作...
  • ...等等几次
  • 第三个脚本清理数据、删除重复项并创建唯一的 CSV 文件
  • 第四个脚本将最终的 CSV 文件上传到存储桶

现在我想使用那个 bash 脚本,并且我想自动执行这些脚本。每周一次。

这里的问题是执行时间。这是我已经测试过的:

Google App Engine : GAE 上的请求超时限制为 10 分钟,我的函数可以运行几个小时。 GAE 在这里不可用。

Google Compute Engine:我的脚本将最多运行。每周 10 到 15 个小时,在这段时间内保持计算引擎的运行成本太高了。

如何在云环境中自动执行我的脚本?在不更改代码的情况下,我可能没有想到的解决方案是什么?

谢谢

【问题讨论】:

  • 你能并行运行所有指令吗?
  • 遗憾的是,他们必须一个接一个地执行
  • 速度令人遗憾,但无服务器解决方案是可能的,需要更多监控,但需要更少的虚拟机管理。
  • 想到了Cloud Build,但这意味着使用每个步骤的python脚本构建一个容器,并像cloud build一样在yaml中重新编写编排脚本。

标签: python google-app-engine google-cloud-platform google-compute-engine google-cloud-run


【解决方案1】:

无需摆脱现有的编排所有内容的 bash 脚本即可完成此操作的简单方法是:

  1. startup script for the instance 中包含 bash 脚本。
  2. 在 bash 脚本的末尾,包含 shutdown 命令。
  3. 使用Cloud Scheduler 安排实例的启动。您必须对 GCE API 进行经过身份验证的调用 start the existing instance

这样,您的实例将按计划启动,它将运行启动脚本(这将是您现有的编排脚本),并在完成后关闭。

【讨论】:

  • 谢谢,这看起来是一个非常好的方法!启动脚本是在每次启动实例时运行还是仅在创建实例时运行?我需要一个至少 32GB RAM 的功能强大的实例,如果实例关闭,我是否需要付费?
  • 是的,每次启动实例都会运行启动脚本。 CPU 和内存的费用将停止if the instance is Terminated (stopped)。永久磁盘、静态 IP 和其他永久资源仍会产生费用。您可以查看定价页面了解更多详情:cloud.google.com/compute/all-pricing
  • 确保编写带有错误检查功能的正确 bash 脚本,并在 bash 中编写 trap 以在脚本运行过程中失败时关闭 VM。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
相关资源
最近更新 更多