- De 10/2010 a 11/2011, em cerca de 1 ano, saiu de 0 para 14 milhões de usuários. Havia apenas 3 engenheiros
- Seguiram 3 princípios
- Manter tudo muito simples (Keep things very simple.)
- Não reinventar a roda (Don’t re-invent the wheel.)
- Usar tecnologias comprovadas e sólidas sempre que possível (Use proven, solid technologies when possible.)
Visão simples da stack do ponto de vista do usuário
- A infraestrutura inicial rodava em Ubuntu Linux na AWS EC2
- O app do Instagram foi lançado primeiro apenas no iOS e, como isso foi antes do anúncio do Swift, é muito provável que usasse Objective-C + UIKit
- Para balanceamento de carga, usaram o Elastic Load Balancer da Amazon e 3 instâncias de NGINX
- Backend
- Os servidores de aplicação foram desenvolvidos em Python, com Django e Gunicorn como servidor WSGI
- Usavam o Fabric para executar o mesmo comando em várias instâncias ao mesmo tempo. Com isso, implantavam código em poucos segundos
- Operavam 25 máquinas Extra-Large com CPUs de alto desempenho. Todas eram stateless, então podiam adicionar mais facilmente quando necessário
- Armazenamento geral de dados
- IDs de fotos relacionadas, as fotos reais desses IDs e os dados de usuário sobre as fotos
- Os servidores de aplicação buscavam dados no PostgreSQL
- Entre Django e PostgreSQL, usavam pooling com pgbouncer
- O Instagram usava IDs ordenáveis por tempo: 41 bits de milissegundos + 13 bits de shard ID + 10 bits de sequência auto-incremental
- Armazenamento de fotos: S3 e Cloudfront
- Cache: Redis e Memcached
- Com hashing inteligente, armazenavam o mapeamento de 300 milhões de chaves em menos de 5 GB de espaço
- E, dois anos depois, o Facebook publicou um artigo sobre como escalou o Memcached para dezenas de bilhões de requisições por segundo
- Tanto o Postgres quanto o Redis rodavam em modo Master-Replica. Faziam backup contínuo com snapshots do Amazon EBS
- Push Notification e tarefas assíncronas: notificações com pyapns. Fila de tarefas com Gearman
- Para monitorar erros em tempo real, usaram o Sentry, um app Django de código aberto; para métricas de todo o sistema, usaram Munin; e, para monitoramento de serviços externos, usaram Pingdom e PagerDuty
3 comentários
No começo, o Instagram parecia só um app de filtros de imagem meio descolado (na época em que insistia teimosamente em suportar apenas iPhone). Nunca imaginei que faria um sucesso tão absurdo assim. (Minha imaginação ia só até aí;;; )
Lembro de ter visto, ao comparar produtos que chegaram a um exit, que o Instagram estava em um patamar bem alto de valor de exit por pessoa. Acho que há muito a aprender com isso.
Comentários no Hacker News