Tag: 自动缩放

为什么更多请求转到新(动态)实例而不是驻留实例?

在App Engine标准环境中使用自动扩展的Java应用程序。 现在,缩放配置如下: F2 1 2 2000ms 8000ms 60 刚刚开始尝试F2实例,之前正在使用F1实例。 无论我如何配置自动缩放,似乎新创建的实例(在负载增加时创建)开始获取所有传入请求,而驻留实例的负载非常轻。 为什么是这样? 当然,我无法实时监控流量(以及它去哪个实例),但每次看起来故事都是一样的。 我在下面提供了一些示例截图。 在下面的例子中,三个实例(这与上面的配置略有不同)是免费的,但GAE的负载均衡器选择将所有请求发送到具有最高延迟的实例! 还有一个例子:这是今天上午10:15:45开始的驻留实例的请求日志: 以及10秒后启动的动态实例的请求日志: 正如您所看到的那样,动态实例正在处理所有请求(到目前为止为1889年),而驻留者基本上处于空闲状态(在同一时间段内为7)。 如果不是因为驻留实例似乎被破坏并且在创建 新动态实例的时候 重新创建 ,那么这仍然可以。 这意味着一分钟左右的所有请求都会看到10-20秒的响应时间。 有人可以向我解释如何配置? 这就是我想要的: 一个空闲实例应该能够在大多数时间处理负载(现在)。 当有更多请求进入时,请启动其他实例。 准备就绪后 ,开始将流量转移到它。 我试图在预算不足的情况下运行一个合理负载的网站,所以我尽量保持尽可能接近免费配额是很重要的。 更新1 由于两个答案都突出地讨论了热身请求,我想我会在这里列出有关它的详细信息。 我正在使用ServletContextListener来处理初始化。 它执行以下操作(使用Guava的Stopwatch类收集时间,并且是我编写的代码/显式调用的代码): 注册Objectify实体(1.449 s) Freemarker init 229 ms Firebase init 228.2 ms 除了我有Shirofilter,Objectifyfilter和泽西filter(在泽西岛我通过显式注册类而不是给它一个扫描包来避免类路径扫描(我认为))在我的web.xml配置。 不使用任何dependency injection来避免类路径扫描。 /_ah/warmup请求需要7.8s(从上面的时间开始)。 但是,一个刚刚启动的动态实例提供服务的请求需要10秒多才能完成,尽管这些相同的调用在两分钟后需要200-700毫秒。 那么除了我在StartupListener明确做的事情之外,后台还有什么呢? 这是日志的第1部分 ,这是日志的第2部分 。