Administra los recursos de la app

App Engine genera informes de uso acerca del rendimiento de tu aplicación y el uso de recursos. A continuación, se enumeran estrategias posibles para administrar tus recursos de manera más eficiente. Para obtener más información, consulta la página de precios.

Consulta los informes de uso

Cuando evalúas el rendimiento de la aplicación, debes verificar la cantidad de instancias que ejecuta y cómo consume recursos.

Consulta los informes de uso del panel

Consulta la página de instancias

En las siguientes secciones, se sugieren algunas estrategias para administrar recursos.

Administra el escalamiento dinámico de instancias

Disminuye la latencia

La latencia de la aplicación afecta la cantidad de instancias requeridas para controlar el tráfico. Con la disminución de la latencia, puedes reducir la cantidad instancias usadas para entregar tu aplicación. Stackdriver Trace es una herramienta útil que permite visualizar datos acerca de la latencia y comprender cambios posibles para disminuirla.

Luego de usar Stackdriver Trace para visualizar tu latencia, prueba alguna de las siguientes estrategias si deseas reducirla:

  • Aumenta el almacenamiento en caché de los datos compartidos de acceso frecuente. En otras palabras, usa Memcache de App Engine. Además, si se configuran los encabezados de control de caché de tu aplicación, puede generarse un impacto significativo sobre la eficiencia con la que los servidores y navegadores almacenan los datos en caché. Incluso almacenar elementos en caché durante algunos segundos puede tener un impacto sobre la eficiencia con la cual la aplicación entrega tráfico. Las aplicaciones Python también suelen usar almacenamiento en caché en el entorno de ejecución.
  • Utiliza Memcache de App Engine de manera más eficiente: usa llamadas por lotes para obtener, configurar, borrar, etc., en lugar de una serie de llamadas individuales. Considera usar la API de Memcache Async.
  • Usa tareas para funcionalidades no limitadas a solicitudes: Si tu aplicación realiza trabajos que se pueden realizar más allá del alcance de una solicitud orientada al usuario, colócalos en una tarea. Si se envía este trabajo a la lista de tareas en cola, en lugar de esperar a que se complete antes de mostrar una respuesta, se puede reducir significativamente la latencia orientada al usuario. La lista de tareas en cola te puede brindar un control mayor sobre las tarifas de ejecución y ayudarte a reducir tu carga.
  • Usa Cloud Datastore de manera más eficiente: Te mostraremos más detalles a continuación.
  • Ejecuta varias llamadas de recuperación de URL en paralelo:
    • Agrupa varias llamadas de recuperación de URL en lugar de manejarlas por separado dentro de solicitudes individuales orientadas al usuario. Gestiónalas en una tarea sin conexión en paralelo mediante la recuperación de URL asíncrona.
    • Usa la API de recuperación de URL asíncrona.
  • Para las sesiones de HTTP, escribe de manera asíncrona.

Cómo cambiar la configuración de rendimiento del ajuste de escala automático

El archivo de configuración app.yaml contiene diversas configuraciones que puedes usar si quieres ajustar la compensación entre el rendimiento y la carga de recursos para una versión específica de tu app. Para obtener una lista de las configuraciones de escalamiento automático disponibles, consulta elementos de escalamiento. Mira el video Configuración de programador nuevo de App Engine para ver los efectos de esta configuración.

Habilitar solicitudes simultáneas en Python

Las instancias de la aplicación pueden entregar varias solicitudes simultáneas en Python. Si habilitas esta configuración, disminuirá la cantidad de instancias necesarias para entregar tráfico a tus aplicaciones, pero la aplicación debe tener la configuración threadsafe si deseas que esto funcione correctamente. Para leer acerca de cómo usar solicitudes simultáneas, habilita threadsafe en tu archivo app.yaml.

Configura la lista de tareas en cola

La configuración predeterminada de la lista de tareas en cola se ajusta para un mejor rendimiento. Con estos valores predeterminados, cuando colocas varias tareas en una cola en simultáneo, es probable que estas inicien nuevas instancias de frontend. Estas son algunas sugerencias sobre cómo ajustar la lista de tareas en cola para conservar las horas de instancia:

  • Configura el encabezado X-AppEngine-FailFast en tareas que no sean sensibles a la latencia. El encabezado ordena al programador que haga fallar la solicitud de inmediato si una instancia existente no está disponible. La lista de tareas en cola volverá a intentarlo y esperará hasta que una instancia existente esté disponible para cumplir la solicitud. Sin embargo, es importante tener en cuenta que cuando las solicitudes con X-AppEngine-FailFast configurado ocupan instancias existentes, las solicitudes sin el encabezado configurado pueden iniciar nuevas instancias.
  • Establece la configuración de la lista de tareas en cola.
    • Si configuras el parámetro "frecuencia" a un valor menor, la lista de tareas en cola ejecutará tus tareas con una frecuencia más lenta.
    • Si asignas el parámetro "max_concurrent_requests" a un valor menor, se ejecutarán menos tareas de manera simultánea.
  • Usa los backend si deseas controlar de forma completa la cantidad de instancias que se usan para ejecutar la tarea. Puedes usar listas de aplicaciones en cola con backend dinámicos o listas de extracción con backend residentes.

Entregar contenido estático cuando sea posible

La entrega de contenido estático en Python se controla mediante una infraestructura especializada de App Engine que no consume horas de instancia. Si necesitas configurar encabezados personalizados, usa la API de Blobstore. La entrega real de la respuesta de Blob no consume horas de instancia.

Administrar el almacenamiento de la aplicación

App Engine calcula los costos de almacenamiento sobre la base del tamaño de las entidades en Cloud Datastore, el tamaño de los índices de Cloud Datastore, el tamaño de las tareas en la lista de tareas en cola y la cantidad de datos almacenados en Blobstore. Te presentamos algunas sugerencias para que te asegures de no almacenar más datos de los necesarios:

  • Borra cualquier entidad o BLOB que tu aplicación ya no necesite.
  • Como se indica en la sección Administra el uso de Datastore a continuación, quita cualquier índice innecesario para reducir los costos de almacenamiento de índices.

Administra el uso de Cloud Datastore

App Engine tiene en cuenta la cantidad de operaciones realizadas en Cloud Datastore. Estas son algunas estrategias que pueden reducir el consumo de recursos de Cloud Datastore y disminuir la latencia de las solicitudes a Cloud Datastore.

  • El visor de datos de GCP Console muestra la cantidad de operaciones de escritura que se requirieron para crear cada entidad en tu Cloud Datastore local. Puedes usar esta información para comprender el costo de escribir cada entidad. Consulta Información sobre los costos de escritura para obtener información sobre cómo interpretar estos datos.
  • Quita cualquier índice innecesario. Esto reducirá los costos de escritura de entidades y de almacenamiento. Usa la función “Obtener índices” para ver cuáles están definidos en tu aplicación. Puedes ver los índices que se entregan en la actualidad para tu aplicación en la página de búsqueda de GCP Console.
  • Cuando diseñas tu modelo de datos, puedes escribir tus consultas de tal manera que se eviten por completo los índices personalizados. Lee la documentación de Índices y consultas para obtener más información sobre cómo App Engine genera índices.
  • Cuando sea posible, reemplaza las propiedades indexadas (que son las predeterminadas) con propiedades no indexadas (Python), que reducen la cantidad de operaciones de escritura de Cloud Datastore cuando insertas una entidad. Precaución: Si posteriormente decides que necesitas estar habilitado para realizar consultas en la propiedad no indexada, no solo necesitarás modificar tu código si deseas usar nuevamente las propiedades indexadas, sino que deberás ejecutar un map reduce en todas las entidades para reinsertarlas.
  • Debido a las mejoras del planificador de consultas de Cloud Datastore en las versiones 1.5.2 y 1.5.3 de App Engine, es posible que tus consultas requieran ahora menos índices que antes. Si bien puedes optar por mantener ciertos índices personalizados por razones de rendimiento, puedes borrar otros y así reducir los costos de escritura de entidades y de almacenamiento.
  • Vuelve a configurar tu modelo de datos de modo que puedas reemplazar las consultas con recuperación por clave, que es más económico y eficiente.
  • Usa consultas de solo clave en lugar de consultas de entidades cuando sea posible.
  • Para disminuir la latencia, reemplaza varias entidades get() con un lote get().
  • Usa los cursores de Cloud Datastore para la paginación en lugar del desplazamiento.
  • Procesa en paralelo varias RPC de Cloud Datastore a través de la API de Datastore asíncrona.

Nota: Las operaciones pequeñas de Cloud Datastore incluyen llamadas para asignar consultas de solo clave o ID de Cloud Datastore. Consulta la página de Precios para obtener más información sobre costos.

Administra el ancho de banda

Cuando se trata del ancho de banda saliente, una manera de reducir el uso es configurar el encabezado Cache-Control adecuado en tus respuestas y establecer horas de caducidad razonables para los archivos estáticos, siempre que sea posible. Si se usan encabezados Cache-Control públicos de esta manera, los servidores proxy y los navegadores de tus clientes podrán almacenar respuestas en caché para el período designado.

El ancho de banda entrante es más difícil de controlar, ya que esa es la cantidad de datos que los usuarios envían a tu app. Sin embargo, esta es una buena oportunidad para mencionar el Servicio de protección de DoS que te permite bloquear el tráfico desde las IP que consideres abusivas.

Administra otros recursos

Una de las mejores estrategias para auditar tu uso de la API de correo electrónico es usar estadísticas de la aplicación. De esta manera, te aseguras de no realizar más llamadas de las necesarias. Siempre es una buena idea verificar las tasas de errores y buscar llamadas no válidas que puedas estar haciendo. En algunos casos, tal vez puedas detectar esas llamadas con anticipación.