- D’octobre 2010 à novembre 2011, soit en environ un an, Instagram est passé de 0 à 14 millions d’utilisateurs. L’équipe d’ingénierie ne comptait que 3 personnes
- Ils ont suivi 3 principes
- Garder les choses très simples (Keep things very simple.)
- Ne pas réinventer la roue (Don’t re-invent the wheel.)
- Utiliser des technologies éprouvées et solides quand c’est possible (Use proven, solid technologies when possible.)
Aperçu simple de la stack du point de vue utilisateur
- L’infrastructure initiale reposait sur Ubuntu Linux sur AWS EC2
- L’application Instagram est d’abord sortie uniquement sur iOS, et comme c’était avant l’annonce de Swift, il est très probable qu’elle utilisait Objective-C + UIKit
- Pour l’équilibrage de charge, ils utilisaient Amazon Elastic Load Balancer et 3 instances NGINX
- Backend
- Les serveurs applicatifs étaient développés en Python, avec Django et le serveur WSGI Gunicorn
- Avec Fabric, ils exécutaient simultanément les mêmes commandes sur plusieurs instances, ce qui permettait de déployer le code en quelques secondes
- 25 machines Extra-Large à CPU haute performance étaient en service. Elles étaient toutes stateless, donc faciles à ajouter si nécessaire
- Stockage des données générales
- ID photo associés, photo réelle correspondant à cet ID, et données utilisateur liées à la photo
- Les serveurs applicatifs récupéraient les données depuis PostgreSQL
- Pooling entre Django et PostgreSQL via pgbouncer
- Instagram utilisait des ID triables par le temps : 41 bits pour les millisecondes + 13 bits pour l’ID de shard + 10 bits pour une séquence auto-incrémentée
- Stockage des photos : S3 et CloudFront
- Cache : Redis et Memcached
- Grâce à un hachage intelligent, ils stockaient le mapping de 300 millions de clés dans moins de 5 Go d’espace
- Puis, deux ans plus tard, Facebook a publié un article expliquant comment il avait fait monter Memcached à l’échelle pour traiter des dizaines de milliards de requêtes par seconde
- PostgreSQL et Redis fonctionnaient tous deux en mode master-replica. Les sauvegardes étaient réalisées en continu avec des snapshots Amazon EBS
- Push notifications et tâches asynchrones : pyapns pour les notifications, Gearman comme file de tâches
- Pour surveiller les erreurs en temps réel, ils utilisaient Sentry, une application Django open source ; pour les métriques de l’ensemble du système, Munin ; et pour la supervision des services externes, Pingdom et PagerDuty
3 commentaires
Au tout début, Instagram donnait l’impression de n’être qu’une appli de filtres d’image un peu tape-à-l’œil (à l’époque où ils s’obstinaient à ne supporter que l’iPhone). Je n’aurais jamais imaginé que ça deviendrait un tel carton. (Mon imagination n’allait pas jusque-là ;;;)
Je me souviens qu’en comparant des produits ayant connu un exit, Instagram se distinguait par un montant d’exit par personne particulièrement élevé. Je pense qu’il y a beaucoup à en apprendre.
Avis Hacker News