- Von 10/2010 bis 11/2011, also in etwa einem Jahr, wuchs die Nutzerzahl von 0 auf 14 Millionen. Dabei gab es nur 3 Ingenieure
- Es wurden drei Prinzipien befolgt
- Alles sehr einfach halten (Keep things very simple.)
- Das Rad nicht neu erfinden (Don’t re-invent the wheel.)
- Wenn möglich bewährte, robuste Technologien einsetzen (Use proven, solid technologies when possible.)
Ein einfacher Blick auf den Stack aus Nutzersicht
- Die frühe Infrastruktur lief auf Ubuntu Linux in AWS EC2
- Die Instagram-App erschien zunächst nur für iOS, und da sie vor der Vorstellung von Swift veröffentlicht wurde, ist Objective-C + UIKit sehr wahrscheinlich
- Für Load Balancing wurden Amazons Elastic Load Balancer und drei NGINX-Instanzen verwendet
- Backend
- Die Application Server wurden in Python entwickelt, mit Django und Gunicorn als WSGI-Server
- Mit Fabric wurden dieselben Befehle gleichzeitig auf mehreren Instanzen ausgeführt. Dadurch konnte Code innerhalb weniger Sekunden ausgerollt werden
- Es liefen 25 leistungsstarke CPU-Extra-Large-Maschinen. Alle waren stateless und konnten bei Bedarf leicht erweitert werden
- Allgemeiner Datenspeicher
- Verwandte Foto-IDs, das eigentliche Bild zu einer ID und Nutzerdaten zu den Fotos
- Die Application Server holten Daten aus PostgreSQL
- Zwischen Django und PostgreSQL wurde pgbouncer für das Pooling eingesetzt
- Instagram verwendete zeitlich sortierbare IDs: 41 Bit Millisekunden + 13 Bit Shard-ID + 10 Bit autoinkrementierende Sequenz
- Fotospeicher: S3 und Cloudfront
- Caching: Redis und Memcached
- Durch intelligentes Hashing konnten Mappings für 300 Millionen Schlüssel auf unter 5 GB Speicher abgelegt werden
- Und zwei Jahre später veröffentlichte Facebook eine Arbeit darüber, wie Memcached skaliert wurde, um auf Milliarden Requests pro Sekunde zu wachsen
- PostgreSQL und Redis liefen beide im Master-Replica-Modus. Kontinuierliche Backups erfolgten über Amazon-EBS-Snapshots
- Push Notifications und Async Tasks: Für Benachrichtigungen wurde pyapns verwendet, als Task Queue kam Gearman zum Einsatz
- Zur Echtzeitüberwachung von Fehlern wurde die Open-Source-Django-App Sentry verwendet, für systemweite Metriken Munin und für das Monitoring externer Dienste Pingdom und PagerDuty
3 Kommentare
Instagram wirkte in der Anfangszeit (als es stur nur das iPhone unterstützte) eher wie eine schicke Bildfilter-App. Dass es so ein Riesenerfolg werden würde, hätte ich mir nie vorstellen können. (So weit reichte meine Vorstellungskraft damals eben nicht ;;;)
Ich erinnere mich, dass Instagram beim Vergleich von Produkten, die einen Exit erlebt haben, beim Exit-Betrag pro Person in einem bemerkenswert hohen Bereich lag. Ich denke, dass es daraus viel zu lernen gibt.
Hacker-News-Kommentare