如何创建一个短期的单一任务 Google Compute Engine 实例?

How do I create a short-lived, single task Google Compute Engine instance?

问题:如何创建轻量级按需实例,使用 Java8 和我的代码进行预配置,pull 来自任务队列的任务,执行内存密集型任务,然后关闭自己下来。 (按需、高内存、中 cpu、单任务执行器)

历史:我在 Java 中成功地使用 Google App Engine Task Queue 来 "bursty" 处理相对罕见的事件 - 也许每周一次有人会提交一个表单,该表单会创建 ~10 个任务,系统会消耗一些内存和 CPU 循环思考任务几分钟,保存结果,网页将轮询后端以完成。它在 Google App Engine 中运行良好 - 自动缩放将删除所有空闲实例,任务队列将处理完成处理,我将通过设置 max-concurrent-requests=1 确保不会超载,并且生活是美好的!

但是后来我的任务变得过于占用内存,例如-class:F4_1G我很想选择内存更多的东西,但这不是一个选择。所以我得想个办法。

认为 我最好的选择是使用 API com.google.api.services.compute.model.Instance 启动一个通用实例,但停在那里。 Task Queue 的构建如此简单让我被宠坏了,我不想迷失在杂草中只是为了获得更高的内存实例——我不需要集群,而且 不需要需要任何可靠性

  1. 这是 docker 容器的东西吗?
  2. 从 GAE 之外的 Pull Queue 中拉取是否会很难授权?
  3. 如果任务大约需要 10 分钟,则为每个任务旋转 up/down 一个实例(容器?)是不是很疯狂?

我发现了一些类似的问题,但没有找到非常合适的答案:

我会阅读有关 GAE 模块的内容。这些可以设置为使用基本缩放,以便按需创建实例,然后在一段时间后过期,由您在应用引擎中设置-web.xml 使用诸如:

<basic-scaling>
 <max-instances>2</max-instances>
 <idle-timeout>5m</idle-timeout>
</basic-scaling>

如果模块处理来自任务队列的请求,那么它有 10 分钟的时间来完成它的工作,这对于许多任务来说可能足够了。