从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个实例?
答案 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是更好的解决方案。