如何为低流量配置 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 路由