Muzibu Performans Optimizasyonu

Player Donma Sorunu + Genel Hız Analizi - Kapsamlı Rapor

72 Çekirdek Sunucu Cloudflare Pro 13 Şubat 2026 Versiyon 4 (Birleşik)

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. 1. Route/Config cache YOK → Her istek için +30-50ms
  2. 2. OPcache durumu şüpheli → PHP her seferinde parse ediliyor olabilir
  3. 3. HLS segment'leri Laravel üzerinden → Cloudflare bypass
  4. 4. 54 PHP process %100 CPU → Kaynak tükeniyor
  5. 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

%80 dolu

Yeni parçalar gelirken eski parçalar çalıyor. Buffer (tampon) hep dolu kalıyor.

Donma Durumu

%5 dolu

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ışı:

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

Donma Senaryosu:

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

Sunucu Tarafı Sorunlar

1

Route ve Config Cache YOK!

KRİTİK

Basit 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

2

54 PHP Process %100 CPU

YÜKSEK

Basit 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.

3

OPcache Durumu Şüpheli

KONTROL

Basit 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ı.

4

Her İstek İçin 6 Middleware

OVERHEAD

Basit 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

🇹🇷 Türkiye →→→→→ 🇩🇪 Almanya (Sunucu)

Her istek uzun yoldan gidiyor. 100-200ms gecikme

Cloudflare İle

🇹🇷 Türkiye 🌐 Cloudflare İstanbul

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
1

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
2

OPcache Kontrolü

Basit:

PHP kodlarını derlenmiş halde tut, her seferinde okuma.

Kontrol:

php -i | grep opcache.enable
# veya phpinfo() sayfası
3

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.