如何为低流量配置 google app engine java (1 hit/min)

Posted

技术标签:

【中文标题】如何为低流量配置 google app engine java (1 hit/min)【英文标题】:How to configure google app engine java for low traffic volumes (1 hit/min) 【发布时间】:2013-01-15 19:47:37 【问题描述】:

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

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

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

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

【问题讨论】:

我已经尝试过一件事,仍在尝试查看效果。 1) 将 min-max idle instances 设置为 1-1 2) 将 min-max 延迟设置为 15-auto 逻辑是它会强制调度程序向现有实例发送新请求,而不是积极创建新实例。 你的测试成功了吗?我有基本相同的问题,可能很长一段时间没有流量,然后突然出现大量流量,这导致多个按需实例启动。您可能要检查的另一件事是您正在使用的实例的大小。我使用的是 Spring 和 Jersey,它接近最小实例大小的 128MB 内存,这也可能导致 AppEngine 产生新实例。 【参考方案1】:

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

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

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

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

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

【讨论】:

【参考方案2】:

不要使用 Google App Engine。请改用 IaaS。在如此小的规模下,您不需要自动缩放。你确实需要更多的控制权。

【讨论】:

以上是关于如何为低流量配置 google app engine java (1 hit/min)的主要内容,如果未能解决你的问题,请参考以下文章

如何为我的App Engine应用设置自定义npm启动脚本?

如果Flask应用程序在Google App Engine中不可用,如何提供默认错误页面

使用 Google App Engine 作为后端的 Google Cloud Load Balancer 上的 GeoDNS 路由

如何处理 Google App Engine 中的秘密?

Google App Engine 自动缩放如何工作?

使用 Google App Engine 和 Google Cloud SQL 扩展 WordPress