在标准环境中运行至少1个Google-App-Engine实例

时间:2019-07-17 08:14:47

标签: google-app-engine google-cloud-platform

从Google-App-Engine的两个环境(标准和弹性)来看,标准提供的大多数功能似乎更适合我的用例。

根据https://cloud.google.com/appengine/docs/the-appengine-environments,标准环境和flex环境都支持自动缩放,而标准可以缩放至0个实例,而flex可以缩放至1个实例。

根据https://cloud.google.com/appengine/docs/standard/nodejs/config/appref,自动缩放的选项是指定在任何给定时刻运行的实例的最小/最大数量。我本来以为这会“覆盖”标准环境扩展到零的能力,但是在我的服务在15个小时内没有看到流量之后,它仍然关闭了最后一个实例。

我的app.yaml文件中具有以下配置设置。

runtime: nodejs10
automatic_scaling:
   min_instances: 1
   max_instances: 1 # Increase in production
   target_cpu_utilization: 0.95

我试图在测试期间随时强制GAE具有1个正在运行的实例。我意识到运行静态实例数并不是自动扩展的重点,但是我计划在移至生产环境时增加最大实例数。我也尝试将min_idle_instances:1添加到设置中,没有任何区别。

是否可以在任何时候强制标准环境至少运行1个实例?

1 个答案:

答案 0 :(得分:0)

一种确保实例可以使用的方法是配置 warm up request

请记住,即使有热身请求,您也可能会遇到加载请求。如果您的应用没有流量,则第一个请求将始终是加载请求,而不是预热。因此,我认为处理这种情况的最佳方法是设置2个min_instances。

  • express.js处理程序的示例:

    js
    const express = require('express');
    const app = express();
    
    app.get('/_ah/warmup', (req, res) => {
    // Handle your warmup logic. Initiate db connection, etc.
    });
    
    // Rest of your application handlers.
    app.get('/', handler);
    app.listen(8080);
    
  • app.yaml添加示例:

      inbound_services:
      - warmup
    

一种解决方法是使用 cron job ,该触发器每分钟触发一次,因此您的实例可以为您服务。但是,即使采用这种方法,2 min_instance是更好的解决方案。