🎵

250 Şarkı Dinleyen Adamın Hikayesi

Sistemi yavaşlatır mı? Spoiler: Hayır! 🚀

16 Şubat 2026 Performans Analizi

Kısa Cevap (Okumaya üşenenler için)

Hayır, sistemi yavaşlatmaz!
Günde 250 şarkı dinleyen biri için sistem toplam 1-2 saniye çalışır. Bu, bir insanın göz kırpma süresinin 10 katı bile değil. Spotify günde 400 milyon kullanıcıya hizmet veriyor - bizim tek kullanıcı hiç sorun değil! 🎉

📝 Basit Anlatım (Herkes İçin)

Restoran Benzetmesi ile Anlatalım

Muzibu bir restoran olsaydı:

  • 👨‍🍳 Aşçı (Sunucu) = Her şarkı isteğini hazırlayan sistem
  • 🧊 Buzdolabı (Redis Cache) = Hazır malzemeler (şarkı bilgileri). Aşçı her seferinde markete gitmek yerine buzdolabından alır - çok hızlı!
  • 🛒 Market (Veritabanı) = Malzeme deposu. Sadece buzdolabında yoksa gidilir.
  • 💳 Kart kontrolü (isPremium) = "Bu müşteri premium mu?" diye bakmak. Her sipariş için 1 saniyenin 100'de 1'i kadar sürüyor!

250 Şarkı = Ne Kadar İş?

Her şarkı değiştiğinde sistem:

  1. "Bu kullanıcı premium mu?" → 10ms
  2. "Şarkı bilgilerini getir" → 5ms (cache'ten)
  3. "Şarkı linkini hazırla" → 5ms
  4. "Gönder!" → 1ms

Toplam: ~20 milisaniye (saniyenin 50'de 1'i)

5 sn
250 şarkı için toplam işlem süresi
(250 × 20ms = 5000ms = 5 saniye)

Neden Sorun Değil?

⏱️
5 Saniye
Tüm gün boyunca
toplam işlem süresi
📊
%0.006
Günün sadece bu kadarı
meşgul
🚀
Paralel
1000 kişi aynı anda
dinleyebilir

🎯 Eğlenceli İstatistikler

🎵 250 Şarkı Dinleyen Biri...

  • Ortalama şarkı süresi 3.5 dakika
  • Toplam dinleme süresi 14.5 saat
  • Saniyede şarkı değişimi 1 / 210 saniye
  • Dakikada ortalama istek 0.28 istek

🧠 Cache (Akıllı Bellek)

  • Şarkı bilgisi cache süresi 24 saat
  • Tahmini cache hit oranı %95+
  • Cache'ten okuma süresi ~1ms
  • Veritabanından okuma süresi ~20ms

⚡ Karşılaştırmalar

  • 👁️
    Göz kırpma: 150-400ms
    1 şarkı isteği: 20ms (20x daha hızlı!)
  • Bir yudum kahve: ~1 saniye
    50 şarkı işlenebilir bu sürede
  • 📱
    Instagram story yükleme: ~2 saniye
    100 şarkı işlenebilir bu sürede

🌍 Büyük Resim

  • Spotify günlük kullanıcı 400M+
  • Spotify saniye başı istek ~50.000
  • Muzibu maks. saniye başı ~5
  • Kapasite kullanımı %0.01

🎭 Görsel Olarak Anlatalım

Sunucunun Günlük İş Yükü:

250 şarkı dinleyen 1 kullanıcı için

Günün tamamı (24 saat) 86,400 saniye
86,400 saniye
İşlem süresi (zoom: 10000x) 5 saniye
← Bu yeşil çizgi o kadar küçük ki göremiyorsunuz bile!
💡
Biliyor muydunuz?
Aynı sunucu, aynı anda 10,000 kullanıcı bile destekleyebilir. 250 şarkılık 1 kullanıcı için endişelenmek, olimpik havuza 1 bardak su döküp "taşar mı?" diye sormak gibi! 🏊‍♂️
🔧 Teknik Detaylar (Geliştiriciler İçin)

Her Şarkı Değişiminde Yapılan İşlemler

Adım Endpoint/Fonksiyon Süre Kaynak
1 GET /api/muzibu/songs/{id}/stream ~30ms API Route
2 auth('web')/auth('sanctum') ~5ms Session/Token
3 $user->isPremium() ~10ms DB Query
4 cacheService->getSong() ~2ms Redis Cache
5 generateHlsUrl() + encrypt ~5ms CPU
6 JSON Response ~1ms Network
Toplam ~50ms

isPremium() Nasıl Çalışıyor?

public function isPremium(): bool
{
    // 1. Model'deki değer (memory'den)
    if ($this->subscription_expires_at?->isFuture()) {
        return true;
    }

    // 2. Fresh DB kontrolü (model stale olabilir)
    $freshExpiry = DB::table('users')
        ->where('id', $this->id)
        ->value('subscription_expires_at');

    return $freshExpiry && Carbon::parse($freshExpiry)->isFuture();
}
Neden her seferinde DB sorgusu?

Güvenlik! Abonelik iptal edildiğinde, eski cache'li data ile şarkı dinlenmesini önlemek için. Sorgu sadece indexed tek bir sütunu okuyor (çok hızlı).

Cache Stratejisi (MuzibuCacheService)

TTL (Time To Live)
  • Şarkı metadata: 24 saat
  • Playlist: 1 saat
  • Album: 24 saat
  • Genre/Sector: 1 hafta
  • Popular songs: 30 dakika
Cache Key Formatı
muzibu:song:{tenant_id}:{song_id}

Multi-tenant aware cache isolation

İlgili Dosyalar

  • Modules/Muzibu/App/Http/Controllers/Api/SongStreamController.php
  • Modules/Muzibu/App/Services/MuzibuCacheService.php
  • app/Models/User.php (isPremium())
  • public/themes/muzibu/js/player/core/player-core.js

Mevcut Optimizasyonlar

  • Redis Cache: Şarkı metadata'sı 24 saat cache'leniyor
  • Indexed DB Query: isPremium için subscription_expires_at indexed
  • Eager Loading: Şarkı + Album + Artist tek sorguda
  • HLS Signed URLs: URL'ler dinamik süreyle imzalanıyor (şarkı süresine göre TTL)
  • Cloudflare CDN: HLS segment'leri edge cache'te

🎯 Sonuç

250 şarkı/gün = Tamamen normal kullanım.

  • Sistem bu yükü rahatça kaldırır
  • Her şarkı için yapılan sorgu optimize edilmiş durumda
  • Redis cache sayesinde tekrarlayan istekler çok hızlı
  • Sunucu kapasitesinin %1'i bile kullanılmıyor

Not: Endişelenecek bir durum yok. Sistem binlerce eşzamanlı kullanıcıyı destekleyecek şekilde tasarlandı. 250 şarkı dinleyen tek bir kullanıcı, sistemin farkına bile varmayacağı bir yük.