¿Cómo ordenar un servidor sobrecargado?

El material, cuya traducción publicamos hoy, está dedicado a encontrar cuellos de botella en el rendimiento del servidor, solucionar problemas, mejorar el rendimiento del sistema y prevenir la degradación del rendimiento. Aquí, en el camino para resolver los problemas de un servidor sobrecargado, se propone seguir los siguientes 4 pasos:

  1. Evaluación de una situación: determinación de un cuello de botella del rendimiento del servidor.
  2. Estabilización del servidor: la aplicación de medidas urgentes para mejorar la situación.
  3. Mejora del sistema: ampliar y optimizar las capacidades del sistema.
  4. Monitoreo del servidor: uso de herramientas automatizadas para evitar que ocurran problemas.



1. Valoración de la situación.


Cuando el tráfico sobrecarga el servidor, el procesador, la red, la memoria y la E / S de disco pueden convertirse en un cuello de botella de rendimiento. Determinar qué causa exactamente el problema le permite concentrarse en lo más importante. Considere algunas características del análisis de los subsistemas de servidor más importantes.

  • . , 80%, , . , 80-90%. 100%, . , , . , , , «» . , , , , .
  • . , , , , . , -, , . , , .
  • . , . , . . , (Out Of Memory, OOM). , , , .
  • /. , , , , . , , , (, ). — , .

Lo que discutiremos a continuación está dirigido a resolver problemas con el procesador y la red. El hecho es que la mayoría de los proyectos sufren, durante los períodos de mayor tráfico, precisamente por tales problemas.

Puede comenzar a solucionar problemas del servidor utilizando el comando superior . Si existe tal oportunidad, aquí puede recurrir a los datos históricos del proveedor de alojamiento y a los datos recopilados por los sistemas de monitoreo.

2. Estabilización del servidor


Tener un servidor sobrecargado en el sistema puede conducir rápidamente a fallas en cascada en otras partes del sistema. Como resultado, es importante, después de que se supo que el servidor está sobrecargado, estabilícelo y solo entonces investigue la situación con miras a introducir algunas mejoras serias en el sistema.

▍ Limite la velocidad de procesamiento de consultas


Limitar la velocidad de procesamiento de solicitudes le permite proteger la infraestructura al limitar el número de solicitudes entrantes. Esto es muy importante cuando el rendimiento del servidor cae. A medida que crece el tiempo de respuesta del servidor, los usuarios tienden a actualizar agresivamente la página, lo que aumenta aún más la carga del servidor.

Si bien negarse a procesar una solicitud es una medida simple y efectiva, lo mejor es reducir la carga en el servidor limitando la cantidad de solicitudes que llegan utilizando algún sistema externo. Esto puede ser, por ejemplo, un equilibrador de carga, servidor proxy inverso o CDN. A continuación hay enlaces a instrucciones para trabajar con varios sistemas de este tipo:


Aquí hay material sobre cómo reducir la carga del servidor utilizando varios enfoques para limitar la velocidad del procesamiento de solicitudes.

▍HTTP caché


Busque formas de mejorar el almacenamiento en caché de contenido. Si el recurso se puede proporcionar al usuario desde el caché HTTP (desde el caché del navegador o desde el CDN), entonces no es necesario solicitarlo al servidor, lo que reduce la carga en el servidor.

Los encabezados HTTP como Cache-Control , Expires y ETag indican cómo se debe almacenar en caché un recurso en particular. Auditar y corregir estos encabezados puede ayudar a mejorar el almacenamiento en caché.

Aunque puede recurrir a las capacidades de los trabajadores de servicios para el almacenamiento en caché , utilizan una memoria caché separada . Esto es una ayuda para el sistema de almacenamiento en caché del navegador principal, no un reemplazo para él. Por lo tanto, al solucionar problemas de un servidor sobrecargado, los esfuerzos deben centrarse en optimizar el almacenamiento en caché de HTTP.

Diagnósticos


Inicie Lighthouse y eche un vistazo a Servir activos estáticos con una métrica de política de caché eficiente para ver una lista de recursos con tiempos de almacenamiento en caché cortos y medios ( Time To Live , TTL). Revise los recursos enumerados y considere aumentar su TTL. Aquí están los términos de almacenamiento en caché estimados aplicables a varios recursos.

  • Los recursos estáticos deben almacenarse en caché durante un largo período (1 año).
  • Los recursos dinámicos deben almacenarse en caché por un corto tiempo (3 horas).

Configuración de caché


Es necesario escribir el tiempo de caché de caché necesario, expresado en segundos, en la directiva de max-ageencabezado Cache-Control . Aquí hay instrucciones para configurar este encabezado en diferentes sistemas:


Tenga en cuenta que la directiva max-agees solo una de las muchas directivas que afectan el almacenamiento en caché. Hay otras directivas y otros encabezados que afectan las funciones de caché. Para comprender mejor este problema, se recomienda que lea esta guía de almacenamiento en caché de HTTP.

▍ Reducción gradual de las capacidades del sistema.


Una reducción gradual de las capacidades del sistema es una estrategia para limitar temporalmente la funcionalidad destinada a eliminar la carga excesiva del servidor. Este concepto puede aplicarse de muchas maneras diferentes. Por ejemplo, ofrecer a los clientes una página de texto estático en lugar de una aplicación completa, deshabilitar la búsqueda o devolver resultados de búsqueda menos de lo habitual. Esto incluye deshabilitar las capacidades intensivas en recursos de proyectos que no afectan su funcionalidad básica. La atención principal aquí debe prestarse a deshabilitar la funcionalidad, que puede abandonarse sin afectar demasiado las características principales de la aplicación.

3. Mejora del sistema


▍Uso de CDN


La tarea de servir recursos estáticos se puede transferir desde el servidor a la red de entrega de contenido (CDN). Esto reducirá la carga en el servidor.

La función principal de CDN es entregar rápidamente materiales a los usuarios mediante el uso de una gran red de servidores ubicados cerca de los usuarios. Además, algunos CDN ofrecen funciones adicionales relacionadas con el rendimiento. Entre ellos: compresión de datos, equilibrio de carga, optimización de archivos multimedia.

Configuración de CDN


Las ventajas de CDN se revelan si la compañía propietaria de la red tiene una gran agrupación de servidores distribuidos en todo el mundo. Por lo tanto, apoyar su propio servicio CDN rara vez tiene sentido. Una configuración típica de CDN es un procedimiento bastante rápido que dura aproximadamente media hora. Consiste en actualizar los registros DNS para que apunten a la CDN.

Optimización de CDN: estudio de caso


Para identificar los recursos que no se sirven con el CDN (pero que se deben emitir a los usuarios con un CDN), puede usar WebPageTest . En la página de resultados, haga clic en el rectángulo firmado como Effective use of CDNy vea la lista de recursos que debe servir CDN.


WebPageTest Results

Resolución de problemas


Si los recursos no se almacenan en caché utilizando la CDN, averigüe si se cumplen las siguientes condiciones:


▍ Escalando recursos informáticos


La decisión de escalar los recursos informáticos debe tomarse con precaución. Aunque a menudo es posible resolver ciertos problemas recurriendo al escalado, habiendo hecho esto de manera inoportuna, es posible complicar innecesariamente el sistema y aumentar de manera injustificada el costo de su soporte.

Diagnósticos


Un indicador alto de tiempo hasta el primer byte ( Tiempo hasta el primer byte , TTFB) puede ser una señal de que el servidor se está acercando a sus límites. Puede encontrar información TTFB en la sección Reducir tiempos de respuesta del servidor (TTFB) del informe de Lighthouse.

Para un estudio más profundo de la situación, debe usar alguna herramienta de monitoreo y analizar el uso del procesador. Si el valor de carga del procesador actual o previsto supera el 80%, esto significa que debe pensar en aumentar la capacidad del servidor.

Resolución de problemas


Agregar un equilibrador de carga al sistema le permite distribuir el tráfico entre varios servidores. Un equilibrador de carga se encuentra en frente del grupo de servidores y distribuye el tráfico a los servidores apropiados. Los proveedores de la nube ofrecen a los usuarios equilibradores de carga ( GCP , AWS , Azure ), pero también puede usar su propio equilibrador utilizando HAProxy o NGINX . Una vez que el equilibrador de carga está listo para funcionar, se pueden agregar servidores adicionales al sistema.

Además del equilibrio de carga, la mayoría de los proveedores de la nube ofrecen escalado automático de potencia informática ( GCP , AWS ,Azure ). El escalado automático está asociado con el equilibrio de carga. Es decir, con el escalado automático de recursos en tiempos de alta carga, se asignan recursos adicionales, y durante los períodos de baja carga, se deshabilitan recursos innecesarios. Pero, incluso considerando esto, debe tenerse en cuenta que el escalado automático tampoco es una solución universal. Lleva tiempo iniciar los servidores automáticamente. Las configuraciones de autoescalado requieren una configuración seria. Por lo tanto, antes de aplicar un sistema complejo de escalado automático, vale la pena probar una configuración relativamente simple con un equilibrador de carga.

▍Uso de compresión de datos


Los recursos de texto deben comprimirse utilizando el algoritmo gzip o brotli. En algunos casos, la compresión puede ayudar a reducir el tamaño de dichos recursos en aproximadamente un 70%.

Diagnósticos


Para encontrar recursos que necesitan compresión, puede usar el indicador Habilitar compresión de texto del informe de Lighthouse.

Resolución de problemas


Para habilitar la compresión, debe editar la configuración del servidor. Aquí están los detalles sobre esto:


▍ Optimización de imágenes y otros materiales multimedia.


En la imagen cae la mayor parte de los materiales de la mayoría de los sitios web. La optimización de la imagen puede conducir a una reducción significativa en el tamaño de los materiales del sitio. Además, dicha optimización se realiza con bastante rapidez.

Diagnósticos


Hay varios indicadores en el informe de Lighthouse que indican posibles opciones de optimización de imagen. Para buscar imágenes grandes que necesiten optimización, puede usar las herramientas habituales para desarrolladores de navegadores. Tales imágenes pueden convertirse en buenos candidatos para la optimización.

Aquí hay una lista de métricas de informes de LightHouse a las que debe prestar atención al explorar la posibilidad de optimización de imagen:


Si está utilizando las herramientas de desarrollador de Chrome para ayudarlo a optimizar sus imágenes, puede seguir estos pasos:

  • Registre la actividad de red de la página.
  • Haga clic en Imgpara filtrar recursos que no sean de imagen.
  • Haga clic en una columna Sizepara ordenar los archivos de imagen por tamaño.

Resolución de problemas


Primero, hablemos sobre lo que debe hacerse si tiene poco tiempo.

En tal situación, debe prestar atención a las imágenes grandes y a las imágenes que se descargan con más frecuencia que otras. Una vez encontrados, deben someterse a optimización manual, utilizando una herramienta como Squoosh . Las fotos grandes suelen ser buenas candidatas para la optimización. Por ejemplo, tomado de un recurso como Hero Images .

Esto es a lo que debe prestar atención al optimizar imágenes:

  • Tamaño: las imágenes no deben ser más grandes de lo necesario.
  • : , 80-85 , 30-40% .
  • : JPEG, PNG. MP4, GIF.

Ahora algunas palabras sobre cómo abordar la optimización de imágenes para aquellos que tienen un poco más de tiempo.

Si las imágenes representan una parte importante de los materiales del sitio, considere usar un servicio CDN especializado diseñado para trabajar con imágenes para su mantenimiento. Dichos servicios le permiten eliminar la carga de trabajar con imágenes del servidor principal. Configurar un proyecto para utilizar dicho servicio CDN es simple, pero requiere actualizar los enlaces existentes a las imágenes para que apunten a los recursos CDN. Aquí está el material sobre el uso de servicios CDN especializados diseñados para imágenes.

▍Minificación de JavaScript y CSS


La minificación de código le permite reducir su tamaño eliminando caracteres innecesarios.

Diagnósticos


Eche un vistazo a las métricas Minify CSS y Minify JavaScript en el informe Lighthouse para identificar los recursos que necesitan minificación.

Resolución de problemas


Si no tiene mucho tiempo, concéntrese en minificar el código JavaScript. En la mayoría de los sitios, la cantidad de código JavaScript excede la cantidad de código CSS, por lo que este movimiento dará mejores resultados. Aquí está lo de minificar JavaScript, y aquí está lo de minificar CSS.

4. Monitoreo del servidor


Las herramientas de supervisión del servidor admiten la recopilación y visualización de datos mediante paneles de control. Pueden notificar a los usuarios sobre diversos eventos relacionados con el rendimiento del servidor. El uso de estas herramientas puede ayudar a prevenir y mitigar los problemas de rendimiento del servidor.

Al configurar un sistema de monitoreo, debe esforzarse por lograr la mayor simplicidad posible. La recopilación excesiva de datos y las notificaciones demasiado frecuentes pueden causar efectos negativos. Cuanto más amplio sea el rango de datos recopilados y cuanto más a menudo se recopilen, más costoso será recopilarlos y almacenarlos. Y si el responsable del estado del servidor será bombardeado con mensajes sobre eventos menores, entonces, como resultado, ignorará estos mensajes.

Las notificaciones deben contener métricas que describan los problemas de manera consistente y precisa. Por ejemplo, el tiempo de respuesta del servidor (latencia) es una medida especialmente buena para esto: le permite identificar una gran cantidad de situaciones problemáticas y está directamente relacionado con la forma en que los usuarios perciben el servidor. Las notificaciones basadas en métricas de bajo nivel, como los niveles de utilización del procesador, pueden desempeñar el papel de un complemento útil, pero solo pueden indicar una pequeña parte de posibles problemas. Además, las notificaciones no deben basarse en indicadores promedio, sino en indicadores correspondientes a los percentiles 95-99. De lo contrario, el análisis de promedios puede conducir fácilmente a omitir problemas que no afectan a todos los usuarios.

Configuración de monitoreo


Todos los principales proveedores de la nube proporcionan a los clientes sus propias herramientas de monitoreo ( GCP , AWS , Azure ). Además, la herramienta Netdata se puede observar aquí : una excelente alternativa gratuita de código abierto a las herramientas de proveedor. Independientemente de lo que utilice exactamente, deberá instalar una aplicación de agente en cada servidor que desee supervisar. Después de completar la configuración del sistema, asegúrese de configurar las notificaciones. Aquí están las instrucciones para configurar diferentes herramientas de monitoreo:


Resumen


Hoy hablamos sobre cómo identificar y solucionar problemas de rendimiento del servidor. Me gustaría creer que sus servidores funcionarán de manera estable y los consejos de este material no le serán útiles. Y si algo sale mal, esperamos que encuentre algo aquí que lo ayude a resolver el problema lo más rápido posible.

¡Queridos lectores! ¿Qué haces en una situación en la que el servidor en el que se ejecuta tu proyecto comienza a disminuir?


All Articles