0

几周前,我在 App Engine 上的应用刚刚开始将空闲实例的数量增加到不合理的数量,即使流量接近于零。这当然会影响我飞涨的账单。

我的应用程序是一个简单的 Node.js 应用程序,提供连接到我的 CloudSQL 数据库的 GraphQL API。

为什么要启动所有这些空闲实例?

我的 app.yaml:

runtime: nodejs12
service: default

handlers:
  - url: /.*
    script: auto
    secure: always
    redirect_http_response_code: 301

automatic_scaling:
  max_idle_instances: 1

监控截图:

在此处输入图像描述

在此处输入图像描述

4

3 回答 3

3

这是非常奇怪的行为,根据文档,它应该只是暂时超过max_idle_instances.

注意:在负载峰值后恢复到正常水平时,空闲实例的数量可能会暂时超过您指定的最大值。但是,您不会为超过您指定的最大数量的实例付费。

一些可能的解决方案:

  1. 在控制台中确认实际的 app.yaml 配置与应用引擎控制台中的相同。

  2. 设置min_idle_instances为 1 和max_idle_instances2(临时)并重新部署应用程序。可能只是在扩展方面出了点问题,重新部署应用程序可以解决这个问题。

  3. 如果关闭空闲实例有任何问题,请检查您的日志记录(过滤应用程序引擎)。

  4. 最后,您可以调整设置,例如max_pending_latency. 我见过人们构建的应用程序需要 2-3 秒才能启动,而在启动另一个实例之前,默认是 30 毫秒。

  5. 这篇文章建议设置以下内容,您可以尝试:

    instance_class: F1
    automatic_scaling:
      max_idle_instances: 1  # default value
      min_pending_latency: automatic  # default value
      max_pending_latency: 30ms
    
  6. 切换到basic_scaling,让 Google 确定最佳缩放算法(最后的选项)。这看起来像这样:

    basic_scaling:
      max_instances: 5
      idle_timeout: 15m
    

解决方案当然也可以是 2 和 4 的组合。

于 2020-10-15T09:37:20.060 回答
1

24小时后更新:

我遵循了@Nebulastic 建议,第 2 和第 4 条,但没有任何区别。因此,我沮丧地禁用了整个 Google App Engine(App Engine > 设置 > 禁用应用程序)并将其关闭 10 分钟,并在监控仪表板中确认一切都已失效(对不起,用户!)。

10 分钟后,我再次启用了 App Engine,它只启动了 1 个实例。从那以后我一直在密切关注它,现在看来(终于)好了。现在重新启动后,它还遵守“最小”和“最大”空闲实例配置——来自@Nebulastic 的建议。谢谢!

截图:

在此处输入图像描述

在此处输入图像描述

于 2020-10-16T06:52:33.097 回答
0

您是否检查过以确保没有一堆旧版本仍在运行?https://console.cloud.google.com/appengine/versions

检查服务下拉列表中的每个服务

于 2020-10-15T20:56:14.537 回答