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.
