Python 2 ya no es compatible con la comunidad. Recomendamos que migres las apps de Python 2 a Python 3.

Cómo se administran las instancias

Las instancias son los bloques de compilación básicos de App Engine que proporcionan todos los recursos necesarios para alojar con éxito la aplicación. En cualquier momento, tu aplicación se puede ejecutar en una o varias instancias con solicitudes distribuidas en todas ellas. Cada instancia incluye una capa de seguridad para garantizar que las instancias no puedan afectarse mutuamente de forma involuntaria.

App Engine puede crear y cerrar instancias de forma automática a medida que el tráfico fluctúa, o puedes especificar una cantidad de instancias para ejecutar, sin importar la cantidad de tráfico. A fin de determinar cómo y cuándo se crean las instancias nuevas, debes especificar un tipo de escalamiento para tu app.

Tipos de escalamiento

App Engine admite los siguientes tipos de escalamiento, que controlan cómo y cuándo se crean las instancias:

  • Automático
  • Básico
  • Manual

Debes especificar el tipo de escalamiento en el archivo app.yaml de la app.

Ajuste de escala automático
El ajuste de escala automático crea instancias según el porcentaje de solicitudes, las latencias de respuesta y otras métricas de la aplicación. Puedes especificar umbrales para cada una de estas métricas, así como una cantidad mínima de instancias que deben seguir ejecutándose en todo momento.
Ajuste de escala básico
El ajuste de escala básico crea instancias cuando la aplicación recibe solicitudes. Cada instancia se cerrará cuando la aplicación esté inactiva. El ajuste de escala básico es ideal para trabajos intermitentes o que se generan mediante la actividad del usuario.
Ajuste de escala manual
El ajuste de escala manual especifica la cantidad de instancias que se ejecutan de forma continua sin importar el nivel de carga. Esto permite ejecutar tareas como inicializaciones y aplicaciones complejas que se basan en el estado de la memoria en el tiempo.
En la tabla siguiente, se comparan las características de rendimiento de los tres tipos de escalamiento:

Característica Ajuste de escala automático Ajuste de escala básico Ajuste de escala manual
Tiempo de espera de la solicitud 10 minutos para las solicitudes HTTP y las tareas de la lista de tareas en cola. Si la app no muestra una solicitud dentro de este límite de tiempo, App Engine interrumpe el controlador de solicitudes y emite un error para que lo controle tu código.

Para los entornos de ejecución heredados (Java 8, PHP 5 y Python 2):

  • El tiempo de espera para las tareas de la lista de tareas en cola y las solicitudes de los trabajos cron es de 10 minutos.
  • El tiempo de espera para otras solicitudes HTTP es de 1 minuto.
24 horas para solicitudes HTTP y tareas de la lista de tareas en cola. Si la app no muestra una solicitud dentro de este límite de tiempo, App Engine interrumpe el controlador de solicitudes y emite un error para que lo controle tu código.

Una instancia con ajuste de escala básico puede elegir controlar /_ah/start y ejecutar un programa o una secuencia de comandos durante muchas horas sin mostrar un código de respuesta HTTP.

Es igual que el ajuste de escala básico.
Subprocesos en segundo plano No permitido Permitido Permitido
Residencia Las instancias se cierran según los patrones de uso. Las instancias se cierran según el parámetro idle_timeout. Si una instancia estuvo inactiva, por ejemplo, no recibió una solicitud por más del idle_timeout, la instancia se cierra. Las instancias permanecen en la memoria y el estado se conserva en todas las solicitudes. Cuando se reinician las instancias, aparece una solicitud /_ah/stop en los registros. Si existe un hook de cierre registrado, tiene 30 segundos para completarse antes de que se produzca el cierre.
Inicio y cierre Las instancias se crean a pedido para controlar las solicitudes y se rechazan de forma automática cuando están inactivas. Las instancias se crean a pedido para controlar las solicitudes y se apagan de forma automática cuando están inactivas, según el parámetro de configuración idle_timeout. Una instancia que se detiene de forma manual tiene 30 segundos para terminar de controlar las solicitudes antes de que se fuerce la finalización. App Engine envía de manera automática una solicitud de inicio a las instancias con el formato de una solicitud GET vacía para /_ah/start. Al igual que con el ajuste de escala básico, una instancia que se detiene de forma manual tiene 30 segundos para terminar de controlar las solicitudes antes de que se fuerce la finalización.
Direccionamiento a instancias Las instancias son anónimas. Es posible dirigirse a la instancia “i” de la versión “v” del servicio “s” en la URL: https://i-dot-v-dot-s-dot-app_id.REGION_ID.r.appspot.com. Si configuraste una asignación de subdominio comodín para un dominio personalizado, también puedes dirigirte a un servicio o a cualquiera de sus instancias mediante una URL con el formato https://s.domain.com o https://i.s.domain.com. Puedes almacenar en caché de manera confiable el estado de cada instancia y recuperarlo en las solicitudes siguientes. Es igual que el ajuste de escala básico.
Escalamiento App Engine escala el número de instancias de forma automática en respuesta al volumen de procesamiento. Estos factores de escala se incluyen en la configuración automatic_scaling que se proporciona por versión en el archivo de configuración. Un servicio con ajuste de escala básico se configura mediante el establecimiento de la cantidad máxima de instancias en el parámetro max_instances de la configuración basic_scaling. La cantidad de instancias activas se ajusta con el volumen de procesamiento. Tú configuras la cantidad de instancias de cada versión en el archivo de configuración de ese servicio. Por lo general, la cantidad de instancias corresponde al tamaño de un conjunto de datos que se aloja en la memoria o la capacidad de procesamiento deseada para el trabajo sin conexión. Puedes ajustar la cantidad de instancias de una versión con ajuste de escala manual muy rápido, sin detener las instancias que se ejecutan en ese momento mediante la función set_num_instances de la API de módulos.

Escala instancias dinámicas

Las aplicaciones de App Engine que usan el ajuste de escala automático o básico funcionan con cualquier cantidad de instancias dinámicas en un momento determinado, según el volumen de solicitudes entrantes. A medida que aumentan las solicitudes para la aplicación, la cantidad de instancias dinámicas también puede aumentar.

Apps con ajuste de escala básico

Si usas el ajuste de escala básico, App Engine intenta mantener tu costo bajo, aunque eso puede dar como resultado una latencia más alta a medida que aumenta el volumen de solicitudes entrantes.

Cuando ninguna de las instancias existentes está disponible para entregar una solicitud entrante, App Engine inicia una instancia nueva. Incluso después de iniciar una instancia nueva, es posible que algunas solicitudes deban estar en cola hasta que la instancia nueva complete su proceso de inicio. Si necesitas la menor latencia posible, considera usar el ajuste de escala automático, que crea instancias interrumpibles nuevas para minimizar la latencia.

Apps con ajuste de escala automático

Si usas el ajuste de escala automático, cada instancia de la app tiene su propia cola para las solicitudes entrantes. Antes de que las colas sean tan largas como para tener un efecto notable en la latencia de la app, App Engine crea de forma automática una o más instancias nuevas a fin de controlar la carga creciente.

Puedes establecer la configuración del ajuste de escala automático para lograr un equilibrio entre el rendimiento que deseas y el costo en el que puedes incurrir. En la siguiente tabla, se describen estas opciones de configuración.

Opciones de configuración del ajuste de escala automático Descripción
Uso de CPU objetivo Establece el límite de la tasa de uso de CPU a fin de especificar el umbral de uso de esta en el que se iniciarán más instancias para controlar el tráfico.
Uso de capacidad de procesamiento objetivo Establece el límite de la capacidad de procesamiento para la cantidad de solicitudes simultáneas después de las cuales se iniciarán más instancias con el fin de controlar el tráfico.
Cantidad máxima de solicitudes simultáneas Establece la cantidad máxima de solicitudes simultáneas que una instancia puede aceptar antes de que el programador genere una instancia nueva.

Mira el video Configuración de un programador nuevo de App Engine para ver los efectos de esta configuración.

Disminución del escalamiento

Cuando los volúmenes de solicitudes disminuyen, App Engine reduce la cantidad de instancias. Este escalamiento descendente ayuda a garantizar que todas las instancias actuales de la aplicación se usen para lograr una eficiencia y rentabilidad óptimas.

Cuando una aplicación no se usa en absoluto, App Engine desactiva las instancias dinámicas asociadas, pero las vuelve a cargar en cuanto sea necesario. Volver a cargar las instancias puede dar lugar a la carga de solicitudes y latencia adicional para los usuarios.

Puedes especificar una cantidad mínima de instancias inactivas. Si estableces una cantidad adecuada de instancias inactivas para la aplicación en función del volumen de solicitudes, permitirás que la aplicación entregue todas las solicitudes con poca latencia, a menos que tengas un volumen de solicitudes más alto de lo común.

Escalamiento y lotes de solicitudes

Si envías lotes de solicitudes a tus servicios, por ejemplo, a una lista de tareas en cola para que se procesen, se creará una gran cantidad de instancias con rapidez. A fin de controlar esto, recomendamos establecer un límite de frecuencia para la cantidad de solicitudes que se envían por segundo, si es posible. Por ejemplo, si usas Tasks, puedes controlar la frecuencia a la que se envían las tareas.

Ciclo de vida de la instancia

Estados de la instancia

Una instancia de un servicio con ajuste de escala automático siempre está en ejecución. Sin embargo, una instancia de un servicio con escalamiento manual o básico puede ejecutarse o detenerse. Todas las instancias del mismo servicio y la misma versión comparten el mismo estado. Debes cambiar el estado de tus instancias mediante la administración de las versiones. Puedes hacer lo siguiente:

Inicio

Cada instancia de servicio se crea como respuesta a una solicitud de inicio, que es una solicitud HTTP GET vacía a /_ah/start. App Engine envía esta solicitud para crear una instancia; los usuarios no pueden enviar una solicitud a /_ah/start. Las instancias de ajuste de escala manual y básico deben responder a la solicitud de inicio antes de que puedan administrar otra solicitud. La solicitud de inicio puede usarse para dos fines:

  • Iniciar un programa que se ejecuta de forma indefinida, sin aceptar más solicitudes
  • Inicializar una instancia antes de recibir tráfico adicional

Las instancias de ajuste de escala manual, básico y automático se inician de manera diferente. Cuando inicias una instancia de ajuste de escala manual, App Engine envía de inmediato una solicitud /_ah/start a cada instancia. Cuando inicias una instancia de un servicio de escalamiento básico, App Engine le permite aceptar tráfico, pero la solicitud /_ah/start no se envía a una instancia hasta que reciba su primera solicitud de un usuario. Las instancias de ajuste de escala básico múltiple solo se inician según sea necesario, a fin de administrar el aumento de tráfico. Las instancias de ajuste de escala automático no reciben ninguna solicitud /_ah/start.

Cuando una instancia responde a una solicitud /_ah/start con un código de estado HTTP de 200–299404, se considera que se inició de forma correcta y que puede controlar solicitudes adicionales. De lo contrario, App Engine cancelará la instancia. Las instancias con ajuste de escala manual se reinician de forma inmediata, mientras que las instancias con ajuste de escala básico se reinician solo cuando es necesario para entregar tráfico.

Cierre

El proceso de cierre se puede activar mediante una variedad de eventos planificados y no planificados, como los siguientes:

  • Se detiene una instancia manualmente.
  • Se implementa una versión actualizada en el servicio.
  • La instancia excede la memoria máxima para su instance_class configurada.
  • La aplicación agota su cuota de horas de instancia.
  • La instancia se mueve a una máquina diferente, ya sea porque se reinicia la máquina actual que ejecuta la instancia, o App Engine movió la instancia para mejorar la distribución de la carga.

Solicitudes de carga

Cuando App Engine crea una instancia nueva para la aplicación, la instancia debe cargar primero las bibliotecas y los recursos necesarios con el objetivo de controlar la solicitud. Esto sucede durante la primera solicitud a la instancia, denominada solicitud de carga. Durante una solicitud de carga, la aplicación se inicializa, lo que hace que la solicitud tarde más tiempo.

Las siguientes prácticas recomendadas te permiten reducir la duración de las solicitudes de carga:

  • Carga solo el código que se necesita para el inicio.
  • Accede al disco lo menos posible.
  • En algunos casos, cargar un código desde un archivo ZIP o JAR es más rápido que cargarlo desde muchos archivos separados.

Solicitudes de preparación

Las solicitudes de preparación son un tipo específico de solicitudes de carga que suben el código de aplicación en una instancia con anticipación, antes de que se realicen solicitudes en tiempo real. Las instancias de ajuste de escala manual o básico no reciben una solicitud /_ah/warmup.

Para obtener más información sobre cómo usar las solicitudes de preparación, consulta Configura solicitudes de preparación.

Tiempo de actividad de la instancia

App Engine intenta mantener las instancias de ajuste de escala manual y básico en ejecución de forma indefinida. Sin embargo, en este momento no existe un tiempo de actividad garantizado para las instancias de escalamiento manual y básico. Las fallas de hardware y software que generan la finalización temprana o los reinicios frecuentes pueden ocurrir sin previo aviso, y puede llevar mucho tiempo resolverlas; por lo tanto, debes construir la aplicación de una manera que tolere estas fallas.

A continuación, se detallan algunas estrategias útiles para evitar el tiempo de inactividad debido a los reinicios de la instancia:

  • Reduce el tiempo que lleva reiniciar tus instancias o iniciar las nuevas.
  • Crea puntos de control de forma periódica para los cálculos de larga duración, a fin de permitirte reanudar el proceso desde ese estado.
  • La app debe ser "sin estado" para que no se almacene nada en la instancia.
  • Usa colas para ejecutar tareas asíncronas.
  • Si configuras tus instancias para el ajuste de escala manual, haz lo siguiente:
    • Usa el balanceo de cargas en varias instancias.
    • Configura más instancias de las necesarias para controlar un tráfico normal.
    • Escribe una lógica de resguardo que use resultados almacenados en caché cuando no esté disponible una instancia de ajuste de escala manual.