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. Cloud Trace es una herramienta útil que permite visualizar datos acerca de la latencia y comprender qué cambios se pueden implementar para disminuirla.
Después de usar Cloud Trace para ver la latencia, prueba algunas de las siguientes estrategias a fin de 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 el almacenamiento de elementos en caché durante algunos segundos puede afectar la eficiencia con la que tu aplicación entrega tráfico.
- Usa Memcache de App Engine de manera más eficiente: Usa llamadas por lotes en lugar de una serie de llamadas individuales para ejecutar operaciones de obtención, configuración y borrado, entre otras. Considera usar la API de Memcache asíncrono.
- 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 mucho la latencia del lado del 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 Firestore en modo Datastore (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.
- En sesiones de HTTP, escribe de forma asíncrona: Java te permite configurar la aplicación a fin de escribir datos de sesión de HTTP de forma asíncrona en Datastore si agregas
<async-session-persistence enabled="true"/>
a tuappengine-web.xml
. Los datos de sesión siempre se escriben de forma asíncrona en Memcache de App Engine y, si una solicitud intenta leer los datos de sesión cuando Memcache de App Engine no está disponible, la solicitud fallará en Datastore, que podría no tener aún la actualización más reciente. Esto significa que existe un riesgo mínimo de que tu aplicación vea datos de sesión inactivos, pero para la mayoría de las aplicaciones, el beneficio de la latencia supera el riesgo.
Cambia la configuración de rendimiento del ajuste de escala automático
El archivo de configuración appengine-web.xml
contiene varias opciones de configuración que puedes usar a fin de ajustar la compensación entre el rendimiento y la carga de recursos para una versión específica de la app. Si deseas obtener una lista de la configuración disponible del ajuste de escala automático, consulta los elementos de escalamiento.
Mira el video Configuración nueva del programador de App Engine para ver los efectos de estas opciones de configuración.
Habilita solicitudes simultáneas en Java
Si se habilita esta configuración, disminuye la cantidad de instancias necesarias para entregar tráfico a la aplicación. A fin de que funcione de manera correcta, la aplicación debe tener la configuración threadsafe. Obtén más información para usar las solicitudes simultáneas mediante la habilitación de threadsafe en el archivo appengine-web.xml
.
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 aún pueden iniciar instancias nuevas.
- 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 estableces el parámetro “max_concurrent_requests” en un valor menor, se ejecutarán menos tareas de forma simultánea.
Entrega contenido estático cuando sea posible
La entrega de contenido estático en Java se gestiona a través de 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 BLOB no consume horas de instancia.
Administra el almacenamiento de aplicaciones
App Engine calcula los costos de almacenamiento según el tamaño de las entidades en Datastore, el tamaño de los índices de 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 Datastore
App Engine tiene en cuenta la cantidad de operaciones realizadas en Datastore. Estas son algunas estrategias que pueden reducir el consumo de recursos de Datastore, así como disminuir la latencia para las solicitudes a Datastore:
- El visualizador de datos de la consola de Google Cloud muestra la cantidad de operaciones de escritura que se requieren para crear cada entidad en tu Datastore local. Puedes usar esta información para calcular 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 la aplicación. Puedes ver qué índices se entregan en ese momento a la aplicación en la página Búsqueda de la consola de Google Cloud.
- 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 Índices y consultas para obtener más información sobre cómo App Engine genera índices.
- Siempre que sea posible, reemplaza las propiedades indexadas (que son las predeterminadas) por propiedades no indexadas (Java), lo que reduce la cantidad de operaciones de escritura de Datastore cuando colocas una entidad. Precaución: Si luego decides que necesitas realizar consultas en la propiedad no indexada, no solo necesitarás modificar el código para usar las propiedades indexadas otra vez, sino que además deberás ejecutar map reduce en todas las entidades para volver a insertarlas.
- 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 las consultas ahora requieran 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 entidades y el 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()
porget()
por lotes. - Usa los cursores de Datastore para la paginación en lugar de la compensación.
- Procesa en paralelo varias RPC de Datastore a través de la API de almacén de datos asíncrono.
Nota: Las operaciones pequeñas de Datastore incluyen llamadas para asignar los ID de Datastore o consultas de solo clave. Consulta la página de precios para obtener más información sobre los costos.
Administra el ancho de banda
A fin de reducir el ancho de banda saliente, puedes configurar el encabezado Cache-Control
adecuado en tus respuestas y establecer tiempos de vencimiento razonables para los archivos estáticos. Usar los encabezados Cache-Control
públicos de esta manera permitirá que los servidores proxy y los navegadores de tus clientes puedan almacenar respuestas en caché en 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, puedes usar las reglas de firewall de App Engine para permitir o restringir los rangos de direcciones IP y subredes.