谷歌应用引擎 - 自动扩展与始终在实例?

2022-09-02 22:13:27

将GAE用于全新应用程序最令人讨厌的事情之一是,如果没有人在15分钟内访问您的服务器,则必须处理被触发的实例。由于该应用程序是新的,或者只有很少的用户,因此对于一些不知道实例正在“启动”的用户来说,将会有一段时间的延迟。

据我所知,您根据文档有以下选项:

使用手动扩展并将实例数设置为 1

当您使用 时,无论您将其设置为多少个实例,都将拥有 - 不多也不少。这显然是低效的,因为您可能会为未使用的实例付费,并且随着流量的增加/减少,实例不会自动添加/删除manual-scaling

使用基本缩放并将空闲超时设置为 24 小时或 48 小时。

只要有人在该时间段内至少查询一次您的 API,您的实例就会保持运行。

在启用最小空闲实例和预热请求的情况下使用自动扩展

这不能按预期工作。根据这些文档

如果你的应用未提供任何流量,则对应用的第一个请求将始终是加载请求,而不是预热请求。

这并不能解决我们的问题,因为如果零个实例正在运行,那么首先就没有什么可以预热的。因此,您仍然会在第一个请求上获得延迟。


我希望具有的预期效果是始终运行一个实例,然后在流量增加时从那里向上扩展(当然,还可以缩减,但永远不会低于一个实例)。这就像自动扩展,但始终有1个实例在运行。

这在GAE中可能吗?还是我错过了什么?

现在,我的临时解决方案是将我的应用程序设置为具有 1 个实例,以便至少我的应用程序可供新用户使用。manual-scaling


答案 1

我尝试并工作的一个解决方案是使用自动扩展并发出一个cron作业,该作业仅在servlet中每隔5分钟左右执行任何公共静态api方法(它可以只采用零参数并返回null)。

有关如何设置,请参阅此处:https://cloud.google.com/appengine/docs/java/config/cron#creating_a_cron_job

这为您提供了 28 个免费实例小时的优势,而使用手动扩展的 8 小时


答案 2

推荐