我是Google AppEngine上“Always On”选项的订阅者。我不明白为什么当已经打开“Always On”实例并且不当时有大量请求时,GAE必须启动新实例。
这让我很疯狂,因为它使我对AlwaysOn订阅的结果无效。任何想法如何解决这个问题?我有延迟问题,因为我想通过使用AlwaysOn删除。我正在考虑取消订阅,因为它不起作用。
答案 0 :(得分:3)
AlwaysOn唯一能做的就是确保始终有一些实例来满足您的请求,即使您的应用程序经历了长时间没有任何流量。至少据我所知,当涉及App Engine用于确定是否需要新实例的缩放算法时,它不会改变任何内容。
不幸的是,人们对GAE的这种行为的细节知之甚少(即决定何时开始新实例)。可能是你的应用程序最近有很多流量,昨天在同一时间有大量流量,同一个工作日上周同时流量很大,等等。这些因素中的任何一个(很可能是很多)更多未知的)可能会影响GAE代表您的应用程序的实例数。
我可以同情你对延迟问题的抱怨,但根据我的经验,AlwaysOn功能减少了很多。然而,必须记住,低延迟不是GAE作为服务的优先级 - 它能够在不需要显式扩展的情况下始终如一地处理巨大的流量。
答案 1 :(得分:0)
我认为这并不一定会使Always On的好处无效,大概是用户应该不那么频繁地等待一个新的实例来提升他们的请求。
如果您启用了Warmup Requests,即使您的持久实例可以处理当前负载,App Engine也可能以预期的方式启动新实例。在这种情况下,动态实例的存在并不意味着用户的请求被阻止等待实例加载。
我建议添加足够的日志记录来判断动态实例是否实际上是在启动时为用户请求提供服务。如果是这样,他们在做什么?也许您有一个动态页面,必须调用几个额外的动态处理程序才能呈现所有页面资源。这可能会导致意外的流量高峰。
答案 2 :(得分:0)
我想在google-app-engine群组(Link)上发布的相同问题上添加给我的答案。它帮助我降低了当时存在一些活动节点时创建新节点的概率。
你有“threadsafe”设置为true吗?如果不这样做,每个实例都只会 一次处理一个请求。
它给了我很多帮助 - 如果你和我一样有问题,试一试。 Using_Concurrent_Requests