Gestionar recursos de aplicaciones

App Engine genera informes de uso sobre el rendimiento y la utilización de recursos de tu aplicación. A continuación, se indican algunas estrategias para gestionar tus recursos de forma más eficiente. Para obtener más información, consulta la página de precios.

Ver informes de uso

Al evaluar el rendimiento de una aplicación, debes comprobar el número de instancias en las que se está ejecutando y cómo consume recursos.

Ver los informes de uso del panel de control

Ver la página Instancias

En las siguientes secciones se sugieren algunas estrategias para gestionar los recursos.

Gestionar el escalado dinámico de instancias

Reducción de la latencia

La latencia de las aplicaciones influye en el número de instancias necesarias para gestionar el tráfico. Si reduces la latencia, puedes disminuir el número de instancias que se usan para servir tu aplicación. Cloud Trace es una herramienta útil para ver datos sobre la latencia y comprender los posibles cambios para reducirla.

Después de usar Cloud Trace para ver la latencia, prueba algunas de las siguientes estrategias para reducirla:

  • Aumentar el almacenamiento en caché de los datos compartidos a los que se accede con frecuencia: es otra forma de decir que se debe usar Memcache de App Engine. Además, configurar los encabezados cache-control de tu aplicación puede influir significativamente en la eficiencia con la que los servidores y los navegadores almacenan en caché tus datos. Incluso almacenar en caché elementos durante unos segundos puede influir en la eficiencia con la que tu aplicación sirve el tráfico.
  • Usa Memcache de App Engine de forma más eficiente: usa llamadas por lotes para get, set, delete, etc. en lugar de una serie de llamadas individuales. Te recomendamos que uses la API asíncrona de Memcache.
  • Usa tareas para funciones que no estén vinculadas a solicitudes: si tu aplicación realiza tareas que se pueden llevar a cabo fuera del ámbito de una solicitud visible para el usuario, inclúyelas en una tarea. Si envías este trabajo a Task Queue en lugar de esperar a que se complete antes de devolver una respuesta, se puede reducir significativamente la latencia de cara al usuario. Task Queue puede ofrecerte mucho más control sobre las tasas de ejecución y ayudarte a suavizar la carga.
  • Usar Firestore en modo Datastore de forma más eficiente: consulta más detalles a continuación.
  • Ejecutar varias llamadas de obtención de URL en paralelo:
    • Agrupa varias llamadas a la API URL Fetch en lugar de gestionarlas individualmente en solicitudes individuales orientadas al usuario y gestionarlas en una tarea sin conexión en paralelo mediante la API URL Fetch asíncrona.
    • Usa la API de obtención de URL asíncrona.
  • En sesiones HTTP, escribe de forma asíncrona: Java te permite configurar tu aplicación para escribir datos de sesión HTTP de forma asíncrona en Datastore añadiendo <async-session-persistence enabled="true"/> a tu appengine-web.xml. Los datos de sesión siempre se escriben de forma síncrona en la caché de Memcache de App Engine. Si una solicitud intenta leer los datos de sesión cuando la caché de Memcache de App Engine no está disponible, se producirá un error y se recurrirá a Datastore, que puede que aún no tenga la actualización más reciente. Esto significa que existe un pequeño riesgo de que tu aplicación vea datos de sesión obsoletos, pero en la mayoría de las aplicaciones, la ventaja de la latencia supera con creces el riesgo.

Cambiar los ajustes de rendimiento del escalado automático

El archivo de configuración appengine-web.xml contiene varios ajustes que puedes usar para ajustar el equilibrio entre el rendimiento y la carga de recursos de una versión específica de tu aplicación. Para ver una lista de los ajustes de escalado automático disponibles, consulta los elementos de escalado. Consulta el vídeo New Scheduler Settings (Nuevos ajustes del programador) de App Engine para ver los efectos de estos ajustes.

Habilitar solicitudes simultáneas en Java

Si habilitas este ajuste, se reducirá el número de instancias necesarias para servir el tráfico de tu aplicación, pero esta debe ser segura para subprocesos para que funcione correctamente. Consulta cómo usar solicitudes simultáneas habilitando threadsafe en tu archivo appengine-web.xml.

Configurar los ajustes de la cola de tareas

La configuración predeterminada de la cola de tareas está optimizada para ofrecer un buen rendimiento. Con estos valores predeterminados, si pones varias tareas en una cola simultáneamente, es probable que se inicien nuevas instancias de frontend. Aquí tienes algunas sugerencias sobre cómo ajustar Task Queue para ahorrar horas de instancia:

  • Define el encabezado X-AppEngine-FailFast en las tareas que no sean sensibles a la latencia. Esta cabecera indica al programador que rechace inmediatamente la solicitud si no hay ninguna instancia disponible. Task Queue volverá a intentar enviar la solicitud y se retirará hasta que haya una instancia disponible para atenderla. Sin embargo, es importante tener en cuenta que, cuando las solicitudes con el encabezado X-AppEngine-FailFast ocupan instancias, las solicitudes sin ese encabezado pueden provocar que se inicien nuevas instancias.
  • Configure los ajustes de la cola de tareas.
    • Si asignas un valor inferior al parámetro "rate", Task Queue ejecutará las tareas a un ritmo más lento.
    • Si asigna un valor inferior al parámetro "max_concurrent_requests", se ejecutarán menos tareas simultáneamente.

Servir contenido estático siempre que sea posible

El servicio de contenido estático en Java se gestiona mediante una infraestructura especializada de App Engine, que no consume horas de instancia. Si necesitas definir encabezados personalizados, usa la API Blobstore. El servicio real de la respuesta de Blob no consume horas de instancia.

Gestionar el almacenamiento de aplicaciones

App Engine calcula los costes de almacenamiento en función del tamaño de las entidades de Datastore, el tamaño de los índices de Datastore, el tamaño de las tareas de la cola de tareas y la cantidad de datos almacenados en Blobstore. Estas son algunas medidas que puedes tomar para asegurarte de no almacenar más datos de los necesarios:

  • Elimina las entidades o los blobs que tu aplicación ya no necesite.
  • Elimina los índices innecesarios, tal como se explica en la sección Gestionar el uso de Datastore de más abajo, para reducir los costes de almacenamiento de los índices.

Gestionar el uso de Datastore

App Engine tiene en cuenta el número de operaciones realizadas en Datastore. A continuación, se indican algunas estrategias que pueden reducir el consumo de recursos de Datastore, así como la latencia de las solicitudes a Datastore:

  • El Google Cloud visor de datos de la consola muestra el número de operaciones de escritura que se han necesitado para crear cada entidad de tu Datastore local. Puedes usar esta información para saber el coste de escribir cada entidad. Consulta Información sobre los costes de escritura para saber cómo interpretar estos datos.
  • Elimina los índices innecesarios para reducir los costes de almacenamiento y escritura de entidades. Usa la función"Get Indexes" para ver qué índices se han definido en tu aplicación. Puedes ver qué índices están activos en tu aplicación en la Google Cloud página Búsqueda de la consola.
  • Al diseñar tu modelo de datos, es posible que puedas escribir tus consultas de forma que no necesites índices personalizados. Consulta la documentación sobre consultas e índices para obtener más información sobre cómo genera índices App Engine.
  • Siempre que sea posible, sustituye las propiedades indexadas (que son las predeterminadas) por propiedades no indexadas (Java ), lo que reduce el número de operaciones de escritura de Datastore cuando insertas una entidad. Si más adelante decides que necesitas consultar la propiedad sin indexar, no solo tendrás que modificar el código para volver a usar propiedades indexadas, sino que también tendrás que ejecutar una reducción de mapa en todas las entidades para volver a colocarlas.
  • Debido a las mejoras del planificador de consultas de Datastore en las versiones 1.5.2 y 1.5.3 de App Engine, es posible que ahora tus consultas requieran menos índices que antes. Aunque puedes mantener algunos índices personalizados por motivos de rendimiento, es posible que puedas eliminar otros, lo que reducirá los costes de almacenamiento y de escritura de entidades.
  • Reconfigura tu modelo de datos para poder sustituir las consultas por la recogida por clave, que es más barata y eficiente.
  • Cuando sea posible, usa consultas para obtener solo las claves en lugar de consultas de entidades.
  • Para reducir la latencia, sustituye varias get() de entidades por una get() por lote.
  • Usa cursores de almacén de datos para la paginación en lugar de desplazamientos.
  • Paraleliza varias RPCs de Datastore mediante la API Async Datastore.

Nota: Las operaciones pequeñas de Datastore incluyen las llamadas para asignar IDs de Datastore o las consultas solo de claves. Consulta la página de precios para obtener más información sobre los costes.

Gestionar el ancho de banda

Para reducir el ancho de banda saliente, puedes definir el encabezado Cache-Control adecuado en tus respuestas y establecer tiempos de vencimiento razonables para los archivos estáticos. Si usas las cabeceras Cache-Control públicas de esta forma, los servidores proxy y el navegador de tus clientes podrán almacenar en caché las respuestas durante el periodo de tiempo designado.

El ancho de banda de entrada es más difícil de controlar, ya que es la cantidad de datos que envían los usuarios a tu aplicación. Sin embargo, puedes usar reglas de cortafuegos de App Engine para permitir o restringir intervalos de direcciones IP y subredes.

Gestionar otros recursos

Una de las mejores estrategias para auditar el uso de la API Email es usar Cloud Trace para asegurarte de que no haces más llamadas de las necesarias. Siempre es recomendable comprobar las tasas de error y detectar las llamadas no válidas que pueda estar haciendo. En algunos casos, es posible detectar esas llamadas antes.