【问题标题】:Availability of resident backend instances in Google App EngineGoogle App Engine 中常驻后端实例的可用性
【发布时间】:2013-05-01 20:15:32
【问题描述】:

我们的应用广泛依赖于backend instances。有一些逻辑必须每隔几秒运行一次。这段代码的执行不能只由到达前端的请求驱动,因为它需要运行。

我们只考虑使用task queues 来解决这个问题。但据我们所知,任务队列只保证任务会在 24 小时内执行。不过,我还没有找到支持这一点的参考。

我们的应用使用固定数量的 resident B1 后端实例。我们假设每个实例在后端版本部署并启动后 24/7 保持活动状态。

  • 这是一个有效的假设吗?如果没有,是否可以在每次关闭后端实例时通知我们的应用程序?
  • 关于后端实例可用性的 SLA 是什么?
  • 后端实例终止后是否会自动重启?例如。实例内存不足会自动重启吗?
  • 如果实例都被终止,它们会以多快的速度重新启动?
  • 我们在每个后端实例上创建一个固定大小的线程池。我们可以在后端实例上拥有的线程池大小是否有上限?
  • 是否存在其他可能导致后端实例死亡的情况?

谢谢!

更新

原来有几个问题可以通过阅读thedocs来回答。

App Engine 会尝试让后端无限期地运行。但是,目前无法保证后端的正常运行时间。

  • 那么正常运行时间的 SLA 是什么?我正在寻找类似这样的声明:“后端的保证正常运行时间为 99.99%”

App Engine 团队将在获得统计数据后就预期的后端正常运行时间提供更多指导。

  • 这些统计信息何时可用?

认识到关闭钩子并不总是能够在后端终止之前运行,这一点也很重要。在极少数情况下,可能会发生中断,导致 App Engine 无法提供 30 秒的关闭时间。

当 App Engine 需要关闭后端实例时,现有请求将在 30 秒内完成,新请求会立即返回 404。

以下代码示例演示了一个基本的关闭挂钩:

LifecycleManager.getInstance().setShutdownHook(new ShutdownHook() {
  public void shutdown() {
    LifecycleManager.getInstance().interruptAllRequests();
  }
});

【问题讨论】:

    标签: java python google-app-engine high-availability


    【解决方案1】:

    我只运行一个常驻(非动态)后端实例,我的经验是它每天至少重新启动一次。 您的应用程序必须能够存储其状态并在重启后恢复。

    【讨论】:

    • 感谢分享!我仍然希望得到更详细的答复。当前的文档(“App Engine 团队将在统计数据可用时就预期的后端正常运行时间提供更多指导。”)非常少。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 2014-02-26
    • 2017-07-26
    • 1970-01-01
    • 2013-04-24
    • 2018-02-20
    • 2012-02-21
    相关资源
    最近更新 更多