【问题标题】:GAE: Why do I experience loading requests even though I have fixed the number of instances to exactly one?GAE:为什么即使我已将实例数固定为一个,我仍会遇到加载请求?
【发布时间】:2012-12-30 12:16:43
【问题描述】:

我有一个低负载应用程序,由于加载请求而出现延迟高峰(请求最多需要 10 秒才能返回),如日志所示:

此请求导致为您的应用程序启动一个新进程,从而导致您的应用程序代码首次加载。

这里我假设“新进程”的意思是“新实例”。

为了避免这种情况,我将空闲实例的数量固定为正好 1 个(max=1 和 min=1),因此始终有一个实例在运行(“驻留实例”),GAE 不应启动新实例.计费已启用。

但是,我仍然遇到加载请求。为什么?对此有什么可做的吗?

【问题讨论】:

  • 您是否启用了计费功能?
  • 是的,我已启用结算功能。
  • 您的实例是否正在关闭?我的负载非常低的应用程序经常让其单个实例被调度程序关闭——通常只是在它启动后几分钟。很久以前,我在 GAE Google Groups 中开始了一个关于此的主题。并不孤单。像往常一样,来自谷歌的蟋蟀。 Groups 线程的结论是低 qps 应用程序将遭受异常的调度程序行为。这意味着由于启动时间的原因,Java 对于此类应用程序来说是完全“不行”的。
  • 好吧,我总是有一个实例在运行(设置空闲实例的数量 min=1),并且我已将 Pending 延迟设置为最大值(因此请求应该等待而不是触发新实例)。即便如此,GAE 还是决定根据请求启动新实例(为什么?),然后大约需要 10 秒来初始化。

标签: google-app-engine


【解决方案1】:

空闲实例是“保留”实例 - 它们旨在处理流量增加时的峰值,而不是“正常”流量。空闲实例仅在动态实例启动期间使用。

因此,当您有一个空闲实例且没有动态实例正在运行并且您收到请求时,空闲实例应该处理该请求,但仍会启动一个新的动态实例。

【讨论】:

  • 正确。而且因为你总是为你使用的东西付费,空闲的实例几乎没有花费你:)。
  • 谢谢。但由于某种原因,空闲实例不处理请求,因此我收到了加载请求。我可以做些什么来避免加载请求的高延迟?我有需要阻止的 REST 调用,并且等待 10 秒是不可接受的。
  • 更新:我增加了“待定延迟”以避免创建新实例。这会有帮助吗?
【解决方案2】:

我的低流量应用程序也遇到了同样的问题,这里有一个实用的解决方案,几乎总是可以防止我的用户面临冷启动: - 1 个常驻 F4 实例 - 等待延迟到 15 秒 - 我的工作是为了让我的热身请求尽可能快(不到 10 秒),但仍然很长,因为我使用框架 Play(Java) - 当我真的不想遇到任何问题时,我会通过 ping 我的应用程序来创建虚假流量。

使用此配置,常驻者通常服务大约 50 个请求,在此期间,动态实例接收预热然后开始服务。

【讨论】:

  • 虚假流量只会让你多花钱
猜你喜欢
  • 2013-01-01
  • 2019-04-08
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
相关资源
最近更新 更多