【发布时间】: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 启动一个通用实例,但在此停止。我对构建任务队列的简单程度感到非常满意,以至于我不想为了获得更高的内存实例而迷失在杂草中——我不需要集群,也不需要任何有点可靠性!
- 这是一个 docker 容器吗?
- 从 GAE 之外的 Pull Queue 中提取是否会很难进行身份验证?
- 如果一个任务大约需要 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