对于一个全新的应用程序使用GAE最烦人的事情之一就是必须处理如果没有人在15分钟内打到你的服务器就被重新启动的实例。由于应用程序是新用户,或者只是用户很少,因此对于一些不知道实例正在运转的用户来说会有很长的延迟时间。#34;
据我所知,您可以根据docs:
选择这些选项 使用manual-scaling
并将实例数设置为1
。
当你使用manual-scaling
时,你设置它的实例数量就是你将拥有的 - 不多也不少。这显然是低效的,因为您可能正在为未使用的实例付费,并且当流量增加/减少时不会自动添加/删除实例
使用basic-scaling
并将idle-timeout
设置为24小时或48小时。
只要有人在该时间段内至少一次查询您的API,就会保持您的实例正常运行。
automatic-scaling
使用min-idle-instances
并启用预热请求。
这不按预期工作。根据这些docs:
如果您的应用没有投放流量,则第一次向该应用发出请求即可 永远是一个加载请求,而不是一个预热请求。
这并不能解决我们的问题,因为如果零实例正在运行,那么首先没有任何东西可以预热。因此,您仍然可以在第一次请求时获得延迟。
我想要的效果总是让一个实例运行,然后在流量增加时从那里扩展(当然缩小但从不低于一个实例)。这就像自动缩放,但总是运行一个实例。
GAE有可能吗?或者我错过了什么?
目前,我的临时解决方案是使用1个实例将我的应用设置为manual-scaling
,因此至少我的应用可用于新用户。
答案 0 :(得分:5)
我尝试和工作的一个解决方案是使用自动扩展并发出一个cron作业,它只需要每隔5分钟左右在servlet中执行任何公共静态api方法(它只需要零参数并返回null)。
请点击此处了解如何进行设置:https://cloud.google.com/appengine/docs/java/config/cron#creating_a_cron_job
这为您提供了28个免费实例小时与使用手动缩放8小时
的好处