Configura solicitudes de preparación para mejorar el rendimiento

Puedes usar solicitudes de preparación para reducir la latencia de solicitudes y respuestas durante la carga del código de tu app en una instancia recién creada.

Con frecuencia, App Engine necesita cargar el código de tu app en una instancia nueva. La carga de una instancia puede suceder en las siguientes situaciones:

  • Cuando vuelves a implementar una versión de tu app.
  • Cuando se crean nuevas instancias debido a que la carga de solicitudes supera la capacidad del conjunto actual de instancias en ejecución.
  • Cuando se realizan reparaciones y mantenimiento de la infraestructura subyacente o del hardware físico.

Cuando cargas el código de tu app en una instancia nueva, pueden generarse solicitudes de carga. Las solicitudes de carga pueden provocar una mayor latencia de solicitudes para tus usuarios. Puedes evitar esta latencia si usas solicitudes de preparación. Estas cargan el código de tu app en una instancia nueva antes de que le lleguen solicitudes reales.

Si habilitaste las solicitudes de preparación en tu aplicación, App Engine intenta detectar cuándo esta necesita una instancia nueva y envía una solicitud de preparación para inicializarla. Sin embargo, estos intentos de detección no funcionan en todos los casos. Por eso, es posible que encuentres solicitudes de carga incluso si habilitaste las solicitudes de preparación en tu app. Por ejemplo, si tu app no entrega tráfico, la primera solicitud que reciba siempre será una solicitud de carga, no una solicitud de preparación.

Las solicitudes de preparación usan horas de instancia como cualquier otra solicitud para tu aplicación de App Engine. En la mayoría de los casos en los que se habilitan las solicitudes de preparación, no se observa un aumento en las horas de instancia porque la aplicación simplemente se está inicializando con una solicitud de preparación y no de carga. Tu uso de horas de instancia puede aumentar si decides hacer más trabajo, como almacenar datos en caché previamente durante una solicitud de preparación. Si estableces un número mínimo de instancias inactivas, es posible que encuentres solicitudes de preparación cuando esas instancias se inicien por primera vez, pero permanecerán disponibles a partir de ese momento.

Habilita las solicitudes de preparación

El programador de App Engine, que controla el ajuste de escala automático de las instancias según la configuración que proporciona el usuario, usa las solicitudes de preparación. Cuando estas están habilitadas, App Engine envía solicitudes GET a /_ah/warmup. Puedes implementar controladores en esta solicitud a fin de que realicen tareas específicas de una aplicación, como almacenar previamente en caché los datos de la aplicación.

El programador inicia instancias cuando determina que se necesitan más instancias. Las solicitudes de preparación pueden aparecer en los registros incluso si están inhabilitadas porque el programador las utiliza para iniciar instancias.

Ten en cuenta que no hay garantía de que se llame a las solicitudes de preparación. En algunas situaciones, se envían solicitudes de carga en su lugar (por ejemplo, si la instancia es la primera que se inicia o si el tráfico aumenta de manera repentina). Sin embargo, si las solicitudes de preparación están habilitadas, el sistema hará todo lo posible para enviar las solicitudes a instancias que ya estén preparadas.

Para habilitar las solicitudes de preparación, agrega el elemento de warmup bajo la directiva inbound_services en tu archivo app.yaml, por ejemplo:

inbound_services:
- warmup

Crea tu controlador

Crea un controlador que procese las solicitudes que se envían a /_ah/warmup. Tu controlador debe realizar cualquier lógica de preparación que necesite tu app.

Por ejemplo, si vas a utilizar Express.js, tu controlador deberá verse así:

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);

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación del entorno estándar de App Engine para Node.js