最近,我看到GAE处理请求的时间比一周前要长得多。我的代码没有任何变化,但GAE现在需要4000-12000毫秒来响应请求。更糟糕的是,我有大量的实例可以提供0个请求 还有其他人看到过这种情况吗? 我该怎么做才能解决这个问题?我已经做了15个额外的实例(并通过鼻子为他们付费),但似乎没有任何东西可靠地向其他空闲实例发送请求。 我的账单从70-90c /天变为$ 5-8 /天,没有任何代码更改或流量增加。事实上,由于存在巨大的延迟,我正在失去流量。
QPS* Latency* Requests Errors Age Memory Availability
0.000 0.0 ms 1378 0 10:10:09 57.9 MBytes Dynamic
0.000 0.0 ms 1681 0 15:39:57 57.2 MBytes Dynamic
0.017 9687.0 ms 886 0 10:19:10 56.7 MBytes Dynamic
答案 0 :(得分:1)
我建议安装AppStats,以了解每个请求中需要花费多长时间的内容。我猜你有一些争用问题或一些新数据配置引起的大量读/写。
空闲实例无助于减少延迟 - 看起来每个请求都需要很长时间,每分钟少于一个请求(无论如何都是这个样本),10s请求可以在同一个实例上串行运行。
答案 1 :(得分:0)
我们的应用程序中存在类似的问题。在我们的例子中,我们认为GAE的调度程序在平衡对现有实例的请求方面表现不佳。
在某些情况下,调度程序决定启动新实例,而不是重新使用现有实例。由于旋转一个新实例需要5到> 45秒,我怀疑这可能是你发生的事情。
尝试调查以下内容并查看它是否对您有所帮助:
现在,回答关于sending all requests to same instance
的原始问题,据我所知,没有办法解决特定的前端实例,以便将请求定向到该特定实例。
您可以做的是迁移您的应用以使用后端实例而不是常规前端实例。后端提供了directly target any particular instance within it的方法。您可以在单个后端部署应用程序,以便更好地控制您生成的实例数。由于使用后端绕过调度程序,因此不会遇到因新实例启动而导致的延迟。
使用此方法的主要缺点是您失去了使用前端实例的自动扩展性优势。但是从低每日结算量来看,我认为可扩展性还不是您应用规模的主要问题。