【问题标题】:Google App Engine - automatic-scaling with always on instance?Google App Engine - 始终在实例上自动扩展?
【发布时间】:2016-06-12 23:58:27
【问题描述】:

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

据我所知,您有这些基于docs 的选项:

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

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

使用 basic-scaling 并将 idle-timeout 设置为 24 小时或 48 小时。

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

使用 automatic-scalingmin-idle-instances 并启用预热请求。

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

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

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


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

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

目前,我的临时解决方案是将我的应用设置为 manual-scaling 和 1 个实例,这样至少我的应用可供新用户使用。

【问题讨论】:

  • 有点hackish但是:通过stackdriver配置健康检查。每隔几分钟免费请求一次,让您的实例保持活跃
  • @zapl 你能提供更多关于你是如何设置它的信息吗?
  • cloud.google.com/monitoring/quickstart-lamp#gs-checks(或任何其他定期发出简单 http(s) 请求的正常运行时间检查)
  • @zapl 我发现您的 stackdriver 方法没有将实例保持在...
  • 似乎对我有用,花了一段时间,但检查启动了一个空闲的 gae 应用程序并保持它运行至今。

标签: java android google-app-engine


【解决方案1】:

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

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

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

【讨论】:

  • 您能否分享您用于完成此操作的 appengine-web.{xml|yaml} 文件的相关内容?我很好奇。
  • @CydeWeys 里面确实没有任何与此相关的内容。只需查看有关如何设置 cron 作业的链接 - 就在那里。
  • 这真的是唯一的方法吗?它不能在配置中完成吗?感谢您分享您的答案
  • 我只想让这个线程保持活力,因为老实说这太疯狂了。我的意思是我们还设置了一项服务,每 5 分钟对我们的站点进行一次 ping 操作,以避免冷启动实例,但我的意思是,这是一个疯狂的解决方案。奇怪的是,以快速响应为生的 Google 正在出售一项服务,如果该网站 15 分钟未访问,他们自己的 Lighthouse 就会抱怨......
  • 这不是只向给定端点发送一个请求,而是只在池中的 一个 实例上发送一个请求吗?例如,如果您将 min_instances 设置为 2,那么您实际上只保持这两个实例中的 1 个“温暖”,对吗?
猜你喜欢
  • 2015-10-27
  • 1970-01-01
  • 2013-11-02
  • 2017-01-09
  • 1970-01-01
  • 2016-09-02
  • 2011-03-09
  • 2011-05-15
  • 1970-01-01
相关资源
最近更新 更多