Google App Engine何时启动或停止实例?

时间:2013-07-23 13:05:27

标签: google-app-engine go

我们有一个App Engine应用程序,每秒平均处理0.5个请求,似乎所有这些请求都可以由运行Go应用程序的同一个实例作为主要版本处理。

然而,有时App Engine启动第二个实例(有时甚至是第三个实例),这似乎在处理一个或两个请求之后没有做任何事情。这是一个例子。

enter image description here

手动关闭该实例似乎没有造成任何伤害,所以我的问题是,为什么App Engine在一段时间内没有得到任何请求后才会杀死实例? (上面的示例在过去一小时内有四个请求,通常请求/年龄比率甚至更低)。

更新

类似的情况是在不同版本上启动实例时。在小时没有收到任何请求后,App Engine似乎只会终止该实例。

在应用程序设置→性能

  • 空闲实例设置为自动 - 20
  • 等待延迟设置为 150ms - 250ms

2 个答案:

答案 0 :(得分:4)

我希望我知道控制是否/何时杀死空闲实例,但我看不到任何文档。

为了避免多余的实例开始,我认为你可以做的主要是增加待决延迟

  

Pending Latency滑块控制请求在由应用程序的默认版本的实例提供服务之前在待处理队列中花费的时间。如果最小挂起延迟很高App Engine将允许请求等待而不是启动新实例来处理它们。这可以减少应用程序使用的实例小时数,但可能会导致更多用户可见的延迟。

即使你只平均4个请求/小时,如果你碰巧得到两个紧密间隔,我想它可能会启动一个新实例。

您还可以在日志中看到有关其启动新实例的原因的一些少量信息。

答案 1 :(得分:2)

"How Applications Scale"州的Google App Engine documentation部分:

在实例中扩展

每个实例都有自己的传入请求队列。 App Engine监视每个实例队列中等待的请求数。如果App Engine检测到应用程序的队列由于负载增加而变得太长,它会自动创建应用程序的新实例以处理该负载。

App Engine还会在请求数量减少时反向缩放实例。这种扩展有助于确保所有应用程序的当前实例都被用于最佳效率和成本效益。

它还声明您可以在管理控制台中“specify a minimum number of idle instances”和“optimize for high performance or low cost”。

尝试将“空闲实例”字段设置为3 - 5,并“优化以降低成本”并查看是否会影响实例终止时间。