Pregunta ¿Cómo se realizan las pruebas de carga y la planificación de la capacidad de los sitios web?


Esto es un pregunta canónica sobre la planificación de la capacidad de los sitios web.

Relacionado:

¿Cuáles son algunas de las herramientas y métodos recomendados para la planificación de capacidad para sitios web y aplicaciones web?

Siéntase libre de describir diferentes herramientas y técnicas para diferentes servidores web, marcos, etc., así como las mejores prácticas que se aplican a los servidores web en general.


111
2018-01-16 22:49


origen




Respuestas:


La respuesta corta es: Nadie puede responder a esta pregunta, excepto usted.

La respuesta larga es que la evaluación comparativa de tu carga de trabajo específica es algo que debes emprender, porque es un poco como preguntar "¿Cuánto dura un trozo de cuerda?".

Un sitio web estático simple de una página podría estar alojado en un Pentium Pro 150 y aún así servir miles de impresiones todos los días.

El enfoque básico que debe tomar para responder esta pregunta es tratar y ver que pasa. Hay muchas herramientas que puede usar para poner su sistema bajo presión de manera artificial para ver dónde se dobla.

Una breve descripción de esto es:

  • Pon tu escenario en su lugar
  • Agregar monitoreo
  • Agregar trafico
  • Evaluar resultados
  • Remediar basado en resultados
  • Enjuague, repita hasta que esté razonablemente feliz.

Pon tu escenario en su lugar

Básicamente, para probar algo de carga, necesitas algo contra lo que probar. Configurar un entorno para probar contra. Esto debería ser una aproximación bastante cercana a su hardware de producción si es posible, de lo contrario, se quedará extrapolando sus datos.

Configure sus servidores, cuentas, sitios web, ancho de banda, etc. Incluso si lo hace en máquinas virtuales, está bien siempre y cuando esté preparado para escalar sus resultados.

Entonces, voy a configurar una máquina virtual de potencia media (dos núcleos, 512 MB de RAM, 4 GB de disco duro) e instalaré mi balanceador de carga favorito, haproxy dentro Red Hat Linux en la máquina virtual.

También voy a tener dos servidores web detrás del equilibrador de carga que usaré para realizar una prueba de esfuerzo del equilibrador de carga. Estos dos servidores web están configurados de manera idéntica a mis sistemas en vivo.

Añadir Monitoreo

Necesitará algunas métricas para monitorear, por lo que mediré cuántas solicitudes llegan a mis servidores web y cuántas solicitudes puedo exprimir por segundo antes de que los usuarios comiencen a recibir un tiempo de respuesta de más de dos segundos.

También voy a monitorear el uso de RAM, CPU y disco en el haproxy instancia para asegurarse de que el equilibrador de carga puede manejar las conexiones.

Cómo hacerlo depende mucho de sus plataformas y está fuera del alcance de esta respuesta. Es posible que deba revisar los archivos de registro del servidor web, iniciar los contadores de rendimiento o confiar en la capacidad de informe de su herramienta de prueba de estrés.

Algunas cosas que siempre quieres monitorear:

  • uso de CPU
  • Uso de memoria RAM
  • Uso del disco
  • Latencia del disco
  • Utilización de la red

También puede elegir ver los puntos muertos de SQL, los tiempos de búsqueda, etc., según lo que esté probando específicamente.

Agregar trafico

Aquí es donde las cosas se ponen divertidas. Ahora necesitas simular una carga de prueba. Existen muchas herramientas Eso puede hacerlo, con opciones configurables:

Elige un número, cualquier número. Digamos que vas a ver cómo responde el sistema con 10,000 visitas por minuto. No importa el número que elija porque va a repetir este paso muchas veces, ajustando ese número hacia arriba o hacia abajo para ver cómo responde el sistema.

Idealmente, debería distribuir estas 10,000 solicitudes en varios clientes / nodos de pruebas de carga para que un solo cliente no se convierta en un cuello de botella de solicitudes. Por ejemplo, JMeter's Prueba remota proporciona una interfaz central desde la cual lanzar varios clientes desde una máquina Jmeter de control.

Presiona la magia Ir Botón y ver sus servidores web se derriten y se estrellan.

Evaluar resultados

Entonces, ahora necesita volver a las métricas que recopiló en el paso 2. Usted ve que con 10,000 conexiones simultáneas, su haproxy La caja apenas está sudando, pero el tiempo de respuesta con dos servidores web es un toque durante cinco segundos. Eso no está bien. Recuerda, tu tiempo de respuesta apunta a dos segundos. Por lo tanto, tenemos que hacer algunos cambios.

Remediar

Ahora, necesitas acelerar tu sitio web más de dos veces. Así que sabes que necesitas escalar o escalar.

Para escalar, obtenga servidores web más grandes, más RAM, discos más rápidos.

Para escalar, consigue más servidores.

Use sus métricas del paso 2 y las pruebas para tomar esta decisión. Por ejemplo, si vio que la latencia del disco fue masiva durante las pruebas, sabe que necesita escalar y obtener discos duros más rápidos.

Si vio que el procesador estaba al 100% durante la prueba, quizás deba escalar para agregar servidores web adicionales para reducir la presión sobre los servidores existentes.

No hay una respuesta genérica correcta o incorrecta, solo hay lo que es correcto para usted. Intente escalar, y si eso no funciona, escale en su lugar. O no, depende de usted y de pensar un poco fuera de la caja.

Digamos que vamos a escalar. Así que decido clonar mis dos servidores web (son máquinas virtuales) y ahora tengo cuatro servidores web.

Enjuague, repita

Comience de nuevo desde el Paso 3. Si encuentra que las cosas no van como esperaba (por ejemplo, duplicamos los servidores web, pero los tiempos de respuesta siguen siendo más de dos segundos), entonces analice otros cuellos de botella. Por ejemplo, duplicó los servidores web, pero aún tiene un servidor de base de datos de mierda. O bien, clonó más máquinas virtuales, pero como están en el mismo host físico, solo logró una mayor contención para los recursos de los servidores.

Luego puede usar este procedimiento para probar otras partes del sistema. En lugar de golpear el equilibrador de carga, intente golpear el servidor web directamente, o el servidor SQL utilizando una herramienta de evaluación comparativa de SQL.


119
2018-04-29 14:05



Esto es excelente para las pruebas de carga, pero dice poco sobre la planificación de la capacidad. Quién puede escribir sobre la arquitectura escalable de Google, que fue concebida desde el principio, o sobre las alternativas que utilizan cajas menos costosas y más caras. - rleir


La planificación de capacidad comienza con la medición, en este caso el tiempo de respuesta frente a la carga. Una vez que sepa el grado en que los programas se ralentizan con la carga, que NO es una función lineal, puede seleccionar un objetivo de tiempo de respuesta y luego descubrir qué recursos tomará para cumplir con ese objetivo para una cantidad determinada de carga.

La medición del rendimiento siempre se realiza con hora unidades, como

  • son lo que les importa a los usuarios
  • se pueden escalar hacia arriba y hacia abajo

Cosas como% CPU y IOPS son específicas del sistema, por lo que solo las usa cuando planifica el sistema y lo mide en preproducción, para actuar como un "sustituto" de lo que le interesa, el tiempo.


9
2018-04-21 22:32





La planificación de la capacidad es una bestia problemática. Es tanto ciencia como arte (aunque definitivamente oscuro).

Tu mejor caso es que tomes decisiones bien informadas. y La fortuna / suerte te favorece porque la realidad cumple con tus suposiciones. Si tu capacidad necesita suposiciones que coincidan con la realidad, pareces un yogi místico. Desafortunadamente, si sus suposiciones superan la realidad, parecerá que se ha sobrepasado y sobrepasado. Más desafortunadamente, si sus suposiciones están por debajo de la realidad eventual (o son incorrectas), carecerá de la capacidad que necesita y tendrá que luchar para mitigar los fallos de su infraestructura, lo que hace que parezca que carece de competencia.

Sin presión...

Desafortunadamente, el arte oscuro de la planificación de la capacidad es más de lo que se puede destilar razonablemente en una sola respuesta de falla del servidor; En verdad, es un tema digno de libros.

Afortunadamente, hay tal libro: "El arte de la planificación de la capacidad"


8





Para ampliar la publicación de Mark Henderson, estoy escribiendo esto específicamente para Apache. Para reiterar lo que dijo, "la respuesta corta es: nadie puede responder a esta pregunta, excepto usted". El texto de esta respuesta está prestado en gran medida de mi respuesta a una pregunta similar sobre un Rendimiento del sitio web de Drupal.

Configurando Apache Con Mod_Prefork

apache Podría decirse que es uno de los (si no el) servidor web más popular disponible. Es de código abierto y todavía se mantiene activamente. Puede ejecutarlo en sistemas operativos Linux y Windows, pero es más popular en el mundo Linux / Unix.

Debieras Nunca use una configuración de Apache lista para usar. Siempre necesitas ajustar Apache a tu sitio. El principal Configuracion apache archivo en CentOS se encuentra en /etc/httpd/conf/httpd.conf, y el archivo de configuración principal de Apache en los sistemas Ubuntu generalmente se encuentra en /etc/apache2/apache2.conf. Archivos de configuración adicionales se utilizan para cosas como Hosts virtuales.

Al igual que una gran cantidad de software, Apache está diseñado para ser flexible y personalizado según las necesidades de un sitio web específico. Existen diferentes módulos de multiprocesamiento. que Apache se puede configurar para usar para enlazar a un puerto de red y aceptar y procesar las solicitudes.

La mayoría de las veces, en las instalaciones predeterminadas de Apache que vienen con los servidores CentOS y Ubuntu, el MPM "mod_prefork"se usa. Suponiendo que esté usando mod_prefork (si no está seguro, entonces eso es lo más probable, pero solo usted puede determinar eso) Aquí están los conceptos básicos de cómo configurarlo:

  • Calcule la cantidad máxima de memoria que desea que Apache pueda usar.
  • Realice pruebas pesadas en su sitio web y determine la cantidad de memoria que utiliza cada proceso de Apache (usando top).
  • Tome el proceso de Apache en la parte superior que usa la mayor cantidad de memoria, agregue un poco a él como buena medida y luego divida su primer número (la cantidad máxima de memoria que desea que use Apache) entre este nuevo número.
  • El número que obtenga debe ser su MaxClients Y ServerLimit variables

Esto ciertamente no es la respuesta final. Ajuste de su servidor Apache toma tiempo y requiere experiencia para ser justo.


5



el uso de la memoria basado únicamente en la parte superior es ligeramente defectuoso, verifique f.e. stackoverflow.com/questions/7880784/… Además, es posible que desee utilizar la secuencia de comandos de Python "ps_mem.py" en lugar de la parte superior para el uso de la memoria, o incluso usar los valores directamente adjuntos al proceso en / proc - Dennis Nolte
La respuesta completa vale la pena por la nota que agregó: "Nunca debe usar una configuración de Apache fuera de la caja". Nunca podemos enfatizar esto lo suficiente. - ezra-s


También sugeriría hablar con los Arquitectos e Ingenieros que diseñaron / construyeron las aplicaciones para tratar de identificar cuellos de botella, puntos únicos de falla y limitaciones de licencia.


0