47 puan yazan GN⁺ 2023-09-18 | 3 yorum | WhatsApp'ta paylaş
  • 2010/10’dan 2011/11’e kadar yaklaşık 1 yılda 0’dan 14 milyon kullanıcıya ulaştı. Mühendis sayısı sadece 3’tü
  • 3 ilkeye bağlı kaldılar
    • Basit tutmak (Keep things very simple.)
    • Tekerleği yeniden icat etmemek (Don’t re-invent the wheel.)
    • Mümkün olduğunda kanıtlanmış, sağlam teknolojiler kullanmak (Use proven, solid technologies when possible.)

Kullanıcı perspektifinden stack’e basit bir bakış

  • İlk altyapı AWS EC2 üzerinde Ubuntu Linux’tu
  • Instagram uygulaması önce yalnızca iOS’ta çıktı; Swift duyurulmadan önce olduğu için büyük olasılıkla Objective-C + UIKit kullanıyordu
  • Yük dengeleme için Amazon Elastic Load Balancer ve 3 adet NGINX instance’ı kullanıldı
  • Backend
    • Uygulama sunucuları Python ile geliştirildi; Django ve WSGI sunucusu olarak Gunicorn kullanıldı
    • Fabric ile birden çok instance üzerinde aynı komut eşzamanlı çalıştırıldı. Bu sayede kod birkaç saniye içinde deploy edildi
    • 25 adet yüksek performanslı CPU Extra-Large makine çalıştırıldı. Hepsi stateless olduğu için gerektiğinde kolayca daha fazlası eklenebiliyordu
  • Genel veri deposu
    • İlişkili fotoğraf ID’leri, bu ID’lerin gerçek fotoğrafları ve fotoğraflara ait kullanıcı verileri
    • Uygulama sunucuları verileri PostgreSQL’den alıyordu
    • Django ile PostgreSQL arasında pgbouncer ile pooling yapıldı
    • Instagram, zamana göre sıralanabilen ID’ler kullanıyordu: 41 bit milisaniye + 13 bit shard ID + 10 bit otomatik artan sequence
  • Fotoğraf depolama: S3 ve Cloudfront
  • Caching: Redis ve Memcached
    • Akıllı hashing sayesinde 300 milyon anahtar eşlemesi 5 GB’tan az alanda saklandı
    • Ayrıca 2 yıl sonra Facebook, Memcached’i ölçekleyerek saniyede milyarlarca isteği nasıl büyüttüğüne dair bir makale yayımladı
  • Hem Postgres hem de Redis Master-Replica modunda çalıştırıldı. Amazon EBS snapshot’larıyla sürekli yedeklendi
  • Push notification ve async task: Bildirimler için pyapns, task queue için Gearman kullanıldı
  • Hataları gerçek zamanlı izlemek için açık kaynaklı Django uygulaması Sentry, sistem genelindeki metrikler için Munin, dış servis izleme için ise Pingdom ve PagerDuty kullanıldı

3 yorum

 
botplaysdice 2023-09-19

Instagram ilk zamanlarında (inatla yalnızca iPhone'u desteklediği dönemde) daha çok havalı bir görüntü filtresi uygulaması gibi geliyordu. Böyle büyük bir patlama yapacağını hiç tahmin etmemiştim. (Benim hayal gücüm ancak o kadardı ;;;)

 
princox 2023-09-18

Exit yaşamış ürünleri karşılaştırırken, Instagram’ın kişi başına düşen exit tutarının oldukça yüksek olduğunu gördüğümü hatırlıyorum. Öğrenilecek çok şey olduğunu düşünüyorum.

 
GN⁺ 2023-09-18
Hacker News görüşleri
  • Instagram'ın yalnızca üç mühendisle 14 milyon kullanıcıya nasıl ulaştığına dair bir yazı
  • Instagram'ın Objective-C ve UIKit ile yazıldığını varsayan dil üzerine tartışma
  • Bazı yorumlar Instagram'ın teknoloji yığınının sadeliğini övüyor ve birçok şirketin benzer bir yaklaşımdan fayda görebileceğini öne sürüyor
  • Bir yorumda vurgulanan ekip üyesi seçiminin önemi: "Doğru insanları seçerseniz yalnızca birkaç kişiye ihtiyacınız olur. Aksi halde herkese ihtiyacınız olur."
  • Instagram'ın milyonlarca kullanıcının akışını anında nasıl güncellediğine dair merak; bunun, dağıtık sistemlerde okumayı ölçeklendirmekten daha zorlayıcı bir iş olduğu düşünülüyor
  • Django, Postgres, Redis ve donanım hızındaki gelişmeler göz önüne alındığında, Instagram'ın modern teknolojiyle ne kadar ölçeklenebileceğine dair spekülasyonlar
  • Mühendislik ekibinin büyüklüğü üzerine tartışma başlatan yazı; temel bir CRUD uygulamasına sahip bazı organizasyonların neden binlerce mühendise ihtiyaç duyduğunu anlamakta zorlanan kişiler var
  • Bazı okurlar arasında Instagram'ın kendi versiyonunu yapmak istemelerine yol açan bir ilham duygusu
  • Instagram'ın ilk günlerinde yalnızca iOS uygulaması şeklinde tek bir frontend olduğu ve günümüz sosyal medya platformlarına göre daha az özelliğe sahip olduğu belirtiliyor
  • Meta'nın Threads uygulamasını Instagram altyapısı üzerinde geliştirmeye dair yakın tarihli bir içeriden deneyim paylaşımı; uygulamanın başarısı ve ilgili ekibin büyüklüğü vurgulanıyor