【问题标题】:Why does GAE spawn new instances even though I have set min idle=1 and pending latency=max?为什么即使我设置了 min idle=1 和 pending delay=max,GAE 仍会生成新实例?
【发布时间】:2013-01-01 13:49:35
【问题描述】:

我有一个低负载/零星负载的应用程序,启动新实例(大约 10 秒)导致的延迟远远超过处理我的请求所需的时间,这通常在 500 毫秒内完成。

所以为了避免产生新实例(“加载请求”)导致的延迟峰值,我做了以下两个设置:

  • set min idle instances = max idle instances = 1,确保始终有一个实例在运行(一个实例足以处理我的流量);和
  • 将挂起延迟设置为 15 秒,以便 GAE 最多等待 15 秒,让一个常驻实例空闲,而不是启动一个新实例。

计费已激活。但是,GAE 仍会启动新实例,从而导致无法接受的延迟。这是为什么?

在日志中我可以看到我的请求总是在不到 500 毫秒内返回;一个请求不可能排队长达 15 秒。

对此我能做些什么?非常感谢任何帮助。

更新:我的解决方案是设置一个每 5 分钟发出一次请求的 cron 作业,以始终运行动态实例。事实证明(见下面的答案),空闲实例是为疯狂的负载峰值保留的,而不是我 99% 的时间处于低负载情况。

【问题讨论】:

    标签: java google-app-engine


    【解决方案1】:

    正如@koma 所说,app-engine 将创建一个动态实例以保持空闲实例的数量不变,但它不仅会创建一个新实例,而且还会立即使用它而不是使用空闲实例。 .如果你有一堆空闲实例,即使有一个请求进来,应用引擎实际上仍然更喜欢启动动态实例,并且会“保存”空闲实例以防出现疯狂的流量高峰。

    这是非常违反直觉的,因为您希望它使用已经闲置的实例来处理请求并为将来的请求启动动态实例,但这不是它的工作原理。

    【讨论】:

    • 非常感谢,这解释了它。您能否向我提供有关 GAE 决定是使用空闲实例还是启动新的动态实例的算法的更多信息?
    • @paul 很高兴听到它有帮助 - 不幸的是,据我所知,算法的细节并不公开,但这个视频(第二部分)应该很有帮助,它对我有很大帮助:@987654321 @
    【解决方案2】:

    如果您设置 min idle instances = 1,它肯定会在第一次请求时生成另一个实例......因为不再有任何空闲实例(它正忙于处理第一个请求!)。 而且既然启动了一个新的实例,还不如处理一些请求,不再空闲?

    另见Google App Engine Instances keep quickly shutting down

    【讨论】:

    • 这不是我的情况:请求由(以前的)空闲实例处理,而是由新生成的实例处理,导致高延迟。
    猜你喜欢
    • 2017-04-04
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 2012-08-26
    • 2014-04-28
    相关资源
    最近更新 更多