- Dari 2010/10 hingga 2011/11, dalam sekitar 1 tahun, bertumbuh dari 0 menjadi 14 juta pengguna. Engineer hanya 3 orang
- Mengikuti 3 prinsip
- Menjaga semuanya tetap sederhana (Keep things very simple.)
- Jangan menciptakan ulang roda (Don’t re-invent the wheel.)
- Jika memungkinkan, gunakan teknologi yang sudah terbukti dan kokoh (Use proven, solid technologies when possible.)
Melihat stack secara sederhana dari sudut pandang pengguna
- Infrastruktur awal berjalan di AWS EC2 dengan Ubuntu Linux
- Aplikasi Instagram pertama kali hanya tersedia di iOS, dan karena dirilis sebelum Swift diumumkan, kemungkinan besar menggunakan Objective-C + UIKit
- Untuk load balancing, digunakan Amazon Elastic Load Balancer dan 3 instance NGINX
- Backend
- Server aplikasi dikembangkan dengan Python, menggunakan Django dan server WSGI Gunicorn
- Menggunakan Fabric untuk menjalankan perintah yang sama secara bersamaan di banyak instance. Dengan ini, kode bisa di-deploy dalam hitungan detik
- Menjalankan 25 mesin Extra-Large dengan CPU berperforma tinggi. Semuanya stateless sehingga mudah ditambah jika diperlukan
- Penyimpanan data umum
- Photo ID terkait, foto aktual untuk ID tersebut, dan data pengguna untuk foto itu
- Server aplikasi mengambil data dari PostgreSQL
- Pooling antara Django dan PostgreSQL menggunakan pgbouncer
- Instagram menggunakan ID yang bisa diurutkan berdasarkan waktu: 41-bit milidetik + 13-bit shard ID + 10-bit urutan auto-increment
- Penyimpanan foto: S3 dan Cloudfront
- Caching: Redis dan Memcached
- Melalui hashing yang cerdas, pemetaan 300 juta key disimpan dalam ruang kurang dari 5GB
- Lalu 2 tahun kemudian, Facebook menerbitkan makalah tentang cara menskalakan Memcached untuk menangani miliaran request per detik
- Postgres dan Redis sama-sama berjalan dalam mode Master-Replica. Backup terus dilakukan dengan Amazon EBS snapshot
- Push Notification dan Async Task: notifikasi menggunakan pyapns. Task queue menggunakan Gearman
- Untuk memantau error secara real-time, digunakan Sentry, aplikasi Django open source; untuk metrik seluruh sistem digunakan Munin; dan untuk pemantauan layanan eksternal digunakan Pingdom dan PagerDuty
3 komentar
Pada masa awal, Instagram terasa seperti sekadar aplikasi filter gambar yang keren (pada era ketika mereka keras kepala hanya mendukung iPhone). Saya sama sekali tidak membayangkan ini akan menjadi sukses sebesar ini. (Ya, segitulah imajinasi saya;;; )
Di antara perbandingan produk yang pernah mencapai exit, saya ingat melihat bahwa Instagram berada dalam kondisi dengan nilai exit per orang yang sangat tinggi. Saya rasa ada banyak hal yang bisa dipelajari.
Komentar Hacker News