Infraestructura escalable que pueda soportar grandes picos de trafico

Este mes estuvimos desarrollando un proyecto de webhosting para la Cervezeria Quilmes. Como festejo de su 125 aniversario, Quilmes decidió celebrar la noche de brujas invitando a su publico a una casa embrujada. Nos asignaron la tarea de montar toda la plataforma de hosting (y armado del sitio) para este evento.

Especificaciones:

  • La publicidad se haría simultáneamente en Redes Sociales (5 millones de seguidores), TV, Radio y Vía Publica.
  • La plataforma debe soportar picos de carga de  30.000 requests por segundo, con posibilidad de cubrir los picos de carga en menos de 10 segundos.
  • La disponibilidad del sitio, base de datos y recursos debe ser del 100%.

Solución Desarrollada:

schema-archi

Para asegurar la máxima disponibilidad del sitio todo fue montado sobre una infraestructura de alta disponibilidad. A su vez esta plataforma es “elástica”, es decir puede crecer o achicarse en base a la cantidad de visitas, agregando o quitando cloud servers.

A) Distribuyendo la carga

Cuando un visitante ingresa al sitio habla en primera instancia con nuestra CDN, esta entrega todos los recursos estáticos (imágenes, fuentes, css, etc) y redirige el resto del request http a nuestro balanceador de carga [IP BC] (en realidad se tratan de dos balanceadores Cisco ACE trabajando en anycast que se encargan luego de distribuir los pedidos al resto de la plataforma, tambien hacen chequeo de disponibilidad para en caso de fallas quitar a ese servidor del algoritmo de balanceo). Una vez que el request llega a la [IP BC] es redirigido a nuestro primer punto de cache: dos servidores dedicados configurados con HAProxy. En esta configuración la IP BC se encarga del balanceo a nivel de red mientras que los servidores de HAProxy los ordenan de una manera mas refinada y dirigida (permite routeo a nivel de aplicación) y manipular los encabezados de las respuestas en ciertos casos.

A su vez nuestros balanceadores físicos tienen un rol fundamental en la seguridad de la plataforma ya que limitan el riesgo de ataques al resto de la infraestructura al abrir únicamente los puertos 80 y 443.

B) Estructura escalable

Un total de 10 web servers (3 físicos y 7 cloud servers) fueron fueron implementados para servir el trafico . Cada uno contiene una copia entera del sitio, el contenido del mismo se sincroniza entre los distintos componentes vía rsync. La ventaja de utilizar cloud servers es que posibilitan añadir o quitar servidores a medida que se lo va necesitando, si bien son instancias virtuales, el rendimiento de estas es muy alto, algo necesario para una optima experiencia en la navegación.

C) Alta disponibilidad de la base de datos

Por las características del proyecto (muchas visitas concurrentes con un numero limitado de cupos) resulta fundamental tener una velocidad de respuesta de la base de datos muy veloz, si bien se implemento una instancia de memcached en cada web server para cachear algunas de las consultas a la DB y asi poder hacer frente a semejante numero de visitas concurrentes, la cantidad prevista de registros por segundo y volatilidad de los cupos limita de gran manera que tanto se puede cachear y que necesita obtenerse de la base de datos en cada visita. Por ello que se implementaron dos servidores de MySQL replicados entre si. Ambas maquinas cuentan con discos SSD para una mayor performance de lectura y escritura, asegurando así tiempos de respuesta bajos.

D) Monitoreo de la plataforma

Toda la estructura se encuentra monitoreada a través de un VPS con PRTG instalado. PRTG monitorea todos los recursos tanto a nivel software (disponibilidad de los webservers, tiempos de respuesta, estabilidad del mysql) como hardware (RAM, CPU, consumo de disco y estadísticas de red). El equipo de IT del proyecto se entera instantáneamente de irregularidades que puedan surgir (incluso antes que afecte a los visitantes) de manera de poder solucionar los problemas transparentemente.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

CAPTCHA