2010/2/9 Cristiam Castillo <[email protected]>:
Ha llegado el momento de escalar nuestra aplicación. Necesitamos enviar
miles de emails en menos tiempo, tener un site más estable y más rápido
y mejorar los tiempos de respuesta y la cantidad de solicitudes por segundo.
Primero que todo distinguir: escalar la aplicación web no significa
que se vaya a tener un mejor tiempo de respuesta. Escalar significa
que la aplicación podrá manejar una carga mayor sin que se degrade su
performance actual. Es decir: si mi aplicación responde en 5 segundos
con 10 requests por segundo, el hecho de que escale significa que
responderá igual con 100 requests por segundo (por ejemplo)
Por ello, suelto este hilo: ¿han escalado sus aplicaciones web? ¿qué
arquitectura recomiendan?
Te recomendaría primero medir tu aplicación web. Saber cuánto tráfico
soporta ahora y cuánto podrá soportar. Si la cantidad de requests
aumenta dónde comienza a sufrir: ¿usa mas memoria?, ¿más CPU?, ¿la
base de datos es el cuello de botella?.
Hasta ahora, luego de leer varias horas, siento que la arquitectura
"mejor" utiliza un balanceador de carga (apache mod_load_balancer) que
canaliza la solicitud (http, smpt, etc) a un "cluster" de servidores web.
Es la "mejor" por defecto, pero tienes que tener muchas
consideraciones: ¿cómo replicar la información en todos los servidores
del cluster?, ¿funciona nuestra aplicación en una arquitectura
distribuida?, ¿qué tan rápido se puede agregar nuevos servidores al
cluster?
Además se trabaja con bases de datos MySQL en modo Master - Slave. Cada
webserver podría tener un MySQL "slave" de sólo lectura y la base de
datos Master es donde se escribe.
Es una buena idea para comenzar a trabajar, pero recuerda que a mayor
cantidad de Slaves, la replicación puede comenzar a fallar. Todo tiene
un "pero".
Tambien se divide los archivos "assets"(imágenes, textos fijos, audios y
videos)
Y se puede usar un servidor web más ligero que apache como nginx o
lighttpd y manejarlo con un dominio o subdominio distinto.
y las BDs de datos de las de estadísticas, se des-normaliza y se
aplica caché con memcached.
Son técnicas interesantes (agrega NoSQL, sistemas de archivos
distribuidos, cloud servers, etc.) pero igual hay que aplicarlas con
cuidado para que no se conviertas en puntos de falla de la aplicación.
Por lo menos la teoría la tienes, llevarlo a la práctica requiere
paciencia y buen humor :)
Saludos,
H.D.
_______________________________________________
Lista de correo Linux-plug
Temática: Discusión general sobre Linux
Peruvian Linux User Group (http://www.linux.org.pe)
Participa suscribiéndote y escribiendo a: [email protected]
Para darte de alta, de baja o hacer ajustes a tu suscripción visita:
http://listas.linux.org.pe/mailman/listinfo/linux-plug
IMPORTANTE: Reglas y recomendaciones
http://www.linux.org.pe/listas/reglas.php
http://www.linux.org.pe/listas/comportamiento.php
http://www.linux.org.pe/listas/recomendaciones.php