Cómo determinar el cuello de botella de un servidor, solucionarlo rápidamente, mejorar su rendimiento y prevenir regresiones.
Descripción general
Esta guía te muestra cómo reparar un servidor sobrecargado en 4 pasos:
- Evaluar: Determinar el cuello de botella del servidor.
- Estabilizar: Implementar soluciones rápidas para mitigar el impacto.
- Mejorar: Aumentar y optimizar las capacidades del servidor.
- Supervisar: Utilizar herramientas automatizadas para ayudar a prevenir problemas futuros.
Evaluar
Cuando el tráfico sobrecarga un servidor, uno o más de los siguientes elementos pueden convertirse en un cuello de botella: CPU, red, memoria o E/S del disco. Identificar cuál de ellos es el cuello de botella permite centrar los esfuerzos en las mitigaciones más impactantes.
- CPU: El uso del CPU que es constantemente superior al 80% debe ser investigado y solucionado. El rendimiento del servidor a menudo se deteriora una vez que el uso del CPU alcanza el ~80-90%, y se vuelve más pronunciado a medida que el uso se acerca al 100%. La utilización del CPU para atender una sola solicitud es insignificante, pero hacerlo a la escala que se encuentra durante los picos de tráfico a veces puede abrumar a un servidor. La descarga de servicios a otra infraestructura, la reducción de operaciones costosas y la limitación de la cantidad de solicitudes reducirán la utilización del CPU.
- Red: Durante los períodos de alto tráfico, el rendimiento de la red requerido para satisfacer las solicitudes de los usuarios puede exceder la capacidad. Algunos sitios, según el proveedor de hosting, también pueden alcanzar los límites de transferencia de datos acumulados. Reducir el tamaño y la cantidad de datos transferidos hacia y desde el servidor eliminará este cuello de botella.
- Memoria: Cuando un sistema no tiene suficiente memoria, los datos tienen que ser descargados al disco para su almacenamiento. El acceso al disco es considerablemente más lento que el de la memoria, y esto puede ralentizar toda la aplicación. Si la memoria se agota por completo, pueden producirse errores de memoria insuficiente (en inglés "out of memory", OOM). El ajuste de la asignación de memoria, la reparación de pérdidas de memoria y la actualización de la memoria pueden eliminar este cuello de botella.
- E/S del disco: La velocidad a la que se pueden leer o escribir datos desde el disco está limitada por el propio disco. Si la E/S del disco es un cuello de botella, aumentar la cantidad de datos almacenados en la memoria caché puede aliviar este problema (a costa de una mayor utilización de la memoria). Si esto no funciona, puede que sea necesario actualizar tus discos.
Las técnicas de esta guía se centran en abordar los cuellos de botella del CPU y la red. Para la mayoría de los sitios, el CPU y la red serán los cuellos de botella más relevantes durante un pico de tráfico.
Ejecutar el top del servidor afectado es un buen punto de partida para investigar los cuellos de botella. Si está disponible, complementa esto con los datos históricos de su proveedor de hosting o herramientas de monitoreo.
Estabilizar
Un servidor sobrecargado puede provocar rápidamente fallas en cascada en otras partes del sistema. Por lo tanto, es importante estabilizar el servidor antes de intentar realizar cambios más significativos.
Limitación de velocidad
La limitación de la velocidad protege la infraestructura al limitar la cantidad de solicitudes entrantes. Esto es cada vez más importante a medida que se deteriora el rendimiento del servidor: a medida que aumentan los tiempos de respuesta, los usuarios tienden a actualizar activamente la página, lo que aumenta aún más la carga del servidor.
Reparar
Aunque rechazar una solicitud es relativamente económico, la mejor manera de proteger tu servidor es gestionar la limitación de la velocidad en algún punto anterior al mismo, por ejemplo, a través de un equilibrador de carga, un proxy inverso o una CDN.
Instrucciones:
Otras lecturas:
Almacenamiento en caché HTTP
Busca formas de almacenar contenidos en caché de forma más activa. Si un recurso puede servirse desde un caché HTTP (ya sea el caché del navegador o una CDN), no es necesario solicitarlo al servidor de origen, lo que reduce la carga del servidor.
Los encabezados HTTP como Cache-Control, Expires y ETag indican cómo un recurso debe almacenarse en caché mediante un caché HTTP. Auditar y corregir estos encabezados mejorará el almacenamiento en caché.
Aunque los trabajadores de servicio también se pueden utilizar para el almacenamiento en caché, utilizan un caché separado y son un complemento, en lugar de un reemplazo, para un adecuado almacenamiento en caché HTTP. Por esta razón, cuando se maneja un servidor sobrecargado, los esfuerzos deben centrarse en optimizar el almacenamiento en caché HTTP.
Diagnosticar
Ejecuta Lighthouse y observa los activos estáticos de servicio con una auditoría de política de caché eficiente para ver una lista de recursos con un tiempo de vida corto o medio (TTL). Para cada recurso enumerado, considera si se debe aumentar el TTL. A título orientativo:
- Los recursos estáticos deben almacenarse en caché con un TTL largo (1 año).
- Los recursos dinámicos deben almacenarse en caché con un TTL breve (3 horas).
Reparar
Establece la directiva max-age del encabezado Cache-Control en el número apropiado de segundos.
Instrucciones:
Nota: max-age es solo una de las muchas directivas de almacenamiento en caché. Hay muchas otras directivas y encabezados que afectarán el comportamiento de almacenamiento en caché de tu aplicación. Para obtener una explicación más detallada de la estrategia de almacenamiento en caché, se recomienda encarecidamente que leas Almacenamiento en caché HTTP.
Deterioro gradual
El deterioro gradual es la estrategia de reducir temporalmente la funcionalidad para eliminar el exceso de carga de un sistema. Este concepto se puede aplicar de muchas formas diferentes: por ejemplo, ofreciendo una página de texto estático en lugar de una aplicación con todas las funciones, deshabilitando la búsqueda o devolviendo menos resultados de búsqueda, también deshabilitando ciertas funciones costosas o no esenciales. Se debe hacer hincapié en suprimir las funcionalidades que pueden eliminarse de forma segura y sencilla con un impacto comercial mínimo.
Mejorar
Utilizar una red de distribución de contenidos (CDN)
El servicio de activos estáticos se puede descargar desde tu servidor a una red de distribución de contenidos (CDN), reduciendo así la carga.
La función principal de una CDN es entregar los contenidos a los usuarios con rapidez, proporcionando una amplia red de servidores que se encuentran cerca de los usuarios. Sin embargo, la mayoría de las CDN también ofrecen funciones adicionales relacionadas con el rendimiento, la compresión, el equilibrio de carga y la optimización de medios.
Configurar una CDN
Las CDN se benefician de la escala, por lo que operar tu propia CDN rara vez tiene sentido. Una configuración básica de CDN es bastante rápida de configurar (~ 30 minutos) y consiste en actualizar los registros DNS para apuntar a la CDN.
Optimizar el uso de la CDN
Diagnosticar
Identifica los recursos que no se sirven desde una CDN (pero que deberían servirse) ejecutando WebPageTest. En la página de resultados, haz clic en el recuadro situado encima de "Uso efectivo de la CDN" para ver la lista de recursos que deberían servirse desde una CDN.