La tecnología que hay detrás de instagram

Lo bueno de que las empresas tecnológicas tengan un blog técnico es que nos cuentan lo que hay detrás de sus productos. Es decir, cómo desarrollan, la infraestructura y cómo tienen todo montado. Un valioso conocimiento compartido que no todo el mundo está dispuesto a compartir.

En este caso, Instagram, que por si alguien no la conoce es la startup que ha revolucionado la forma de compartir fotos por medio de una aplicación para el iPhone, cuenta en su blog la tecnología que hay detrás. Os puedo asegurar que es muy interesante y que más de alguna que otra empresa debería aprender como optimizar recursos.

En Instagram dicen que tienen un pequeño equipo de ingenieros pero que han sabido aprovechar al máximo cada recurso para llegar a escalar su infraestructura a más de 14 millones de usuarios en apenas un año.

Sus reglas básicas son:

  • Mantenerse simples

  • No reinventar la rueda

  • Usar tecnologías ya probadas siempre que eso sea posible

Alojamiento

Instagram usa Ubuntu Linux 11.04 en sus instancias en Amazon EC2, las cuales manejan según las necesidades de demanda. De momento, no se plantean utilizar servidores en sus propias instalaciones aunque no lo descartan si el crecimiento se mantiene constante.

Servidores de aplicaciones

Usan Django en Amazon High-CPU Extra Large pasando de tan sólo unas maquinas a alcanzar ya más de 25. Aunque ese no es ningún problema ya que son capaces de escalar horizontalmente al poder trabajar independientemente unas de otras.

Usan como servidor WSGI a Gunicorn, en lugar de mod_wsgi y Apache, al ser Gunicorn más fácil de configurar, y menos intensivo con la CPU. Y para la ejecución de comandos en varias instancias en paralelo se usan Fabric que es capaz de desplegar en cuestión de segundos cual ejecución.

Almacenamiento de datos

Uno de los pilares de Instagram son los datos de las fotografias y los usuarios. La base de datos que se usa es PostgreSQL. Afirman que tiene 12 cluster de instancias de memoria Quadruple Extra-Large y sus 12 replicas en distintos lugares.

Nos aconsejan el uso de vmtouch para la gestión de datos de memoria, sobre todo cuando se produce un error en la conmutación de una máquina a otra. Todas las maquinas que se usan están configurada en maestro-replica. Para la gestión de la replicación se usa repmgr.

Para realizar las conexiones a la base de datos con PostgreSQL, principalmente desde Django se usa Pgbouncer.

Como no podía ser de otra forma, para todo los que es contenido principal del feed de actividad y las notificaciones de Instagram se usa Redis. Aunque como todo tiene que caber en memoria se usa de nuevo otras instancias Quadruple Extra-Large en configuración maestro-replica.

Para el uso de la API de geo-búsqueda se usa Apache Solr que permite el consumo de datos por medio de JSON, lo que facilita el acceso a los datos cuando las aplicaciones lo necesitan. Tampoco se olvidan del uso de memcached para la caché utilizando pylibmc y ibmemcached.

Tareas de notificación y push

Para estos casos en los que se tiene que notificar a un usuario en tempo real de una nueva foto publicada se usa Gearman, un sistema de cola de tareas escrita originalmente en Danga. Colas asíncronas para distribuir el trabajo pesado en segundo plano y que las tareas más ligeras se realicen rápido.

Para realizar las notificaciones push usan pyapns y aseguran que les ha ido bastante bien manejando más de mil millones de notificaciones. Habrá que echarle un vistazo.

Monitorización

Con más de cien instancias distribuidas en los distintos procesos que hemos descrito, en Instragram usan Munin para revisar todos los parámetros gráficos de los sistemas. Además de haber escrito varios plugin basado en Python. También se usa Pingdom para la supervisión externa del servicio y PagerDuty para las incidencias y las notificaciones.

Y para el informe de errores usan Sentry, escrita usando Django por la gente de Disquis.

Conclusiones

Muy interesante la configuración de Instagram y comprobar el uso intensivo que hacen de Python y las instancias de Amazon. Un conjunto de herramientas que habrá que echar un vistazo más en detalle pero que ha logrado que esta Startup pueda escalar un tremendo tráfico en poco más de un año. Como ellos dicen: reutilizando al máximo y, como hemos comprobado, sin reinventar la rueda ni embarcarse en complejas infraestructuras.

Más información | Instagram Developer
Vía | Instagram engineering

Portada de Genbeta