【发布时间】:2013-05-01 20:15:32
【问题描述】:
我们的应用广泛依赖于backend instances。有一些逻辑必须每隔几秒运行一次。这段代码的执行不能只由到达前端的请求驱动,因为它需要运行。
我们只考虑使用task queues 来解决这个问题。但据我们所知,任务队列只保证任务会在 24 小时内执行。不过,我还没有找到支持这一点的参考。
我们的应用使用固定数量的 resident B1 后端实例。我们假设每个实例在后端版本部署并启动后 24/7 保持活动状态。
- 这是一个有效的假设吗?如果没有,是否可以在每次关闭后端实例时通知我们的应用程序?
- 关于后端实例可用性的 SLA 是什么?
- 后端实例终止后是否会自动重启?例如。实例内存不足会自动重启吗?
- 如果实例都被终止,它们会以多快的速度重新启动?
- 我们在每个后端实例上创建一个固定大小的线程池。我们可以在后端实例上拥有的线程池大小是否有上限?
- 是否存在其他可能导致后端实例死亡的情况?
谢谢!
更新
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