即使空闲实例可用,App Engine加载请求也是如此

时间:2012-06-13 19:05:30

标签: google-app-engine python-2.7

我有一个在App Engine上运行的简单应用程序,但我遇到了奇怪的延迟问题。这是一个Python 2.7应用程序,加载请求需要1.5到10秒(我想这取决于GAE的感受)。现在这是一个流量较低的站点,因此之前GAE没有空闲实例,大多数请求都是加载请求,导致第一页视图的等待时间很长。

我尝试将最小空闲实例数配置为“1”,以便这些不常见的页面视图可以立即命中一个热实例。

但是,我现在已经看到了几个案例,即使一个实例未使用,GAE也会将传入的请求路由到加载实例,而保持温暖的实例不变:

gae dashboard showing odd scheduling

如何防止这种情况发生?我觉得我必须理解错误,因为我当然不希望这种行为。

更新:此外,更难以理解的是该应用已启用线程安全,所以我真的不明白为什么GAE会慌乱并为一个单独的实例启动实例请求。

2 个答案:

答案 0 :(得分:1)

实际上,我认为这是正常行为。空闲实例应该保证始终可用的最小实例数(对于尖峰加载)。

因此,当某些请求开始进入时,它们最初由空闲实例提供服务,但同时AE调度程序将开始启动新实例,以便即使在突然增加的负载期间也始终保证相同数量的空闲实例。也就是说,为那些忙于处理请求的空闲实例“覆盖”。

详细介绍Adjusting Application Performance页。

答案 1 :(得分:0)

Arrrgh!我自己受苦。这个主题领域出现在几个主题(GAE组和SO)中。如果有人可以拨入低流量站点的设置(开/关计费),那将是一个真正的好处。 IIRC,我认为深度GAE体验的人在一个线程中注意到调度程序对于非常低容量的应用程序并不适用。我也在相对较短的时间内看到了截然不同的启动时间。几分钟之后看到旋转需要700毫秒然后7000毫秒的痛苦。总的来说,问题不在于我的成本,而在于基础设施资源的浪费。在测试中,我已经运行了两个实例,尽管每隔几分钟就用一次RPC来ping应用程序。如果50k其他开发人员进行类似的测试,那么这可能会累积成大量浪费。