en Arquitectura y Servidores

Minube usa AWS

Hace unas semanas propusimos en twitter que vosotros mismos nos sugirieseis temas sobre los que hablar, y entre las muchas sugerencias que recibimos, ceronne nos preguntó si usábamos Cloud Computing. Así que, como es una de las partes que me toca, he pensado que sería interesante contar qué servicios de Cloud Computing usamos en minube, cómo los usamos y para qué.

Desde nuestros comienzos, una de los grandes problemas a los que nos enfrentábamos era el almacenamiento y procesado de contenido multimedia. Como sabéis, podéis completar un rincón añadiendo material audiovisual, y para nosotros era importante que tanto la experiencia del usuario al publicar su contenido fuera sencilla y rápida, como conseguir una arquitectura fácilmente escalable y manejable. Otro factor añadido, era los recursos económicos limitados. Como toda StartUp, los gastos tienen que ser muy medidos, por lo que un servicio en el que el pago fuera estrictamente por uso nos ayudaría a minimizar gastos. Estaba claro que nuestra mejor apuesta sería el Cloud Computing (pago por uso, fácilmente escalable y transparente para el desarrollador, …)

Cuando lanzamos minube, no había muchas opciones en el mercado, pero una de ellas era Amazon. La tienda online más grande del mundo había lanzado un servicio de Cloud Computing llamado Amazon Web Services. Era la mejor opción en aquel momento y aún sigue siendo la que mejor cubre nuestras necesidades.

Qué servicios de AWS usamos :

Usamos 4 servicios de AWS : S3 (Simple Storage Service), EC2 (Elastic Computing Cloud), Cloud Front y EBS (Elastic Block Storage). Todos ellos combinados entre sí.

S3 es un servicio de almacenamiento virtualmente ilimitado que funciona como servidor web estático. Esto nos permite subir todo el contenido multimedia de nuestros usuarios y distribuirlo directamente por HTTP. S3 escala automáticamente en capacidad de forma transparente, por lo que no tenemos límite de almacenamiento ni tenemos que preocuparnos por distribuir el contenido entre distintas máquinas. S3 se encarga de organizar los datos y escalar la capacidad cuando sea necesario. Además es un servicio en el que el pago se realiza bajo demanda (datos almacenados + datos transferidos).

Como complemento a S3, usamos Cloud Front. Un servicio de distribución de contenidos (CDN), que permite minimizar la latencia en la descarga. CloudFront replica bajo demanda los datos solicitados a un nodo geográficamente cercano al usuario. Cuando un usuario en Singapur solicita por ejemplo una imagen de minube, Cloud Front copia esa imagen a un servidor que está en su propio país para que la descarge, por lo que la latencia es menor que descargarla desde un servidor al otro lado del planeta.

El tercer servicio que usamos es EC2, que nos ofrece el acceso y uso de máquinas (servidores Linux o Windows) bajo demanda. En estas máquinas es donde procesamos tanto las fotos y videos. Para las fotos generamos unas 7 copias en distintos tamaños y para los videos 2 versiones : una en alta calidad (HD si fuera posible) y otra en baja calidad (para ofrecer a los usuarios con conexiones lentas).
EC2 además nos permite escalar de forma muy rápida y sencilla. Por lo que si en algún momento necesitamos más capacidad (muchos usuarios suben contenido multimedia a la vez, por ejemplo) se solicitarían más máquinas donde balancear el tráfico. Una vez pasado el pico de carga, las máquinas de apoyo se apagan y seguimos trabajando con las de siempre.
Esto nos permite escalar bajo demanda, por lo tanto pagar sólo por lo que usamos. Mucho más barato que tener muchas máquinas reservadas. Además el escalado es inmediato.

Por último, EBS es un servicio que combina EC2 con S3 para crear espacios de memoria persistente. Cuando EC2 se apaga, toda la información almacenada en la instancia se pierde. Usando EBS podemos guardar datos de forma persistente y reutilizarlo en otra instancia de EC2 cuando la volvamos a levantar. Nosotros usamos EBS para almacenar una base de datos con la que gestionamos las colas de procesamiento y los logs de errores.

Cómo usamos AWS :

El proceso de subida de contenido multimedia es bastante sencillo.
Cuando un usuario sube una foto/video, la sube directamente a la instancia de EC2 a la que se le haya balanceado. Allí se almacena temporalmente y se registra en la cola para que sea procesada. Una vez generados los distintos tamaños de la foto, o las distintas versiones del video y miniaturas, la propia instancia termina de subir el contenido a S3 desde donde será distribuido. Por último una llamada interna a los servidores de minube registra el contenido en nuestra base de datos para tenerla disponible desde la web.
Todo este proceso se realiza en combinación con un sistema de ticketing para añadir una capa de seguridad que nos asegura que ningún usuario malintencionado suba contenido de forma inapropiada.

También solemos usar EC2 de forma puntual para realizar tareas muy grandes y repetitivas (recálculos de datos), o tareas que requieran demasiados recursos para cálculos, que serían perjudiciales para el funcionamiento de la web si se intentasen correr en las máquinas que sirven minube.

Por supuesto, en minube tenemos servidores tradicionales. Sólo usamos Cloud Computing para todo lo referente a multimedia.

Bueno, espero que os haya parecido interesante y sirva para que tengáis una visión más clara de qué es lo que ocurre cuando subís una imagen o video a minube.

Un saludo !