【问题标题】:How do I create a short-lived, single task Google Compute Engine instance?如何创建短暂的单任务 Google Compute Engine 实例?
【发布时间】:2016-08-16 16:28:11
【问题描述】:

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

历史:我成功地在 Java 中使用Google App Engine Task Queue 来“突发”处理相对罕见的事件 - 可能每周有人会提交一个表单,该表单创建了大约 10 个任务,系统会占用一些内存和 CPU循环考虑任务几分钟,保存结果,网页将轮询后端完成。它在 Google App Engine 中运行良好 - 自动缩放将删除所有空闲实例,任务队列将处理完成处理,我会确保不会通过设置 max-concurrent-requests=1 来使事情过载,生活很美好!

但是我的任务对于实例类来说太占用内存了:F4_1G ????我很想选择具有更多内存的东西,但这不是一个选择。所以我需要想办法。

认为我最好的选择是使用 API com.google.api.services.compute.model.Instance 启动一个通用实例,但在此停止。我对构建任务队列的简单程度感到非常满意,以至于我不想为了获得更高的内存实例而迷失在杂草中——我不需要集群,也不需要任何有点可靠性

  1. 这是一个 docker 容器吗?
  2. 从 GAE 之外的 Pull Queue 中提取是否会很难进行身份验证?
  3. 如果一个任务大约需要 10 分钟,那么为每个任务启动/关闭一个实例(容器?)是不是很疯狂?

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

【问题讨论】:

  • 您看过 App Engine Flexible environments 吗?它是 GCE/GAE 混合体,因此您可以通过 Compute Engine 的灵活性获得 App Engine 的自动扩展。不过,它仍是测试版。
  • 我真的很喜欢将 App Engine Standard 缩减到 0 - 如果我不使用任何任务工作者,它会闲置并且不会向我收取正常运行时间费用。 cloud.google.com/appengine/docs/flexible/java/…
  • 我会从 single task 执行的需求列表中删除 - 既不适合 GAE,也不适合 GCE 定价。一旦你启动了一个实例,不妨让它处理与一个孤立事件(如你的表单)相关的所有任务和请求,然后再明确地关闭它(GAE 的动态实例更有吸引力,因为你不这样做) '甚至不需要担心显式关闭实例)。

标签: java google-app-engine google-compute-engine task-queue


【解决方案1】:

我会阅读有关 GAE 模块的信息。这些可以设置为使用基本扩展,以便按需创建实例,然后在一段时间后过期,由您在 appengine-web.xml 中使用以下内容设置:

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

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

【讨论】:

    猜你喜欢
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    相关资源
    最近更新 更多