İçeriğe geç
Muhammet Şafak
Framework & Kütüphane 3 dk okuma

Laravel Octane: kalıcı süreçle gelen performans

Laravel Octane'in istek başına önyükleme maliyetini nasıl ortadan kaldırdığı ve bunun beraberinde getirdiği trade-off'lar.


Laravel Octane bu yılın başında stabil sürüme ulaştı. Uzun süredir takip ettiğim bir projeydi; geçen ay bir uygulama üzerinde deneme fırsatım oldu. Beklentilerimi hem karşıladı hem aştı — ama “bedeli nedir” sorusunu da beraberinde getirdi. O soruyu yanıtlamadan önce Octane’in neden bu kadar fark yarattığını anlamak gerekiyor.

PHP’nin varsayılan modeli: her istekte sıfırdan başlamak

PHP’nin geleneksel çalışma modeli şu: bir HTTP isteği gelir, PHP süreci (process) başlatılır, tüm framework önyüklenir (bootstrap), istek işlenir, süreç sonlanır. Bir sonraki istek için aynı döngü tekrar eder.

Bu model birçok açıdan temiz. Durum (state) bir istekten diğerine sızmaz, bellek sorunları kendiliğinden temizlenir, bir isteği bozan bug bir sonrakini etkilemez.

Ama maliyeti var: her istek için framework önyüklemesi tekrarlanıyor. Servis sağlayıcıların (service provider) kayıt edilmesi, konfigürasyon dosyalarının okunması, binding’lerin tanımlanması — bunlar her seferinde yeniden yapılıyor. Orta büyüklükte bir Laravel uygulamasında bu 20-50 ms düzeyinde bir yük.

Octane’in modeli: ısıtılmış süreç

Laravel Octane, Swoole veya RoadRunner üzerine kurulu. Bu araçlar PHP’yi kalıcı bir süreç olarak çalıştırıyor. Uygulama bir kez önyükleniyor, sonra bu önyüklenmiş haliyle istekleri karşılamaya devam ediyor.

Sonuç: birinci istek diğerleriyle aynı maliyete sahip değil. Uygulama önyüklenmiş, hazır bekliyor.

Kurulum nispeten sade:

composer require laravel/octane
php artisan octane:install
php artisan octane:start --server=swoole --port=8000

Basit bir route için yanıt süresi karşılaştırması kaba hatlarıyla şöyle:

SenaryoPHP-FPMOctane (Swoole)
Basit route~15 ms~2 ms
Veritabanı sorgusu olan route~35 ms~18 ms
Karmaşık route (çok servis)~80 ms~25 ms

Rakamlar uygulamaya göre değişir ama oran tutarlı.

Trade-off 1: Durum sızması (state leakage)

En kritik sorun bu. PHP’nin geleneksel modelinde durum sorunları çoğu zaman kendiliğinden çözülüyor — sonraki istek temiz bir süreçte başlıyor. Octane’de aynı süreç defalarca kullanıldığından statik özellikler (static properties), singleton’lar ve global değişkenler istekler arasında sızabilir.

<?php

// BU TEHLIKELI — statik özellik istekler arasında kalır
class RequestLogger
{
    private static array $logs = [];

    public static function add(string $message): void
    {
        self::$logs[] = $message;  // Her istekte birikmeye devam eder!
    }
}

Octane bu sorun için octane:start komutu yanında listener’lar sunuyor — her istek öncesi ve sonrası çalışan hook’lar. Ama mevcut kodunuzu bu model için gözden geçirmeniz gerekiyor.

Laravel’in kendi bileşenleri Octane uyumlu. Sorun genellikle kendi yazdığınız singleton’larda ya da uyumsuz üçüncü parti paketlerde çıkıyor.

Trade-off 2: Swoole gereksinimleri

Swoole, PHP’ye C uzantısı olarak kurulan bir araç. Standart PHP kurulumunda gelmiyor; sunucuya ayrıca yüklenmesi gerekiyor. Bu, hosting seçeneklerinizi daraltıyor.

RoadRunner alternatif olarak geliyor; Go ile yazılmış, standart PHP’yi long-running process olarak çalıştırıyor. Swoole kadar hızlı değil ama kurulumu daha az sürtüşmeli.

Trade-off 3: Geliştirme ortamı

Development modunda hot reload çalışıyor: dosyayı kaydettiğinizde Octane uygulama sürecini yeniden başlatıyor. Production’a yakın bir ortam sağlıyor ama geleneksel PHP-FPM ile tam aynı davranışı göstermiyor.

Debug araçları ve profiler’ların Octane ile tam uyumlu çalışıp çalışmadığını kontrol etmek gerekiyor.

Ne zaman değer

Octane her proje için doğru seçim değil. Düşük trafikli bir içerik sitesi veya admin paneli için geçiş önermem — kazanım orada görünmez, risk gereksiz.

Yüksek trafikli API’ler, gerçek zamanlı özellikler veya yanıt süresinin ölçülüp izlendiği uygulamalar için anlamlı bir kazanım. Özellikle WebSocket desteği veya eşzamanlı (concurrent) işlemler gerektiren yerlerde Swoole’un getirdiği ek özellikler ayrıca değer taşıyor.

Mevcut bir projeyi taşıyorsanız önce durum yönetimini inceleyin. Statik kullanımı, global state ve singleton’ları gözden geçirin. Bu temizlik bazen Octane’den bağımsız olarak da projeyi iyileştiriyor.

Etiketler: #Laravel
Paylaş:

İlgili Yazılar

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi