我们的应用广泛依赖后端实例。有一些逻辑必须每隔几秒运行一次。此代码的执行不能仅由到达前端的请求驱动,因为它需要无论如何都运行。
我们只考虑使用任务队列来解决这个问题。但据我们所知,任务队列只保证任务会在 24 小时内执行。不过,我还没有找到支持这一点的参考。
我们的应用程序使用固定数量的常驻 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();
}
});