Laravel Octane ile Performans Artışı: Swoole ve RoadRunner Kullanımı

L

Laravel projelerinde yüksek trafik, düşük gecikme süresi ve optimum kaynak kullanımı sağlamak kritik bir gereksinimdir. Laravel Octane, Swool veya RoadRunner gibi PHP uygulama sunucularını kullanarak istek başına framework başlatma maliyetini ortadan kaldırarak büyük bir performans artışı sağlar.

Bu rehberde, Laravel Octane'in nasıl çalıştığını, nasıl kurulduğunu ve performans açısından sağladığı faydaları ele alacağız. Ayrıca Swool ve RoadRunner karşılaştırması, performans testi ve benchmark sonuçları gibi konuları detaylandıracağız.

1. Laravel Octane Nedir?

Laravel Octane, Laravel uygulamalarını geleneksel PHP-FPM modelinden çıkartarak daha hızlı ve verimli bir şekilde çalıştırmak için geliştirilmiş bir pakettir.

Avantajları:
✅ İstek başına framework yeniden başlatılmaz.
✅ Bellekte değişkenler, servisler ve singletonlar tutulabilir.
Swool ve RoadRunner desteği ile asenkron ve eş zamanlı işlemler desteklenir.
WebSockets, Task Worker, TCP Server gibi özellikler sağlanır.

2. Laravel Octane Kurulumu

Laravel Octane’ı Composer ile yükleyelim:

composer require laravel/octane

Daha sonra Octane’i başlatmak için konfigürasyon dosyalarını oluşturalım:

php artisan octane:install

Bu komut çalıştırıldığında size Swool veya RoadRunner kullanmak isteyip istemediğiniz sorulacaktır. Kullanacağınız driver’a göre aşağıdaki paketleri yüklemeniz gerekebilir.

3. Swool vs RoadRunner Karşılaştırması

Özellik Swool RoadRunner
PHP Uzantısı Evet (C ile yazılmış) Hayır (Go ile yazılmış)
Asenkron Destek Var Kısıtlı
Ekstra Bağımlılık Swool PHP uzantısı GoLang kurulumu
Task Worker Evet Evet
Memory Leak Protection Evet Evet
  • Swool: PHP uzantısı olarak çalışır, asenkron işlemleri ve yüksek eş zamanlı bağlantıları destekler.
  • RoadRunner: Go ile yazılmış bir uygulama sunucusudur, PHP'nin Go tarafından yönetilmesini sağlar.

Eğer asenkron işlemler, WebSockets ve yüksek trafik gereksiniminiz varsa Swool kullanmanız önerilir. Daha hafif ve taşınabilir bir yapı istiyorsanız RoadRunner tercih edilebilir.

4. Swool ile Laravel Octane Kullanımı

Adım 1: Swool Kurulumu

Swool, PHP’ye bir uzantı olarak yüklenmelidir. Yüklemek için:

pecl install swoole

Swool'u Laravel Octane ile kullanmak için config/octane.php dosyasında server değerini swoole olarak ayarlayın:

// config/octane.php
return [
    'server' => env('OCTANE_SERVER', 'swoole'),
];

Adım 2: Swool ile Octane Çalıştırma

Swool ile Laravel Octane’i başlatmak için aşağıdaki komutu çalıştırabilirsiniz:

php artisan octane:start --server=swoole

Bu komut ile Swool tabanlı Laravel uygulamanız başlatılacaktır ve ön bellekte tutulan bileşenler sayesinde her istek için Laravel’in tekrar başlatılması engellenecektir.

5. RoadRunner ile Laravel Octane Kullanımı

Adım 1: RoadRunner Kurulumu

RoadRunner, GoLang ile çalıştığı için öncelikle GoLang’ı yüklememiz gerekmektedir:

brew install go  # (MacOS)
sudo apt install golang  # (Ubuntu/Debian)

Ardından RoadRunner'ı yükleyelim:

composer require spiral/roadrunner-cli --dev

Adım 2: RoadRunner ile Octane Çalıştırma

php artisan octane:start --server=roadrunner

Bu komut, RoadRunner tabanlı bir Laravel Octane sunucusu başlatacaktır.

6. Laravel Octane Performans Testi

Performansı ölçmek için Apache Benchmark (ab) kullanabilirsiniz. Örnek bir test senaryosu:

ab -n 10000 -c 100 http://127.0.0.1:8000/

Bu test, aynı anda 100 eş zamanlı bağlantı ile toplam 10.000 istek gönderecektir.

Benchmark Sonuçları:

Yöntem İşlenen İstek/Saniye
PHP-FPM (Nginx) ~500 istek/sn
Laravel Octane + RoadRunner ~2500 istek/sn
Laravel Octane + Swool ~4000 istek/sn

Gördüğünüz gibi, Laravel Octane kullanarak performansı 5-10 kat artırmak mümkündür! 

7. Octane ile Singleton Kullanımı

Octane, bellekte değişkenleri tutabilir. Ancak, yanlış yapılandırma bellek sızıntılarına neden olabilir. Singleton kullanımını şu şekilde yapabilirsiniz:

// app/Providers/AppServiceProvider.php
use Laravel\Octane\Facades\Octane;

public function register()
{
    Octane::booted(function () {
        app()->singleton('exampleService', function () {
            return new ExampleService();
        });
    });
}

8. Octane ile Asenkron Görevler (Tasks)

Octane, arka planda asenkron olarak çalıştırılabilen görevler (tasks) oluşturmanıza olanak tanır.

// Kullanıcıya asenkron olarak e-posta gönderme
Octane::dispatch(fn () => Mail::to('test@example.com')->send(new WelcomeMail()));

Octane queue'ları da desteklediğinden, bu işlemi Job Dispatch şeklinde de çalıştırabilirsiniz.

9. Laravel Octane ile Cache Kullanımı

Laravel’de Octane ile APCu veya Redis kullanarak cache işlemlerini hızlandırabilirsiniz.

// Veriyi Octane içinde cache'leyelim
Octane::cache()->put('user_count', 100, 60); // 60 saniye sakla

// Cache'den veriyi alalım
$count = Octane::cache()->get('user_count');

Octane, Veri saklama, oturum yönetimi ve gecikme süresi azaltımı gibi konularda büyük avantajlar sağlar.

Sonuç

Laravel Octane, Laravel projelerinin performansını 5-10 kata kadar artırabilir.
Swool ve RoadRunner arasında seçim yaparak ihtiyaçlarınıza uygun yapı kurabilirsiniz.
Task Workers, Asenkron İşlemler ve Bellek Yönetimi gibi ek özellikler ile ölçeklenebilir sistemler oluşturabilirsiniz.

Laravel Octane’i yüksek trafikli projeler, API servisleri ve gerçek zamanlı sistemler için kullanabilirsiniz.

By Aydın Yağız

Aydın Yağız

Teknolojiye olan tutkumla inovasyonu destekler, kullanıcı deneyimini önceliklerim arasına alırım. Kendi yeteneklerimi ve bilgilerimi paylaşarak, daha geniş bir topluluğun faydalanmasını sağlarım. İş birliği içinde hareket ederek, geleceğin teknoloji dünyasına katkıda bulunmayı hedeflerim. Sizi de bu heyecan verici yolculuğa davet ediyor, fikirlerinizi paylaşmaya ve teknolojiye dair sınırları zorlamaya teşvik ediyorum. Birlikte büyüyelim ve yeni ufuklara açılalım!

İletişime Geçin

Kodlama dünyasına adım atın ve deneyimlerinizi paylaşın. Siz de bu aktif topluluğa katılarak yeni bağlantılar kurun, fikir alışverişinde bulunun ve bilgi birikiminizi artırın.

Özelleştir

Farklı yazı tipleri ve renk seçenekleriyle stilinizi kişiselleştirin. Aşağıdaki örneklerden birini deneyerek sizin için en uygun olanı seçin.

Yazı Tipi Örnekleri

Renk Örnekleri