Google App Engine - 始终在实例上自动扩展?

Mic*_*cro 10 java google-app-engine android

将GAE用于一个全新的应用程序最令人恼火的事情之一就是必须处理如果没有人在15分钟内命中你的服务器就被重新启动的实例.由于应用程序是新用户,或者用户很少,因此对于一些不知道实例正在"旋转"的用户来说,会有一段很长的延迟时间.

据我所知,你有基于文档的这些选项:

使用manual-scaling并设置实例数1.

当你使用时manual-scaling,你设置它的任何数量的实例都是你将拥有的 - 不多也不少.这显然是低效的,因为您可能正在为未使用的实例付费,并且当流量增加/减少时不会自动添加/删除实例

使用basic-scaling和设置idle-timeout为24小时或48小时.

只要有人在该时间段内至少查询一次API,这将使您的实例保持运行.

使用automatic-scalingmin-idle-instances和启用热身请求.

这不符合预期.根据这些文档:

如果您的应用没有提供流量,则对应用的第一个请求将始终是加载请求,而不是预热请求.

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


我想要的效果是始终有一个实例运行,然后在流量增加时从那里扩展(当然缩小但从不低于一个实例).这就像自动缩放,但总是运行1个实例.

这在GAE中是否可行?或者我错过了什么?

目前,我的临时解决方案是将我的应用程序设置为manual-scaling1个实例,因此至少我的应用程序可用于新用户.

Mic*_*cro 5

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

请参阅此处了解如何进行设置:https://cloud.google.com/appengine/docs/java/config/cron#creating_a_cron_job

这为您提供了28个免费实例小时的好处,而使用手动缩放的8小时

  • 这真的是唯一的方法吗?不能在配置中完成吗?感谢您分享您的答案 (2认同)