Muy frecuentemente debemos realizar estimaciones de uso de recursos con la finalidad de establecer recomendaciones o tomar decisiones sobre el despliegue de aplicaciones web y garantizar el funcionamiento óptimo y la escalabilidad de las mismas.

De esta manera, muchos establecen ciertas prácticas o recomendaciones generales, pero en ocasiones las que hemos desarrollado a lo largo del tiempo no son suficientes para justificar una decisión respecto a la infraestructura de soporte. En otras ocasiones, el ambiente de ejecución de la aplicación ya es parte de los requerimientos como límites imperativos; por ejemplo, la aplicación debe correr en un equipo con 256MiB de RAM y una tasa de transferencia de X GiBs al año y se debe establecer el límite de clientes de la aplicación.

¿Qué recomiendan en estos casos?

Particularmente, quisiera probar con algunas herramientas, como cgroups en Linux, para evaluar el desempeño y escalabilidad de Django en ambientes con memoria limitada. Digamos 64MiB de RAM disponible para el servidor y la aplicación.

No quisiera entrar en una discusión sobre qué servidor es más ligero o prácticas para reducir la transferencia de datos o el consumo de memoria. Sino sobre herramientas y procedimientos para respaldar estas recomendaciones.

En sus marcas... ;-)

Saludos.

preguntado 25 Nov '11, 00:25

sebasmagri's gravatar image

sebasmagri
5464520
Aceptadas: 22%


Desde hace varios días he estado utilizando Multi-Mechanize en combinación con CGroups y me ha parecido una combinación bastante objetiva y buena.

En resumen, con CGroups puedo establecer límites a la memoria y uso de procesador. Creo un Control Group donde voy a ejecutar el servidor web y el de bases de datos usando las utilidades de libcgroup. Luego entonando varios grupos de Usuarios con Multi-Mechanize puedo ver la escalabilidad de la aplicación en las condiciones establecidas por los límites del Control Group. Igualmente puedo ver el rendimiento por separado del servidor web y el de base de datos usando herramientas como AB o HttPerf y pgbench.

Saludos.

enlace permanente

respondido 28 Nov '11, 12:52

sebasmagri's gravatar image

sebasmagri
5464520
Aceptadas: 22%

Estimar los recursos necesarios para una aplicación django es bastante empírico. Pensar en cómo sería escalar desde un servidor web ligero tipo ngix a apache es algo que nunca podrás saber si antes no lo pruebas. Existen demasiados grados de libertad sobre los que operar.

Yo intentaría crear una batería de tests de estrés con Selenium o Multi-mechanize, y probaría a cambiar configuraciones de cacheos y número de procesos simultáneos permitidos.

A veces la solución más escalable, propiamente dicha, es la que consta de varios servidores, cada uno especializado en alguna parte de la aplicación. Por ejemplo, una configuración típica constaría de un servidor web transaccional y varios servidores cacheados para consultas. En el transaccional, el rendimiento depende mucho de la base de datos y sus conexiones, mientras que en los servidores cacheados se podrían emplear distintas estrategias como ampliar memoria, aumentar procesadores, etc.

enlace permanente

respondido 28 Nov '11, 12:39

chemacortes's gravatar image

chemacortes
3.3k34047
Aceptadas: 58%

Estoy de acuerdo contigo en que la única manera de saber el comportamiento de una aplicación bajo ciertas condiciones es probar. Entiendo lo que defines como grados de libertad, y considero que precisamente reducir esos grados de libertad es lo que puede reducir lo empírico de las estimaciones y llevarnos a estimaciones más objetivas.

No he probado con Selenium, pero lo tomaré en cuenta dentro de mi batería de herramientas.

Gracias!

(28 Nov '11, 12:55) sebasmagri
Tu respuesta
Activar/desactivar vista previa

Seguir esta pregunta

Por Email:

Una vez que entres podrás suscribirte desde aquí para recibir actualizaciones

Por RSS:

Respuestas

Respuestas y Comentarios

Trucos del editor

  • *italic* or __italic__
  • **negrita** o __negrita__
  • enlace:
    [texto](http://url.com/ "Pregunta")
  • imagen:
    ![alt texto](/path/img.jpg "Pregunta")
  • lista numerada:
    1. Foo
    2. Bar
  • Código:
    • Dentro de un parrafo:
      `codigo`
    • Fragmento de código:
      Selecciona el texto y usa el botón del icono de ceros y unos
  • Resaltado de sintaxis:
    Hay dos maneras de hacerlo:
    • La 1ª línea es un Shebang #!/usr/bin/env python
    • La 1ª línea es un lexer
      :::python

      Algunos lexer validos:
      :::python
      :::django
      :::css+django
      :::html+django
      :::console
      :::pycon
  • Para añadir un salto de línea simplemente deja una línea en blanco entre parrafos
  • se permite código HTML básico

Etiquetas de la pregunta:

×174
×77
×2
×1

pregunta realizada: 25 Nov '11, 00:25

pregunta vista: 830 veces

última modificación: 28 Nov '11, 12:55