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 !

Escribe un comentario

Comentario

  1. Muy interesante. Nosotros hemos empezado a usarlo para un proyecto reciente. Una preguntilla ¿por qué lo usáis sólo para multimedia? ¿por temas de precio? porque a priori parece interesante para todo un site.
    Saludos!

  2. Hola Juan Antonio

    Usamos AWS sólo para el procesamiento multimedia por una cuestión de precios y seguridad. Aunque los servicios de Amazon implementan unas buenas políticas de seguridad y privacidad, por el momento no nos convence a la hora de almacenar los datos de nuestros usuarios y el contenido. Preferimos desplegar toda nuestra plataforma en servidores tradicionales con proveedores que nos ofrezcan un SLA mucho más seguro.

    Esto no quiere decir que AWS no sea seguro, todo lo contrario. Sino que por nuestra politica interna no optamos por usarlo como única plataforma.

    Por otro lado, para la cantidad de máquinas que necesitamos nosotros, EC2 sería una solución bastante más cara.

    Este tipo de servicios están muy bien como complemento a una infraestructura propia, tanto para usarlos junto a tu infraestructura (como nosotros), como para escalar en máquinas bajo demanda.

    Un saludo !!

  3. Buenas fillito, muy interesante lo que comentas, a mi el tema de cloud computing de amazon me hace mucha gracia, porque ellos no disponen de backup de los datos, sino que los dispersan y triplican en servidores, a los que se puede acceder de forma balanceada independientemente de cual sea el optimo.

    por cierto, una duda, para imagenes que implican recorte o similar (como las imagenes que salen en la seccion de “los ultimos 7 dias”) ese recorte, lo haceis en web o a traves de cloud computing?

    Un saludin!

  4. Qué pasa staff en potencia !!? 😉

    Pues todos los procesados de imágenes, tanto si son manuales para contenido editorial como los automáticos al subir fotos para rincones o blogs, se realizan en instancias de EC2.

    Para las seleccionadas individualmente como la foto del día, o “los últimos 7 días” se podría hacer en los mismos servidores web, la carga sería despreciable. Pero un poco por centralizar todo y evitar cualquier carga que no sea generad por usuarios en los servidores web, lo llevamos todo a Amazon 🙂

    Lo que dices de la replicación de datos y ausencia de backups es totalmente cierto 😛 , pero a efectos prácticos lo único que supondría una diferencia notable sería usar un CDN real (tipo Akamai)… pero a ver quién se puede permitir pagarlos …jejeje
    Por eso, para minimizar los problemas de rendimiento usamos Cloud Front

    Un abrazo !

  5. estoy estudiando soldadura y megustaria saber por que nos han preguntado que maneja ASTM, AWS