Muzibu Performans Optimizasyonu

Birikimli Kapsamlı Rapor - v6 (v1-v5 + Codex Analizi)

Kritik Bulgular Kod Doğrulandı 17 Şubat 2026 Birikimli v6

Kritik Özet - Neden Bazı Kullanıcılarda Donma?

Basit Anlatım (5 Yaşındaki Çocuğa)

Düşün ki: Bir musluktan su içmek istiyorsun.

Musluk (Sunucu)

Su kaynağı

Boru (İnternet)

Su taşıyan yol

Bardak (Player)

Suyu tutan yer

Şu an olan sorunlar:

  • 🔴 Musluk tıkalı: Sunucu her damla için çok düşünüyor (cache yok)
  • 🔴 Kapıda sıra var: Aynı IP'den çok kişi gelince "bekle" diyor (throttle)
  • 🔴 Bardak küçük: Player yeterince su biriktiremiyor (buffer sorunu)
  • 🟡 Boru uzun: Türkiye'den sunucuya mesafe (ama Cloudflare var)

Temel Bulgu (v6):

Donma herkeste değil, bazı kullanıcılarda oluyor. Bu, genel bir kod hatası değil, belirli koşullara bağlı bir sorun demek: Kurumsal ağlar, paylaşımlı WiFi, uzun oturumlar, zayıf cihazlar.

Teknik Özet + Kod Doğrulama

1.61

Load Average

↓ 17.36'dan düştü

6

PHP Process

↓ 54'ten düştü

197

Redis Client

≈ Benzer

83ms

API Latency

→ Değişmedi

DOĞRULANDI (v6)

  • throttle:120,1 IP bazlı aktif
  • • 5 ayrı ERROR listener mevcut
  • • TTL max 60 dakika
  • • Segment'ler token'sız (CF için)

HALA SORUNLU

  • • Route/Config cache YOK
  • • CF Segment cache: MISS
  • • OPcache durumu belirsiz
  • • 6 middleware her istekte

6 Kritik Sorun (Öncelik Sırasına Göre):

  1. 1. IP Bazlı Throttle (120/dk) → NAT arkasında 429 hatası
  2. 2. Route/Config cache YOK → Her istek için +30-50ms
  3. 3. Çoklu ERROR listener → Race condition riski
  4. 4. CF Segment cache MISS → Cloudflare bypass
  5. 5. İmza süresi 60 dk → Uzun oturumlarda 401
  6. 6. Agresif buffer (200MB) → Zayıf cihazlarda sorun

Güncel Sistem Durumu (17 Şubat 2026)

Basit Anlatım

İyi Haber: Sunucu öncekine göre çok daha rahat!

İyileşen

  • ✅ Sunucu yükü %90 azaldı (17 → 1.6)
  • ✅ PHP işçileri 9 kat azaldı (54 → 6)
  • ✅ Sistem çok daha hızlı tepki veriyor

Hala Sorunlu

  • ⚠️ Route/Config cache hala YOK
  • ⚠️ Segment'ler Cloudflare'den gelmiyor
  • ⚠️ API hızı değişmedi (83ms)

v4 (13 Şubat) vs v6 (17 Şubat) Karşılaştırması

Metrik v4 (13 Şubat) v6 (17 Şubat) Değişim
Load Average 17.36 1.61 ↓ %91
PHP Process 54 6 ↓ %89
Redis Clients 241 197 ≈ Benzer
API Latency 80-120ms 83ms → Sabit
Route/Config Cache YOK YOK ! Aynı
CF Segment Cache Belirsiz MISS ! Çalışmıyor
Throttle Limiti - 120/dk IP bazlı YENİ BULGU

1. IP Bazlı Throttle Sorunu KRİTİK - DOĞRULANDI

Basit Anlatım:

Bir kapıdan dakikada 120 kişi geçebilir. Bir ofiste 10 kişi aynı anda müzik dinlerse, hepsi aynı kapıyı (IP) kullanıyor. Her biri dakikada 12+ parça isterse → Kapasite doldu, 429 hatası!

Etkilenen: Kurumsal ağlar, internet kafeler, üniversiteler, paylaşımlı WiFi

Teknik Doğrulama:

// MuzibuServiceProvider.php - Satır 313
Route::middleware([
    InitializeTenancyByDomain::class,
    'throttle:120,1', // 120 req/min PER IP
])
->match(['get', 'options'], '/hls/muzibu/songs/{id}/{filename}', ...)

Hesaplama:

  • • Segment süresi: ~10 saniye
  • • 1 şarkı = 20-30 segment
  • • 1 kullanıcı/dk ≈ 6-10 istek
  • • 15 kullanıcı = 90-150 istek/dk

Sonuç:

  • • 120 limit aşılır → 429
  • • Buffer boşalır
  • DONMA!

Çözüm:

'throttle:300,1' // veya 'throttle.user:stream' (user bazlı)

Player Donma Sorunu - Detaylı Analiz

Basit Anlatım

Player neden donuyor?

Şarkı çalarken player sürekli internetten yeni parçalar indiriyor. Eğer yeni parça gelmeden eski parça biterse → DONMA!

Normal Durum

%80 dolu

Buffer hep dolu kalıyor.

Donma Durumu

%5 dolu

Buffer boşaldı → STOP!

Neden yeni parçalar yavaş geliyor?

  • • Sunucu her parça için Laravel'den geçiyor (yavaş)
  • • IP throttle 120/dk limiti (yeni bulgu!)
  • • Cloudflare cache çalışmıyor
  • • İmza süresi dolmuş olabilir (60 dk)

Teknik Detay - HLS Player Yapısı

Muzibu, HLS (HTTP Live Streaming) kullanıyor. Şarkılar 10 saniyelik parçalara (segment) bölünmüş:

# playlist.m3u8 örneği
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10  ← Her segment 10 saniye
#EXT-X-KEY:METHOD=AES-128,URI="..."  ← Şifreli

#EXTINF:10.005333,
segment-000.ts  ← ~350KB
#EXTINF:9.994667,
segment-001.ts
...

HLS.js Buffer Ayarları:

maxBufferLength: 150 // saniye
maxMaxBufferLength: 250
maxBufferSize: 200MB
maxBufferHole: 2.5 // saniye

✅ Ayarlar optimal

Segment Akışı:

0:00-0:10
Çalıyor
0:10-0:20
Buffer'da
0:20-0:30
İndiriliyor

Donma Senaryosu:

  1. 1. segment-002.ts indiriliyor (350KB)
  2. 2. Sunucu yavaş veya 429 → 3+ saniye sürüyor
  3. 3. segment-001.ts biterken 002 henüz gelmedi
  4. 4. Buffer boş → DONMA!

Sunucu Tarafı Sorunlar

1

Route ve Config Cache YOK!

KRİTİK

Basit:

Her kitap istediğinde görevli tüm rafları baştan sayıyor. Cache olsa? Kitapların listesi hazır, direkt alıyor.

# bootstrap/cache/ içeriği (17 Şubat)
modules.php   
packages.php  
services.php  
config.php    ✗ YOK!
routes-v7.php ✗ YOK!

Etki: Her istek için +30-50ms

2

OPcache Durumu Şüpheli

KONTROL

Basit:

Bir aşçı her sipariş için tarifi baştan okuyor. OPcache = Tarifleri ezberlemek.

# php.ini
;zend_extension=opcache  ← Yorum!
;opcache.enable=1         ← Yorum!

Plesk'ten aktif olabilir ama doğrulanmalı.

3

Her İstek İçin 6 Middleware

OVERHEAD

Basit:

Bir odaya girmek için 6 kapıdan geçiyorsun. Her kapıda güvenlik soruyor.

API isteği →
  1. EnsureFrontendRequestsAreStateful
  2. InitializeTenancy ← DB switch!
  3. SubstituteBindings
  4. DatabasePoolMiddleware
  5. ResourceTrackingMiddleware
  6. Throttle
→ Sonuç: {"pong": true}

HLS Streaming Sistemi

Basit Anlatım - Nasıl Çalışıyor?

1. Playlist İste

Parça listesini al

Token gerekli ✓

2. Segment İndir

10sn'lik parçaları al

Token YOK (cache)

3. Key Al

Şifre çözme anahtarı

Token gerekli ✓

Güvenlik: AES-128 Şifreleme

Segment'ler şifreli. Key olmadan çalışmaz. Bu sayede segment public olsa bile güvenli.

Segment Yapısı:

  • • Süre: 10 saniye
  • • Boyut: ~350KB
  • • Format: MPEG-TS (.ts)
  • • Şifreleme: AES-128
  • • Toplam: ~34,000 şarkı

Serve Yapısı:

  • • Playlist: Laravel + Token
  • • Segment: Laravel (şu an)
  • • Key: Laravel + Token
  • • Cache Header: 1 yıl (immutable)

Potansiyel Sorun:

Segment'ler Laravel üzerinden serve ediliyor. Her segment için PHP bootstrap + middleware çalışıyor. İdeal: Nginx direkt serve + Cloudflare cache.

Çoklu Error Listener Karmaşıklığı DOĞRULANDI

Basit:

Bir hata olduğunda 5 farklı "bekçi" aynı anda tepki veriyor. Bazen birbirlerinin işine karışabilirler.

// player-core.js - Hls.Events.ERROR listener'ları

Satır 2201: this.hlsNext.on(ERROR, ...)    // Sonraki şarkı
Satır 3790: preloadedHls.on(ERROR, ...)   // Preload
Satır 4603: this.hls.on(ERROR, ...)       // ANA - 1. listener
Satır 4786: this.hls.on(ERROR, ...)       // ANA - 2. listener!
Satır 6879: hlsPreload.on(ERROR, ...)     // Preload

⚠️ Aynı HLS instance'ında 2 farklı ERROR listener!

Risk:

  • • İki listener farklı tepki verebilir (race condition)
  • • Biri refresh yaparken diğeri fallback yapabilir
  • • State sync bozulabilir

Cloudflare Pro Optimizasyonu

Şu an (MISS)

🇹🇷 Kullanıcı şarkı açıyor...

→ CF: "Bende yok, sunucudan alayım"

+100ms gecikme!

Olması gereken (HIT)

🇹🇷 Kullanıcı şarkı açıyor...

→ CF: "Bende var, hemen veriyorum!"

10ms'de teslim!

✓ Cache'lenmeli

  • • segment-*.ts
  • • JS/CSS
  • • Görseller

✗ Cache'lenmemeli

  • • playlist.m3u8
  • • enc.bin (key)
  • • API cevapları

⚠️ Kontrol

  • • WAF/Rate Limit
  • • www vs non-www
  • • POP dağılımı
# Önerilen Page Rules
www.muzibu.com/hls/song/*/segment-*.ts
  Cache Level: Cache Everything
  Edge TTL: 1 month
  Browser TTL: 1 year

Birleşik Aksiyon Planı (v1-v6)

# Çözüm Durum Etki Risk
1 Throttle limitini artır (300/dk veya user-based) BEKLEMEDE Donma azalır Düşük
2 Route & Config Cache aktifle BEKLEMEDE -30-50ms Düşük
3 Cloudflare Segment Cache (Page Rule) MISS Donma azalır Düşük
4 ERROR listener'ları konsolide et ÖNERİ Stabilite Orta
5 Sunucu yükü ✓ DÜZELDİ Load %91 ↓ -
6 HLS Buffer ayarları ✓ OPTİMAL - -

HEMEN Yapılması Gerekenler

1. Throttle Artır

'throttle:300,1'
// veya 'throttle.user:stream'

2. Laravel Cache

php artisan config:cache
php artisan route:cache

Rapor Geçmişi (Birikimli)

v6 17 Şubat 2026 Codex analizi + kod doğrulaması + TÜM önceki içerikler
v5 17 Şubat 2026 Güncel ölçümler + karşılaştırma
v4 13 Şubat 2026 Player donma + sunucu analizi
v3 13 Şubat 2026 HLS sistemi detaylı analiz
v2 13 Şubat 2026 Sunucu yükü analizi
v1 13 Şubat 2026 İlk analiz