Escalado de aplicaciones

7

¿Qué debo considerar al tomar una aplicación (web) de unos pocos usuarios a cientos o miles? Básicamente, ¿qué debería tener en cuenta al pensar en escalar?

    
pregunta Luis Armando 08.05.2011 - 22:26

3 respuestas

11

En general, cuando hablamos de escalabilidad, se trata de pasar de unos pocos miles a unos pocos millones o miles de millones de solicitudes. En tal caso, la escalabilidad requiere que una aplicación funcione en varios servidores, que tiene algunos problemas muy específicos que la escalabilidad tiende a resolver.

Por otro lado, en su caso, parece que solo tiene que enfrentar el aumento de usuarios, sin verse obligado a usar varios servidores en lugar de uno (a menos que el servidor actual sea bastante lento, en cuyo caso la actualización debe ser considerado, o el sitio web tiene un impacto en los recursos del servidor, en cuyo caso se deben encontrar y eliminar los cuellos de botella).

Hay varios puntos a considerar en su caso:

  • ¿Usas suficiente caché? No olvide que la memoria caché puede implementarse en varios niveles, desde resultados de la base de datos de almacenamiento en caché para evitar realizar las mismas consultas una y otra vez, hasta almacenamiento en caché de resultados para evitar el uso de más CPU que necesario, para almacenamiento en caché del cliente , reducir el número de solicitudes (por ejemplo, evitar que el cliente solicite el mismo archivo CSS una y otra vez solo para recibir una y otra vez la respuesta 304).

  • ¿Utiliza el generador de perfiles SQL? De lo contrario, es una buena idea comenzar a usar uno para asegurarse de que no hay consultas repetitivas , y para encontrar las consultas que deben optimizarse .

  • ¿Utiliza un perfilador? El perfilado de su aplicación puede mostrar dónde utiliza demasiada memoria o demasiada CPU. Trabajar en esos cuellos de botella puede reducir considerablemente la carga .

  • ¿Cuál es la parte más débil de su servidor? Si ve que la RAM se usa hasta un 20% mientras que la CPU se usa hasta el 95-99% todo el tiempo, probablemente debería actualizar su CPU, pero no necesita comprar más RAM.

  • ¿Utilizas tu servidor al máximo? Si ve que la RAM se usa hasta un 20%, ¿por qué no implementa más caché y la usa hasta un 75 - 85%? Si su aplicación pasa mucho tiempo consultando datos del disco duro, ¿por qué no compra un segundo disco duro y lo utiliza en RAID1 (si es su caso, dado su hardware y su uso del disco, RAID1 puede proporcionar un acceso más rápido)?

  • ¿Cómo se usa el servidor fuera de su aplicación web? En otras palabras, ¿existen otros procesos que pueden usar los recursos y, en caso afirmativo, los necesita y sabe qué están haciendo? También se aplica a los procesos programados. Ejecutando una copia de seguridad a 3 A.M. cuando hay como máximo dos o tres usuarios en su sitio web está bien. Ejecutando la misma copia de seguridad a las 6 P.M. cuando observa un pico de visitas en su sitio web, claramente no es una buena idea .

respondido por el Arseni Mourzenko 08.05.2011 - 23:26
2

Puede disminuir la carga de su base de datos si no la normaliza, pero debería compararla.

Para Java, puede reducir el tamaño de la pila usando parámetros a la JVM, ya que la cantidad de memoria disponible puede ser un cuello de botella si tiene muchos usuarios concurrentes. También puede ser interesante cambiar a un servidor controlado por eventos, p. Ej. Netty si su servidor usa mucha memoria para los servlets. Play Framework es un interesante marco web de Java para Netty.

Al usar PHP, debes usar APC o Memcached para acelerar.

También debe considerar el uso de Varnish para almacenar sus solicitudes en caché.

    
respondido por el Jonas 08.05.2011 - 23:00
1

La parte más importante de su infraestructura a considerar al escalar (asumiendo que tiene una pila de software que funciona decentemente) es la disposición física. Es decir, ¿tiene múltiples servidores web, detrás de los balanceadores de carga? ¿Tienes aplicaciones agrupadas y servidores db? ¿Estás sentado en una red dedicada aislada de dev y qa? Estas son algunas de las cosas en las que hay que centrarse.

    
respondido por el ennuikiller 08.05.2011 - 23:07

Lea otras preguntas en las etiquetas