TL;DR — Laravel Octane, uygulamanızı uzun süreli bir sunucuda (Swoole veya RoadRunner) çalıştırır. Framework’ü istekler arasında hafızada tutarak, başlatma aşamasını ortadan kaldırır, bu da gecikmeyi önemli ölçüde azaltır ve verimliliği artırır.
Laravel Octane Nedir?
Laravel Octane Nedir?
Klasik PHP-FPM modelinde, her istekte Laravel framework’ü sıfırdan başlatılır. Octane bu paradigmayı değiştirir:
- Bir master process, worker havuzunu yönetir.
- Framework bir kez başlatılır ve hafızada “sıcak” kalır.
- Her gelen istek, önceden başlatılmış bir işçiye verilir.
- İşçi yanıtı döner ve bir sonraki istek için aktif kalır.
Uygulamada:
- Bir master process, N worker yönetir.
- Her istek, önceden başlatılmış bir işçiye verilir.
- Yanıt döner; işçi bir sonraki istek için aktif kalır.
Bu yaklaşım, p95/p99 gecikmesini önemli ölçüde iyileştirir, böylece uygulamanız yüksek yük altında inanılmaz derecede hızlı hissedilir.
Octane Ne Zaman Kullanılmalı (ve Ne Zaman Atlanmalı)
Octane Ne Zaman Kullanılmalı (ve Ne Zaman Atlanmalı)
Octane güçlüdür, ancak her proje için bir “sihrli buton” değildir.
- Kötü kod için bir sihirli buton. İndekslenmemiş sorgular ve N+1’ler hâlâ zarar verebilir.
- Queue’ların yerini almaz. Ağır iş yüklerini (Horizon/Redis) işlerde tutun.
- Küresel durumu geçersiz kılma özgürlüğü sunmaz. İşçiler kalıcıdır, bu nedenle değiştirilebilir singleton/statiklere dikkat edin.
Octane Ne Zaman Parlak Bir Seçimdir (ve Ne Zaman Atlanmalı)
Octane Ne Zaman Parlak Bir Seçimdir (ve Ne Zaman Atlanmalı)
Kullanmalısınız eğer…
- Dengeli veya dalgalı trafik, sıkça ziyaret edilen API’ler veya sayfalarınız varsa.
- Uygulama çoğunlukla I/O-bağlı (DB, HTTP çağrıları, depolama) ise.
- PHP-FPM’i agresif şekilde ölçeklendirmeden daha düşük gecikme istiyorsanız.
Muhtemelen atlayın eğer…
- Basit broşür sitesi, düşük trafik.
- İstek döngüsünde ağır CPU-bağlı işler varsa (önce bunları kuyruklara taşıyın).
- Kod tabanı, çözülmesi zor olan global/değiştirilebilir durumlara dayanıyorsa.
Alt Yapı (istek yaşam döngüsü)
Alt Yapı (istek yaşam döngüsü)
[Client] → [Reverse proxy] → [Octane master] → [Warm worker handles request] → [Response]
↑ (Laravel already booted)
workers
Octane ayrıca sıcak yeniden yükleme, istek kapsamlı konteynerler ve tek örnek kullanım durumları için hafızada bir önbellek sürücüsü gibi kolaylıklar sağlar.
Hızlı Başlangıç (yerel)
Hızlı Başlangıç (yerel)
composer require laravel/octane
php artisan octane:install
Sunucunuzu seçin:
Swoole (uzantı):
# uzantıyı kurun (Swoole veya OpenSwoole)
pecl install swoole
# sonra çalıştırın
php artisan octane:start --server=swoole
RoadRunner (binary):
# rr binary'yi composer uzantısıyla indirin
./vendor/bin/rr get
# sonra çalıştırın
php artisan octane:start --server=roadrunner
Durumsuz Disiplin (önemli)
Durumsuz Disiplin (önemli)
İşçiler uzun süre yaşadığı için, istek başına veri sızmamalıdır:
- Değiştirilebilen singleton/statiklerden kaçının; istek/kullanıcı verilerini tutanlar.
- Istek-tabanlı bağlamaları tercih edin veya verileri açıkça geçirin.
- Middleware’de uygun olduğunda her istek için önbellekleri sıfırlayın.
- Oturumları/önbelleği paylaşılan arka uçlarda (Redis/DB) saklayın; birden fazla işçi/instance çalıştırıyorsanız.
İpucu: bellek büyümesini azaltmak için işçi geri dönüşümünü (maksimum istek) planlayın; RSS/CPU kullanımını izleyin.
Oturumlar, Önbellek, Dosyalar
Oturumlar, Önbellek, Dosyalar
- Çoklu işçi/multi-instance yapıları için paylaşılan oturum sürücüsünü (code>redis,
database) kullanın. - Önbellek: merkezi bir depo (Redis), düğümler arasında daha güvenlidir; Octane’in hafızadaki önbelleği işlem başına sadece yereldir.
- Dosyalar: yatay ölçekleme yaparken paylaşılan disk/S3 üzerinden servis edin.
Kuyruklar Hâlâ Önemli
Kuyruklar Hâlâ Önemli
Octane, istek aşamasındaki yükü azaltır; kuyruklar ise iş yükünü istekten çeker. E-postalar, görüntü/PDF işleme ve web kancalarını işlerde tutun (Horizon metrikler/yeniden denemeler için harika). En hızlı yanıt, daha az iş yapan olandır.
Gözlemlenebilirlik
Gözlemlenebilirlik
Önce/sarın ölçün. İzleyin:
- Toplam/yavaş istekler, p95/p99
- DB süresi ve sorgu sayısı (Debugbar/Telescope)
- İşçi bellek, yeniden başlatmalar ve hata oranları
- Reverse proxy ve OS metrikleri (CPU, yük, I/O)
Reverse Proxy (Nginx) – Minimal Örnek
Reverse Proxy (Nginx) – Minimal Örnek
server {
listen 80;
server_name example.com;
client_max_body_size 16m;
location / {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 60s;
proxy_connect_timeout 5s;
proxy_pass http://127.0.0.1:8000;
}
}
Octane’i 127.0.0.1:8000 üzerinde dinleyecek şekilde başlatın ve Nginx’i halka açık giriş noktası olarak tutun.
İşlem Yöneticisi (systemd) – Örnek
İşlem Yöneticisi (systemd) – Örnek
# /etc/systemd/system/octane.service
[Unit]
Description=Laravel Octane (Swoole veya RoadRunner)
After=network.target
[Service]
User=www-data
WorkingDirectory=/var/www/app
Environment=APP_ENV=production
ExecStart=/usr/bin/php artisan octane:start --server=swoole --host=127.0.0.1 --port=8000
ExecStop=/usr/bin/php artisan octane:stop
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
systemd’yi yeniden yükleyin ve etkinleştirin:
sudo systemctl daemon-reload
sudo systemctl enable --now octane
RR’yi tercih ediyorsanız, --server=roadrunner değiştirin (rr binary’sinin mevcut olduğundan emin olun).
Uçuş Öncesi Kontrol Listesi (kopyala/yapıştır)
Uçuş Öncesi Kontrol Listesi (kopyala/yapıştır)
- [ ] N+1 düzeltildi, ağır sorgular indekslenmiş, makul önbellekler mevcut
- [ ] Oturumlar ve Önbellek paylaşılan bir arka uçta (Redis/DB) yer alıyor
- [ ] İstek verileri globals/singletons içinde saklanmıyor
- [ ] İşçi geri dönüşümü yapılandırıldı (maksimum istek) ve izleniyor
- [ ] Reverse proxy + işlem yöneticisi yapılandırıldı
- [ ] Önce/sonra metrikler hazır (p95/p99, DB süresi, bellek)
Sorun Giderme Notları
Sorun Giderme Notları
- Geliştirmede çalışıyor, üretimde başarısız oluyor → Swoole/rr binary eksik, servis dosyasında yanlış kullanıcı/yollar.
- Bellek artışı → uzun ömürlü durum veya büyük önbelleklerin hafızada tutulması; singletonları denetleyin ve işçi geri dönüşümünü etkinleştirin.
- Yapışkan oturumlar → yatay ölçekleme yaptığınızda yerel oturum dosyalarına güvenmeyin; Redis/DB’ye geçin.
- Gecikme kazancı yok → uygulama CPU-bağlı veya DB-bağlı; profilleyin ve önce yükü azaltın/optimize edin.
Sonuç
Sonuç
Octane, Laravel’i hafızada tutarak PHP-FPM’in isteğe bağlı yükünü ortadan kaldırır ve uzun ömürlü bir sunucu arkasında çalıştırır. I/O-ağır uygulamalar ve yoğun API’ler için parlayacak, ancak durumsuz disiplin sağlanarak, ağır işleri kuyruklarda tutarak ve sonuçları ölçerek kullanılmalıdır. Geliştiricinin başlangıçta küçük bir devreyle başlaması, gözlemlenebilirlik eklemesi ve ardından reverse proxy arkasında rollout yapması önerilir.
Kaynak: Orijinal Makale
- Laravel Octane Nedir?
- Octane Ne Zaman Kullanılmalı (ve Ne Zaman Atlanmalı)
- Octane Ne Zaman Parlak Bir Seçimdir (ve Ne Zaman Atlanmalı)
- Alt Yapı (istek yaşam döngüsü)
- Hızlı Başlangıç (yerel)
- Durumsuz Disiplin (önemli)
- Oturumlar, Önbellek, Dosyalar
- Kuyruklar Hâlâ Önemli
- Gözlemlenebilirlik
- Reverse Proxy (Nginx) – Minimal Örnek
- İşlem Yöneticisi (systemd) – Örnek
- Uçuş Öncesi Kontrol Listesi (kopyala/yapıştır)
- Sorun Giderme Notları
- Sonuç


