Java 内部GAE调用之间的空闲时间导致谷歌应用程序引擎出现大峰值

Java 内部GAE调用之间的空闲时间导致谷歌应用程序引擎出现大峰值,java,google-app-engine,scalability,latency,Java,Google App Engine,Scalability,Latency,我们有一个带有谷歌应用程序引擎的API。过程如下所示。我们有两个使用objetify对数据存储的调用和一个使用urlfetch(对外部API)的调用 在许多请求中,我们看到响应花费的时间太长,因为数据存储调用和urlfetch调用之间存在空的时间间隔。有时空闲时间是在通话之后,有时在通话之前,有时在通话之间。我们可能有10秒的尖峰 当空闲时间在两次调用之间时的示例: 空闲时间在调用之前的示例: 这是当前配置: <appengine-web-app xmlns="http://appen

我们有一个带有谷歌应用程序引擎的API。过程如下所示。我们有两个使用objetify对数据存储的调用和一个使用urlfetch(对外部API)的调用

在许多请求中,我们看到响应花费的时间太长,因为数据存储调用和urlfetch调用之间存在空的时间间隔。有时空闲时间是在通话之后,有时在通话之前,有时在通话之间。我们可能有10秒的尖峰

当空闲时间在两次调用之间时的示例:

空闲时间在调用之前的示例:

这是当前配置:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>${appengine.web.application}</application>
<version>1</version>
<threadsafe>true</threadsafe>
<module>default</module>
<instance-class>F4_1G</instance-class>
<automatic-scaling>
<min-idle-instances>3</min-idle-instances>
<max-idle-instances>automatic</max-idle-instances>
<min-pending-latency>30ms</min-pending-latency>
<max-pending-latency>automatic</max-pending-latency>
</automatic-scaling>
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>
</appengine-web-app>

${appengine.web.application}
1.
真的
违约
F4_1G
3.
自动的
30毫秒
自动的
这并不是每次有人向我们的API发出请求时都会发生,只是偶尔会发生。我们的平均请求时间是600毫秒。此外,我们不会在两次调用之间进行任何其他操作

发生这种空闲时间是因为GAE不能正确扩展吗


[编辑]

我做了新的测试,试图理解为什么我会有这么高的延迟。我们做了两个测试,一个是最小的机器(F1),另一个是最大的机器(F4_1G)。代码由两个数据存储调用和一个到外部API的urlfetch组成

F1实例的结果:

F4_1G实例的结果:

正如您将看到的,在机器F1中存在一些高延迟请求,而在另一台机器中,一切正常。高延迟请求在两次调用之间有空闲时间,如我的第一个问题中所述。我假设F1实例内存不足,因为它较小,并且我们正在处理许多请求。所以我有3个问题:

1) 任何机器都应该产生这些高延迟。当实例重载时,GAE应该启动一个新实例或利用空闲实例。这是正确的还是我遗漏了什么

2) 原因可能是GAE不能正确缩放吗?(我希望不是因为那样GAE将是一个彻底的失败)。我们需要更改配置吗


3) 我用最大的机器解决了这个问题。当F4_1G机器出现这种延迟时,我应该怎么做?没有比这更大的机器了。

你能详细说明一下gae不能正常伸缩的“事实”吗?怎么会这样?@ZigMandel我不知道GAE是否正确缩放。我想这可能是问题所在,但我不知道。这就是我问的原因。你知道为什么会发生这种情况吗???gae的伸缩性很好。这就是gae存在的基本原因。@ZigMandel太好了,gae可以正常伸缩。你知道我为什么会有这个问题吗?不,对不起,我不知道。但我想澄清一下伸缩性问题,因为您最初将gae伸缩性不好称为一个“事实”(现编辑)