Hızlı Özet - Neden Player Donuyor?
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)
- 🔴 Bardak küçük: Player yeterince su biriktiremiyor (buffer sorunu)
- 🟡 Boru uzun: Türkiye'den sunucuya mesafe (ama Cloudflare var)
Teknik Özet
17.36
Load Average
(72 çekirdek)
54
PHP Process
Çoğu %100 CPU
241
Redis Client
Aktif bağlantı
80-120ms
API Latency
Sunucu tarafı
5 Kritik Sorun Tespit Edildi:
- 1. Route/Config cache YOK → Her istek için +30-50ms
- 2. OPcache durumu şüpheli → PHP her seferinde parse ediliyor olabilir
- 3. HLS segment'leri Laravel üzerinden → Cloudflare bypass
- 4. 54 PHP process %100 CPU → Kaynak tükeniyor
- 5. Buffer ayarları agresif ama network yavaş → Donma
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
Yeni parçalar gelirken eski parçalar çalıyor. Buffer (tampon) hep dolu kalıyor.
Donma Durumu
Yeni parçalar yavaş geliyor. Buffer boşalıyor → STOP!
Neden yeni parçalar yavaş geliyor?
- • Sunucu her parça için Laravel'den geçiyor (yavaş)
- • Cloudflare cache çalışmıyor olabilir
- • Kullanıcının interneti anlık yavaşlıyor
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 ← ~350KB #EXTINF:10.005333, segment-002.ts ← ~350KB ...
Mevcut HLS.js Ayarları:
maxBufferLength: 150 // saniye maxMaxBufferLength: 250 maxBufferSize: 200MB maxBufferHole: 2.5 // saniye
Bu ayarlar agresif ve iyi. Sorun başka yerde.
Segment Akışı:
Donma Senaryosu:
- 1. segment-002.ts indiriliyor (350KB)
- 2. Sunucu yavaş → 3 saniye sürüyor (normalde 0.5sn)
- 3. segment-001.ts biterken segment-002.ts henüz gelmedi
- 4. Buffer boş → DONMA!
Sunucu Tarafı Sorunlar
Route ve Config Cache YOK!
KRİTİKBasit Anlatım:
Bir kütüphane düşün. Her kitap istediğinde görevli: Tüm rafları baştan sayıyor, sonra kitabı buluyor. Cache olsa? Kitapların listesi hazır, direkt alıyor.
Teknik:
# bootstrap/cache/ içeriği modules.php ✓ packages.php ✓ services.php ✓ config.php ✗ YOK! routes.php ✗ YOK!
Etki: Her istek için +30-50ms ek süre
54 PHP Process %100 CPU
YÜKSEKBasit Anlatım:
54 işçi var ama hepsi son hızda koşuyor. Yeni bir iş gelince "bekle, nefes alayım" diyor. Bu da gecikme demek.
Teknik:
Load average: 17.36, 12.32, 10.71 CPU cores: 72 lsphp processes: 54 (çoğu %100)
72 çekirdek için 17 load normal ama PHP'ler neden bu kadar yoğun? → Cache yok, her istek sıfırdan işleniyor.
OPcache Durumu Şüpheli
KONTROLBasit Anlatım:
Bir aşçı düşün. Her sipariş için tarifi baştan okuyor. OPcache = Tarifleri ezberlemek. Ezberlerse çok hızlı yapar.
Teknik:
# php.ini ;zend_extension=opcache ← Yorum! ;opcache.enable=1 ← Yorum!
Config'de yorum satırı. Plesk'ten aktif olabilir ama doğrulanmalı.
Her İstek İçin 6 Middleware
OVERHEADBasit Anlatım:
Bir odaya girmek için 6 kapıdan geçiyorsun. Her kapıda güvenlik "Kim bu? Nereden geliyor? Ne istiyor?" diye soruyor. Sadece "merhaba" demek için bile 6 soru!
Teknik:
API isteği → 1. EnsureFrontendRequestsAreStateful 2. InitializeTenancy ← DB switch! 3. SubstituteBindings 4. DatabasePoolMiddleware 5. ResourceTrackingMiddleware 6. Throttle → Sonuç: {"pong": true} = 6 middleware sadece basit bir cevap için!
HLS Streaming Sistemi
Basit Anlatım
HLS Nedir?
Şarkıyı küçük parçalara (segment) böldük. Her parça 10 saniye ve ~350KB. Player parçaları sırayla indirip çalıyor.
0-10sn
10-20sn
20-30sn
30-40sn
40-50sn
Güvenlik: AES-128 Şifreleme
Segment'ler şifreli. Key (anahtar) olmadan çalışmaz. Bu sayede segment URL'si bilinse bile indirilemez.
Teknik Detay
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 şu an Laravel üzerinden serve ediliyor. Her segment için PHP bootstrap + middleware çalışıyor. Öneri: Nginx/LiteSpeed direkt serve etmeli, Cloudflare cache'lemeli.
Cloudflare Pro Optimizasyonu
Basit Anlatım
Cloudflare Ne İşe Yarıyor?
Cloudflare Olmadan
Her istek uzun yoldan gidiyor. 100-200ms gecikme
Cloudflare İle
En yakın noktadan alıyor. 10-30ms gecikme
Cloudflare Pro Avantajları:
- ✓ Dünya genelinde cache sunucuları
- ✓ Streaming optimizasyonu
- ✓ DDoS koruması
- ✓ Argo Smart Routing (daha hızlı yol)
Teknik Detay - Cache Stratejisi
✓ Cache'lenmeli
- • segment-*.ts (şifreli, public)
- • JS/CSS dosyaları
- • Görseller
- • Fontlar
✗ Cache'lenmemeli
- • playlist.m3u8 (token içeriyor)
- • enc.bin (key dosyası)
- • API cevapları
- • HTML sayfalar
⚠️ Kontrol Edilmeli
- • Page Rule'lar doğru mu?
- • Cache Everything aktif mi?
- • Segment'ler CF'den mi?
- • cf-cache-status header?
# Önerilen Page Rules (Cloudflare) *.ts Cache Level: Cache Everything Edge TTL: 1 year Browser TTL: 1 year *.m3u8 Cache Level: Bypass (Token doğrulaması gerekli) /hls-key/* Cache Level: Bypass (Key korumalı)
Çözüm Planı - Adım Adım
| Öncelik | Çözüm | Beklenen Etki | Risk | Süre |
|---|---|---|---|---|
| 1 | Route & Config Cache Aktifle | -30-50ms | Orta | 2 dk |
| 2 | OPcache Doğrula & Aktifle | -20-40ms | Düşük | 5 dk |
| 3 | Cloudflare Segment Cache Kontrol | Donma azalır | Düşük | 10 dk |
| 4 | System Check Eşiklerini Güncelle | Görsel iyileşme | Yok | 5 dk |
| 5 | Segment'leri Nginx'ten Serve Et | -50-80ms | Orta | 30 dk |
Route & Config Cache
Basit:
Sistem ayarlarını ve sayfa listesini bir kere hesapla, hafızada tut.
Komutlar:
php artisan config:cache php artisan route:cache
OPcache Kontrolü
Basit:
PHP kodlarını derlenmiş halde tut, her seferinde okuma.
Kontrol:
php -i | grep opcache.enable # veya phpinfo() sayfası
Cloudflare Segment Cache
Basit:
Şarkı parçalarını Cloudflare'in Türkiye sunucusunda tut.
Kontrol:
# Segment isteğinde header kontrol: cf-cache-status: HIT ← İyi cf-cache-status: MISS ← Kötü
Not: Bu rapor sadece araştırma içerir. Hiçbir değişiklik yapılmamıştır. Prod ortamda bakım penceresi ile uygulanmalıdır.