【问题标题】:How to push CPU-heavy tasks from Google App Engine to Google Compute Engine VM instance?如何将 CPU 繁重的任务从 Google App Engine 推送到 Google Compute Engine VM 实例?
【发布时间】:2017-11-15 14:17:03
【问题描述】:

我有占用大量 CPU 的模拟任务,我想使用 Google App Engine 和 Google Compute Engine 按以下方式执行:

  1. 模拟任务数据通过 Google App Engine 提交,例如经过 执行 API 调用 /runsimulation?param1=...param2=...
  2. 在 GAE servlet 中设置模拟任务并确定其计算要求,即需要哪种类型的计算引擎机器
  3. GAE servlet 启动所需的 VM 实例
  4. GAE servlet 以某种方式将模拟任务转移到 VM 处理它的实例
  5. 当 VM 实例完成时会通知 GAE servlet。理想情况下,它还可以在模拟过程中接收进度更新并将其显示给用户。
  6. 最后,GAE servlet 接收来自VM 实例的模拟结果并将其交给用户。虚拟机实例随后被关闭。

我在使用 4 和 5 时遇到了困难。如何设法将计算任务从 GAE servlet“推送”到 Compute Engine VM 实例?之后如何 GAE 和 VM 实例通信?

(虽然我在 GAE 方面经验丰富,但我对 Compute Engine 完全陌生,并且很难完全掌握 Compute Engine 方法来解决像我这样的问题)

提前致谢!

【问题讨论】:

  • 你想完成什么?省钱?
  • @AndreiVolgin 我想要的只是能够在 Google Cloud Infrastructure 上运行动态构建、CPU 密集型、可并行化的模拟。 GAE 无法处理这些模拟,因为它们很可能会超过 1 小时的 GAE 时间限制,并且需要多核在可行的时间内完成。
  • 在 GAE 上的任务可以运行 24 小时,但在 GCE 上运行肯定会更划算。
  • 请注意,GAE 和 GCE 实例都可以访问同一个 Cloud Datastore,其中可以存储任务及其结果。 GCE 实例可以更新具有“进度”状态(例如“1%”等)的数据存储实体,客户端可以通过 GAE 实例定期检索此进度数据。

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


【解决方案1】:

如果您只想启动实例以执行一项任务,最简单的方法可能是以启动脚本的形式提供任务,如 here 所述

GCE 实例可以通过向 GAE 发出 http 请求来报告工作状态。

或者,您可以使用sub/pub 在 GAE 和 GCE 之间进行通信。在这种情况下——除非你假设用户打开了浏览器并显示了一个进度页面并且这个页面会拉取 GAE 进行更新——你可能需要设置一个cron job on GAE 来检查已完成的任务并采取相应的行动。

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 2018-07-31
    • 2020-04-30
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多