- De 2010/10 a 2011/11, en alrededor de 1 año, pasaron de 0 a 14 millones de usuarios. Solo tenían 3 ingenieros
- Siguieron 3 principios
- Mantener todo muy simple (Keep things very simple.)
- No reinventar la rueda (Don’t re-invent the wheel.)
- Usar tecnologías probadas y sólidas cuando sea posible (Use proven, solid technologies when possible.)
Un vistazo simple al stack desde la perspectiva del usuario
- La infraestructura inicial corría en Ubuntu Linux sobre AWS EC2
- La app de Instagram salió primero solo en iOS y, como fue antes del anuncio de Swift, es muy probable que haya sido Objective-C + UIKit
- Para balanceo de carga usaban Elastic Load Balancer de Amazon y 3 instancias de NGINX
- Backend
- El servidor de aplicaciones estaba desarrollado en Python, usando Django y Gunicorn como servidor WSGI
- Usaban Fabric para ejecutar el mismo comando en múltiples instancias al mismo tiempo. Con esto podían desplegar código en cuestión de segundos
- Operaban 25 máquinas Extra-Large de CPU de alto rendimiento. Todas eran stateless, así que podían agregar más fácilmente cuando fuera necesario
- Almacenamiento de datos general
- IDs de fotos relacionadas, la foto real correspondiente a ese ID y los datos de usuario sobre la foto
- El servidor de aplicaciones traía los datos desde PostgreSQL
- Entre Django y PostgreSQL usaban pgbouncer para pooling
- Instagram usaba IDs ordenables por tiempo: 41 bits de milisegundos + 13 bits de shard ID + 10 bits de secuencia autoincremental
- Almacenamiento de fotos: S3 y Cloudfront
- Caché: Redis y Memcached
- Mediante hashing inteligente almacenaban el mapeo de 300 millones de claves en menos de 5GB de espacio
- Y dos años después, Facebook publicó un paper sobre cómo escalar Memcached para manejar decenas de miles de millones de solicitudes por segundo
- Tanto Postgres como Redis corrían en modo Master-Replica. Hacían respaldos continuos con snapshots de Amazon EBS
- Push notifications y tareas async: para notificaciones usaban pyapns. Para la cola de tareas, Gearman
- Para monitorear errores en tiempo real usaban Sentry, una app open source de Django; para métricas de todo el sistema usaban Munin; y para monitoreo de servicios externos usaban Pingdom y PagerDuty
3 comentarios
En sus inicios, Instagram se sentía más bien como una app de filtros de imagen vistosa (cuando tercamente solo daba soporte a iPhone). Jamás imaginé que se volvería un éxito tan enorme. (Mi imaginación llegaba solo hasta ahí ;;;)
Recuerdo haber visto, al comparar productos que incluso llegaron al exit, que Instagram tenía un monto de exit por persona bastante alto. Creo que hay mucho que aprender de eso.
Opiniones de Hacker News