【发布时间】:2017-06-18 08:45:05
【问题描述】:
这与:How does Google App Engine Autoscaling work? 不同。
TLDR;我有一个 GAE 应用程序,它的端点必须等待一段时间才能返回。大约15秒。它在等待时并不是特别努力。由于第三方集成,我真的没有办法实现轮询或回调,而不是漫长的等待。
我担心漫长的等待时间会让 Google 认为我的负载很重,因此新的 gae 实例将毫无意义地生成,并且当我准备好处理实例时,请求可能最终排在队列中新作品。
文档告诉我“[是否启动新实例,以及是否将传入请求发送到队列或实例的决定] 考虑了可用实例的数量、应用程序的速度一直在服务请求(它的延迟),以及启动一个新实例需要多长时间”。
我希望 GAE 期望我的应用程序响应缓慢,但一切正常。
我只是在谷歌的文档中努力寻找一个直接的答案。
PS:我认为这行不通:
max_pending_latency:App Engine 应该等待的最长时间 在开始新的请求之前允许请求在待处理队列中等待 实例来处理它。默认值为“30ms”。
原因是:我说的是请求到达我的视图代码和我的视图代码返回之间的延迟。如果我允许在队列中等待 15 秒,那么客户端请求可能会被撞到队列中,然后当 GAE 认为我的应用程序负载过重(但不是)时就坐在那里,然后 GAE 最终会将请求发送到我的长时间等待视图这将等待很长时间才能返回任何东西,从而导致 GAE 吓坏了,并将更多的东西放在队列中,并试图产生更多的实例。
这是我认为正在发生的事情(大大简化)
- 请求到达
- gae 检查是否有可以处理它的实例。是的,它转到了 instanceA(现在会持续一段时间)
- 10 秒后另一个请求到达
- GAE 将其放入队列并检查 instanceA 是否可以处理它
- instanceA 似乎负载过重。 GAE 不会只是将请求发送到 instanceA
- 请求将在队列中等待一段时间
- 在某个时间点,请求将转到一个实例。任何一个:
- instanceA 最终返回,并且负载估计现在较低,因此 instanceA 得到它
- instanceB 已创建并提供新请求
这是我想要发生的事情:
- 请求到达
- gae 检查是否有可以处理它的实例。是的,它转到了 instanceA(现在会持续一段时间)
- 10 秒后另一个请求到达
- GAE 将其放入队列并检查 instanceA 是否可以处理它
- instanceA 不是很忙,所以请求转到那里
- 我感到工作做得好时散发出温暖的光芒
据我所知,在不产生一百万个实例且排队时间长的情况下,我可以让它工作的唯一方法是不使用 GAE
【问题讨论】:
-
我猜他们没有给出直接的答案,因为 1. 逻辑可能非常复杂,不容易在纸上表达 2. 如果他们确实写下了一个实际的公式,很可能在下一个版本中不正确:-)。我知道这不是很有帮助,但是...
-
@DanCornilescu 我认为这个问题不是那个非常普遍的问题的重复。 OP 有一个案例,我认为我们可以用具体的见解来回答/解决,就像我在下面尝试的那样,具体的配置。
-
@DanCornilescu 不是重复的。我添加了更多信息