【问题标题】:GAE keeps two instances idling, but why?GAE 让两个实例处于空闲状态,但为什么呢?
【发布时间】:2020-01-24 22:01:18
【问题描述】:

上下文:我运行具有自动缩放功能的 Google App Engine 应用程序。唯一的常规工作负载是每 5 分钟运行大约 10 秒的 cron 作业,通常没有其他请求需要处理。然而,GAE 几乎一直保持两个实例并行空闲。

问题: 有人知道为什么 GAE 会保持两个空闲实例处于活动状态吗?是否有可能找出导致新实例启动的原因?

补充信息:我熟悉文章Scaling dynamic instances,并且已经尝试从应用程序日志中得出为什么新实例会启动,但找不到任何线索。我的 app.yaml 看起来像这样:

runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /_ah/queue/deferred
  script: google.appengine.ext.deferred.deferred.application
  login: admin

# some more url handlers...

libraries:
- name: webapp2
  version: latest
- name: jinja2
  version: latest

builtins:
- deferred: on

【问题讨论】:

  • 你能出示你的app.yaml吗?
  • 正如@DanCornilescu 提到的,如果您能分享您的app.yaml 配置文件,那就太好了。但是,当您使用自动缩放时,您很可能正在使用 min_idle_instances element
  • 我已经添加了我的 app.yaml
  • 这是你的完整版app.yaml?我看不到您的自动缩放设置。您能否用缺少的部分更新它。
  • 好吧,我没有指定任何自动缩放设置。

标签: google-app-engine instance autoscaling


【解决方案1】:

很难确定实例按其当前方式扩展的确切原因,因为可能涉及其他因素。

我已尝试通过创建一个每 5 分钟运行的简单作业来重现您的案例。默认情况下使用简单的 app.yaml 和缩放设置(自动缩放),但它保留 1 个空闲实例。

所以我又试了一次,这次我在 app.yaml 上使用了“warmup”设置(这会阻止实例一次全部迁移),这次行为发生了变化:第一个小时 App 引擎只保留一个实例空闲,然而,一个小时后开始保持 2 个实例空闲。

我的结论是因为你没有指定缩放设置,所以它属于“自动缩放”的默认值,所有预设都是自动的,这意味着缩放是由谷歌管理的.因此,一段时间后,Google 的算法会评估您的应用程序并决定应用它认为最有效的缩放设置。

我相信在您的情况下,缩放与每个作业执行之间的短时间和实例当时必须执行的工作负载有关,您可以尝试更改每个作业执行之间的时间或设置自己的缩放逻辑.

如果您想设置自己的扩展,如果您不想拥有两个空闲实例,可以将带有“max_idle_instances”的“automatic_scaling”元素配置为一 (1)。

示例 app.yaml:

service: my-service
runtime: python27
api_version: 1
instance_class: F2
automatic_scaling:
  max_idle_instances: 1

请记住,根据文档,您不能将“max_idle_instances”设置为零(它只接受 1-1000 或自动之间的值)。由 cron 作业生成的实例可能会保持空闲状态,因为该作业非常频繁(每 5 分钟),因此您可以尝试使用属性“idle_timeout”和“max_instances”设置“basic_scaling”。

示例 app.yaml:

service: my-service
runtime: python27
api_version: 1
instance_class: B8
basic_scaling:
  idle_timeout: 1m

之前的配置会在 1 分钟后关闭未使用(空闲)的衍生实例。

【讨论】:

  • 感谢您的回复。不过,它并不能完全回答我的问题。为什么 GAE 在几乎没有负载的情况下保持 2 个实例处于空闲状态。
  • 您好,我已经更新了我的答案,请记住,为什么您有 2 个空闲实例的确切原因可能取决于 cron 作业期间正在执行的其他因素以及 Google 算法的逻辑用于自动扩展您的应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多