Configurar solicitudes de preparación para mejorar el rendimiento

Puedes usar solicitudes de calentamiento para reducir la latencia de las solicitudes y las respuestas durante el tiempo en el que se carga el código de tu aplicación en una instancia recién creada.

App Engine necesita cargar con frecuencia el código de tu aplicación en una instancia nueva. Una instancia se puede cargar en las siguientes situaciones:

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

Cargar el código de tu aplicación en una instancia nueva puede provocar solicitudes de carga. Las solicitudes de carga pueden provocar un aumento de la latencia de las solicitudes de los usuarios, pero puedes evitarlo con las solicitudes de calentamiento. Las solicitudes de calentamiento cargan el código de tu aplicación en una nueva instancia antes de que lleguen solicitudes activas a esa instancia.

Si las solicitudes de calentamiento están habilitadas en tu aplicación, App Engine intenta detectar cuándo necesita una instancia nueva e inicia una solicitud de calentamiento para inicializarla. Sin embargo, estos intentos de detección no funcionan en todos los casos. Por lo tanto, es posible que se produzcan solicitudes de carga, aunque las solicitudes de calentamiento estén habilitadas en tu aplicación. Por ejemplo, si tu aplicación no sirve tráfico, la primera solicitud a la aplicación siempre será una solicitud de carga, no una solicitud de calentamiento.

Las solicitudes de calentamiento usan horas de instancia como cualquier otra solicitud a tu aplicación de App Engine. En la mayoría de los casos en los que las solicitudes de calentamiento están habilitadas, no notarás un aumento en las horas de instancia, ya que tu aplicación simplemente se inicializa en una solicitud de calentamiento en lugar de en una solicitud de carga. El uso de horas de instancia puede aumentar si decides hacer más trabajo, como pre-caché durante una solicitud de calentamiento. Si asignas a min_idle_instances un valor superior a 0, es posible que se produzcan solicitudes de preparación cuando se inicien esas instancias por primera vez, pero seguirán estando disponibles después de ese tiempo.

Habilitar solicitudes de preparación

El programador de App Engine usa las solicitudes de calentamiento, que controla el escalado automático de las instancias en función de la configuración proporcionada por el usuario. Si las solicitudes de calentamiento están habilitadas, App Engine envía solicitudes GET a /_ah/warmup. Puedes implementar controladores para esta solicitud con el fin de realizar tareas específicas de la aplicación, como pre-almacenar en caché datos de la aplicación.

El programador inicia instancias cuando determina que se necesitan más. Las solicitudes de calentamiento pueden aparecer en los registros aunque estén inhabilitadas, ya que el programador las usa para iniciar instancias.

Ten en cuenta que no se garantiza que se llamen las solicitudes de calentamiento. En algunos casos, se envían solicitudes de carga. Por ejemplo, si la instancia es la primera que se inicia o si hay un aumento pronunciado del tráfico. Sin embargo, se hará todo lo posible para enviar solicitudes a las instancias que ya se hayan calentado si las solicitudes de calentamiento están habilitadas.

Para habilitar las solicitudes de calentamiento, añade el elemento warmup en la directiva inbound_services de tu archivo app.yaml. Por ejemplo:

inbound_services:
- warmup

Registrar un controlador

Puedes registrar la secuencia de comandos que gestiona las solicitudes de calentamiento en el archivo app.yaml de tu proyecto. Por ejemplo:

inbound_services:
- warmup

handlers:
- url: /_ah/warmup
  script: warmup.php
  login: admin

En este ejemplo se registra un controlador para escuchar las solicitudes de calentamiento en la ruta de solicitud /_ah/warmup con el archivo warmup.php.

Crear el controlador

Crea un controlador que procese las solicitudes que se envíen a /_ah/warmup. Tu controlador debe llevar a cabo la lógica de calentamiento que necesite tu aplicación. En el siguiente ejemplo se amplía el anterior:

En el entorno de ejecución de PHP 5, debes implementar un controlador frontal para gestionar todo el enrutamiento de solicitudes, incluidas las solicitudes /_ah/warmup.

Por ejemplo, el siguiente controlador frontal manual contiene código para gestionar las solicitudes de calentamiento:

<?php
  // Handle your warmup logic for your app.
  switch (@parse_url($_SERVER['REQUEST_URI'])['path']) {
    case '/_ah/warmup':
      echo "Warmup successful";
      break;
    // Other handlers
    // ...
  }
?>

Siguientes pasos

Puede que quieras almacenar valores en un almacén de datos en memoria, como Memcache, para que tu aplicación tenga acceso rápido a los datos sin necesidad de hacer consultas.

Por ejemplo, si creas y almacenas una lista de los artículos más populares de tu sitio, puedes crear esa lista en el calentamiento y almacenarla en Memcache. Cuando se recibe una solicitud de un usuario, App Engine no tiene que realizar ninguna consulta de Datastore y la aplicación puede atender la solicitud del usuario más rápido.