Tecnologías detrás de Instagram

  
4 de Febrero de 2015   0  

La mayoría de los que programamos en Python sabemos que Instagram fue desarrollado con el framework Django y que día con día va creciendo su número de usuarios y ya podemos encontrar a nuestros amigos compartiendo fotos y videos con esta aplicación. Pero, ¿Qué hay detrás de cada subida de fotos? ¿Cómo pueden ser soportados millones de usuarios al día sin que Instagram se vuelva lenta? En este post aclararemos estas preguntas.

Hemos hablado anteriormente de las tecnologías que se utilizan en Reddit y Pinterest, y podemos observar que el factor común de ambas es el uso grandes cantidades de caché y que sus centros de datos se encuentran almacenados en AMAZON utilizando VPS en EC2.

 

Django + NGINX + Gunicorn.

django_Nli7m3w

 

Python ha sido el lenguaje elegido y Django el framework a utilizar para llevarlo a la web. Este servicio web ha sido liberado utilizando  gunicorn como servidor WSGI y NGINX para manejar las peticiones utilizando un esquema de balanceo de cargas. Anteriormente utilizaban mog_wsgi y Apache sin embargo notaron que gunicorn era mucho más fácil de configurar y consumía menos recursos en CPU.

 

Centro de datos.

facebook-datacenter

 

Cuando Instagram fue adquirido por facebook en 2012, el equipo de desarrolladores comenzó a utilizar la infraestructura de Facebook para acelerar y optimizar algunos de sus servicios. Esta integración de servicios a la infraestructura de Facebook fue gracias a la liberación de EndPoint Ad-hoc que a la larga observaron que iba a limitarlos en diferentes aspectos.

Fue hasta en Abril del 2013 que se inició una migración masiva de todos los servicios de Instagram para pasar sus servidores de AMAZON EC2 a Facebook Data Center.

 

Motor de Base de Datos.

postgresql-logo1

 

PostGreSQL ha sido el almacén principal de la mayoría de los datos creados por los usuarios. El equipo de desarrollo comenta que hace un año venían trabajando en cómo almacenar 90 likes por segundo. Actualmente se almacenan más de 10,000 likes por segundo y la tecnología para almacenar esta información no ha cambiado. Una vez más podemos contemplar el gran poder de PostGreSQL frente a otros motores de base de datos. Y si pensamos que aún es muy lento, existen algunos tips que podemos tomar para agilizarlo para alcanzar la velocidad de sus otros competidores y tal vez superarlos sin perder su sólida estructura.

 

Almacenamiento de datos secundario.

 

redis-300dpi

Instagram utiliza ampliamente Redis como su segundo aliado en el almacenamiento de datos, es el motor que mueve a su sistema de feeds principal, así como el sistema de sesiones que es utilizado por Django.

Redis requiere gran cantidad de memoria para contener toda esa información activa, por lo que el equipo de ingenieros requirió de diversas instancias de VPS con gran cantidad de memoria RAM.

Redis es configurado como master-replica y se realizan constantemente snapshots a la información para mantenerla a salvo de cualquier problema pérdida de datos.

 

Motor de caché.

 

memcached

Y finalmente, como toda web moderna, Instagram ha optado por utilizar memcached para la gestión de sus datos en caché, el cual conectan con pylibmc & libmemcached.

 

Fuente: instagram-engineering.tumblr.com



Alex Dzul

FullStack Python / Django Developer. #jslove

Temas relacionados