¿Cómo hacer para escalar una aplicación web?

¿Cómo hacer para escalar una aplicación web?

Soy principalmente un desarrollador de aplicaciones web y no sé mucho sobre técnicas de escalamiento/escalabilidad. Mi aplicación está escrita en Python, usando Django; una configuración bastante estándar.

Actualmente uso Apache 2.2 para mi servidor web y MySQL para mi servidor de base de datos; ambos ejecutándose en el mismo VPS.

Hasta ahora, era básicamente un prototipo y sólo entre 15 y 30 usuarios simultáneos en un momento dado; Así que no tuve problemas, pero ahora que agregaremos más usuarios tendremos problemas de rendimiento.

Entonces mi pregunta es ¿cómo hago para escalar mi aplicación web? Mi plan actual es el siguiente:

  1. Ahora solo tengo un servidor vps en ejecución, apache + MySQL.
  2. A continuación, planeo agregar otro servidor vps para ejecutar solo MySQL, por lo que tendré un servidor web y un servidor de base de datos.
  3. A continuación, agregaré Memcache al servidor web para almacenar datos en caché y aliviar un poco la carga de MySQL.
  4. A continuación, otro servidor web para servir todo el contenido estático.
  5. A continuación, un servidor VPS para equilibrio de carga (nginx/varnish) detrás del cual estarían mis dos servidores web y luego el servidor db.

¿Suena como una estrategia viable? Por favor guíame por aquí.

Respuesta1

¿Sabes dónde está tu primer cuello de botella? Si no, ¿cómo estableciste el orden de las cosas a hacer?

Dicho esto, si no has hecho nada terriblemente malo en tu aplicación, el primer límite que probablemente alcanzarás será la E/S del disco causada por la base de datos y tu estrategia probablemente será una buena opción.

Mover la base de datos a otro disco físico debería ayudar mucho y ser lo primero que debe hacer. Por ejemplo, dependiendo de los sistemas que esté utilizando, podría no haber diferencia o una gran diferencia entre usar un segundo disco en el host actual o pasar a un servidor completamente separado. Estás ejecutando VPS, si estás limitado por E/S de disco, moverte a un segundo VPS probablemente no ayudará mucho si usa el mismo almacenamiento (el mismo disco o el mismo SAN o lo que sea), pero este último es un problema que debe ser abordado por su proveedor de vps.

Respuesta2

Recomiendo leerArquitecturas de Internet escalablespor Theo Schlossnagle. El libro describe toda la teoría y la práctica de escalar aplicaciones entre servidores, asegurando que no haya puntos únicos de falla, escalar bases de datos, etc.

Sin embargo, su plan parece la primera progresión de escalamiento. Por lo general, todo comienza en un servidor, luego se divide la web y la base de datos, luego se agrega un proxy inverso o un equilibrador de carga y se ejecutan varios servidores web, y así sucesivamente.

Respuesta3

No se puede mejorar lo que no se mide. Primero deberías ver cuál es tu cuello de botella. Puede utilizarlo ahora y configurar algún tipo de seguimiento si aún no lo ha hecho. Si todo funciona bien, puede generar una carga realista utilizando JMeter.

Aquí hay más perspectiva sobre la infraestructura que se debe construir alrededor de su aplicación Django.

información relacionada