Configura solicitudes de preparación para mejorar el rendimiento

Utiliza solicitudes de preparación para evitar la latencia entre solicitudes y respuestas durante el tiempo en que el código de tu app se carga en una instancia recién creada.

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

  • Cuando vuelves a implementar una versión de tu app
  • Cuando se crean instancias nuevas 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 generar una mayor latencia de solicitudes para tus usuarios, pero puedes evitar esta latencia si utilizas solicitudes de preparación. Estas cargan el código de tu app en una instancia nueva antes de que las solicitudes reales lleguen a esa instancia.

Si habilitaste las solicitudes de preparación en tu aplicación, App Engine intenta detectar el momento en que la aplicación 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 está entregando tráfico, la primera solicitud que reciba siempre será una solicitud de carga, no una solicitud de preparación.

Las solicitudes de preparación utilizan 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 proporcionada por el usuario, utiliza las solicitudes de preparación. Cuando 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 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);

Pasos siguientes

Los ejemplos anteriores proporcionan un marco de trabajo que puedes utilizar. A continuación, decide qué lógica necesitas en tus controladores de solicitudes de preparación.

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

Enviar comentarios sobre...

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