¿Cuál es el "promedio" de solicitudes por segundo para una aplicación web de producción?

120

No tengo un marco de referencia en términos de lo que se considera "rápido"; Siempre me había preguntado esto, pero nunca había encontrado una respuesta directa ...

capotej
fuente
9
No hay una respuesta directa. Rápido es un término relativo y la respuesta depende en gran medida de su contexto y aplicación.
Dave L.

Respuestas:

105

OpenStreetMap parece tener 10-20 por segundo

Wikipedia parece estar entre 30000 y 70000 por segundo distribuidas en 300 servidores (de 100 a 200 solicitudes por segundo por máquina, la mayoría de las cuales son cachés)

Geograph obtiene 7000 imágenes por semana (1 carga cada 95 segundos)

OJW
fuente
6
Vaya, eso es bastante lento para wikipedia
Joseph Persie
8
@JosephPersie No olvides mirar la fecha de publicación, jeje.
Espectral
Todavía muestra menos de 200,000 / seg: la nueva página de monitoreo es grafana.wikimedia.org
OJW
interesante, solo estaba cargando la transmisión de pruebas en piezas web en registros por segundo frente a solicitudes por segundo. Creo que las solicitudes / segundo están en el mismo estadio (100 a 200) pero con la transmisión se disparan hasta 1140 registros / segundo (haciendo ndjson). De todos modos pensé que compartiría más números. (no estoy seguro de si esto cambiará, ya que se probó transmitido a través de 2 microservicios en la base de datos en memoria ... aún necesitamos probar con la base de datos en vivo. La base de datos puede ser nuestro cuello de botella y hacernos retroceder a menos que cambiemos a nosql).
Dean Hiller
50

No estoy seguro de que alguien todavía esté interesado, pero esta información se publicó sobre Twitter (y aquí también ):

Las estadísticas

  • Más de 350.000 usuarios. Los números reales son, como siempre, muy súper súper secretos.
  • 600 solicitudes por segundo.
  • Promedio de 200 a 300 conexiones por segundo. Alcanzando 800 conexiones por segundo.
  • MySQL manejó 2.400 solicitudes por segundo.
  • 180 instancias de Rails. Utiliza Mongrel como servidor "web".
  • 1 servidor MySQL (una caja grande de 8 núcleos) y 1 esclavo. El esclavo es de solo lectura para estadísticas e informes.
  • Más de 30 procesos para manejar trabajos ocasionales.
  • 8 Sun X4100s.
  • Procese una solicitud en 200 milisegundos en Rails.
  • El tiempo medio empleado en la base de datos es de 50 a 100 milisegundos.
  • Más de 16 GB de memcached.
Peter K.
fuente
2
Un paso más cerca de las fuentes en caso de que la publicación del blog falle
Chinoto Vokro
@ChinotoVokro También agregó su enlace a la respuesta. ¡Gracias!
Peter K.
1
@user :-D Sí, es bastante histórico ahora. ¡Sin embargo, fue una respuesta útil para mí en ese momento! :-)
Peter K.
13

Cuando voy al panel de control de mi servidor web, abro phpMyAdmin y hago clic en "Mostrar información de tiempo de ejecución de MySQL", obtengo:

Este servidor MySQL ha estado funcionando durante 53 días, 15 horas, 28 minutos y 53 segundos. Comenzó el 24 de octubre de 2008 a las 04:03 a.m.

Estadísticas de consultas: desde su inicio, se han enviado al servidor 3.444.378.344 consultas.

Total 3444 M
por hora 2,68 M
por minuto 44,59 k
por segundo 743,13

¡Eso es un promedio de 743 consultas mySQL cada segundo durante los últimos 53 días!

No sé ustedes, ¡pero para mí eso es rápido! ¡¡Muy rapido!!

lkessler
fuente
No estoy seguro. En ese momento yo estaba en IXWebhosting y estaban usando un sistema operativo Windows de 32 bits para sus servidores compartidos. Sospecho que su servidor de base de datos mySQL era una máquina dedicada separada, pero no lo sé con certeza.
lkessler
3
Apostaría a que ese número es un agregado de todos los accesos a ese servidor MySQL en particular, y no solo a su instancia, aunque puedo estar equivocado
warren
@Warren: Sí, estaba asumiendo que era el servidor completo. Pero saber lo que implica el procesamiento de una consulta SQL, manejar esa cantidad CADA segundo es muy impresionante ... y eso es solo el promedio, no la carga máxima.
lkessler
11

personalmente, me gusta tanto el análisis realizado cada vez ... solicitudes / segundo y tiempo promedio / solicitud y me encanta ver el tiempo máximo de solicitud también. es fácil cambiarlo si tiene 61 solicitudes / segundo, luego puede cambiarlo a 1000ms / 61 solicitudes.

Para responder a su pregunta, hemos estado haciendo una gran prueba de carga nosotros mismos y encontramos que varía en varios hardware de Amazon que usamos (el mejor valor fue la CPU mediana de 32 bits cuando se redujo a $$ / evento / segundo) y nuestras solicitudes / segundos osciló entre 29 solicitudes / segundo / nodo hasta 150 solicitudes / segundo / nodo.

Ofrecer un mejor hardware, por supuesto, da mejores resultados, pero no el mejor ROI. De todos modos, esta publicación fue excelente, ya que estaba buscando algunos paralelos para ver si mis números estaban en el estadio y también compartían los míos en caso de que alguien más estuviera mirando. La mía está puramente cargada tan alto como puedo.

NOTA: gracias a las solicitudes / segundo análisis (no a ms / solicitud) encontramos un problema importante de Linux que estamos tratando de resolver donde Linux (probamos un servidor en C y Java) congela todas las llamadas en bibliotecas de socket cuando está bajo demasiada carga lo que parece muy extraño. La publicación completa se puede encontrar aquí en realidad ... http://ubuntuforums.org/showthread.php?p=11202389

Todavía estamos tratando de resolver eso, ya que nos da un gran impulso en el rendimiento, ya que nuestra prueba va de 2 minutos 42 segundos a 1 minuto 35 segundos cuando esto se soluciona, por lo que vemos una mejora del rendimiento del 33% ... sin mencionar, cuanto peor es el ataque DoS, más largas son estas pausas para que todos los cpus caigan a cero y dejen de procesar ... en mi opinión, el procesamiento del servidor debería continuar frente a un DoS, pero por alguna razón, se congela de vez en cuando durante el Dos a veces hasta 30 segundos !!!

ADICIÓN: Descubrimos que en realidad era un error de condición de carrera de jdk ... difícil de aislar en grandes clústeres, pero cuando ejecutamos 1 nodo de datos del servidor 1 pero 10 de esos, pudimos reproducirlo cada vez que lo hicimos y solo miramos el servidor / datanode en el que ocurrió. Cambiar el jdk a una versión anterior solucionó el problema. Estábamos en jdk1.6.0_26, creo.

Dean Hiller
fuente
4

Ese es un tipo de pregunta muy abierta.

Estás preguntando 1. la carga de solicitud promedio para una aplicación de producción 2. qué se considera rápido

Estos no se relacionan necesariamente.

Su número promedio de solicitudes por segundo está determinado por

a. el número de usuarios simultáneos

si. el número medio de solicitudes de página que realizan por segundo

C. la cantidad de solicitudes adicionales (es decir, llamadas ajax, etc.)

En cuanto a lo que se considera rápido ... ¿te refieres a las pocas solicitudes que puede aceptar un sitio? ¿O si una pieza de hardware se considera rápida si puede procesar xyz # de solicitudes por segundo?

DaveJustDave
fuente
1

Tenga en cuenta que los gráficos de tasa de aciertos serán patrones sinusoidales con 'horas pico' tal vez 2 veces o 3 veces la tasa que obtiene mientras los usuarios duermen. (Puede ser útil cuando está programando el procesamiento por lotes diario para que suceda en los servidores)

Puede ver el efecto incluso en sitios 'internacionales' (multilingües, localizados) como wikipedia

OJW
fuente
1

menos de 2 segundos por usuario por lo general, es decir, los usuarios que ven respuestas más lentas piensan que el sistema es lento.

Ahora dime a cuántos usuarios has conectado.

gbjbaanb
fuente
1

Puede buscar en el "análisis del efecto de slashdot" gráficos de lo que vería si algún aspecto del sitio se hiciera popular de repente en las noticias, por ejemplo, este gráfico en wiki .

Las aplicaciones web que sobreviven tienden a ser las que pueden generar páginas estáticas en lugar de someter cada solicitud a un lenguaje de procesamiento.

Hubo un video excelente (creo que podría haber estado en ted.com? Creo que podría haber sido del equipo web de flickr? ¿Alguien conoce el enlace?) Con ideas sobre cómo escalar sitios web más allá del servidor único, por ejemplo, cómo asigne conexiones entre la combinación de servidores de solo lectura y de lectura y escritura para obtener el mejor efecto para varios tipos de usuarios.

OJW
fuente