3

我有一个在应用程序引擎 java 上运行的基于 spring 的 Web 应用程序,它接收大约 1 次命中/分钟。

不幸的是,应用引擎调度程序会杀死空闲超过 10 秒左右的实例。因此,对我的站点的每个请求大约需要 30 秒才能完成,同时会加载一个新的动态实例。

但是,尝试使用常驻实例时,请求永远不会转到常驻实例。不管有多少常驻实例(我尝试了最多 4 个),一个新请求总是会产生一个新的 Dynamic 实例,因此即使有 4 个空闲实例,一个请求也必须等待 30 秒。

空闲实例和延迟的哪些设置可以让我的应用程序始终运行,这样我每分钟收到的奇数 1 个请求都会遇到一个暖/实时实例。

4

2 回答 2

1

到目前为止,我已经处理此类问题超过 6 个月,命中率/分钟与您的相似,可能略高一些,以及我在 F1 中找到的最佳设置并且没有破坏银行(但相比起来仍然很昂贵与其他提供更好性能的托管服务)是:

min idle instances = 1
max idle instances = 1
min pending latency = 15s
max pending latency = 15s

如果每个实例的内存消耗超过 128MB,那么您可以考虑选择 2 或 3 作为最大空闲实例。

根据我的经验,在这种配置下,一些请求将由常驻实例处理,而其他一些请求将由一个新的动态实例处理,如果运气好的话,如果应用引擎之前提供过预热请求,它就会预先加载,获得比通常的 30 秒更好的响应时间(如果不是 DeadlineExceededException)。
但是会有一些请求会运行新的加载实例,这是使用自动缩放不可避免的。有一种非常新颖的东西叫做手动缩放,它是可配置的,但它会增加你的应用程序的复杂性,并且不会解决这个严重的性能问题的根本原因。

我很遗憾谷歌无法为使用 Spring、Guice 等 DI 框架的 Java 应用程序提供体面的服务......因为您可以查看多个论坛和许多关于这个问题的开放线程,其中一些是两年多以前的问题.
不管你对Spring 的优化有多好,不幸的是,在许多情况下,对于 google app engine for java 中的专业应用程序来说,等待时间仍然是不可接受的

于 2014-02-05T04:40:51.913 回答
0

不要使用谷歌应用引擎。请改用 IaaS。在如此小的规模下,您不需要自动缩放。你确实需要更多的控制权。

于 2015-10-26T02:36:34.300 回答