Asenkron Siyah Kutular
Smart Tech Devs’te kurumsal uygulamalar geliştirirken, her şeyi senkron olarak çalıştırmanın imkansız olduğunu hızla fark edersiniz. PDF’lerin oluşturulması, toplu e-postaların gönderilmesi ve Stripe web kancalarının işlenmesi arka plan kuyruklarına devredilmelidir.
Laravel’in standart kuyruk sistemi (php artisan queue:work) güçlüdür, ancak tam anlamıyla bir siyah kutu gibi çalışır. Kuyrukta 10.000 iş olduğunda, bunların ne kadar hızlı işlendiğini nasıl bilebilirsiniz? İş başarısızlık oranlarını gerçek zamanlı olarak nasıl izlersiniz? Kuyruk uzunluğuna göre çalışanları ölçeklendirmek için özel bash betikleri yazmadan nasıl yaparsınız? Görünürlük olmadan Redis kuyrukları işletmek ciddi bir operasyonel risk taşır. Kurumsal düzeyde kontrol elde etmek için Laravel Horizon‘ı kullanmalısınız.
Çözüm: Horizon Kontrol Paneli ve Otomatik Ölçekleme
Laravel Horizon, Redis kuyruklarınız için etkileyici, resmi bir kontrol paneli ve kodla yapılandırma sistemidir. Standart kuyruk işçilerini tamamen değiştirmektedir.
Tek tek işçi süreçlerini Supervisor aracılığıyla başlatmak yerine, tek bir Horizon ana süreci başlatırsınız. Horizon, config/horizon.php dosyanızı okuyarak, tam olarak tanımladığınız spesifikasyonlara göre işçi süreçlerini otomatik olarak oluşturur, izler ve sonlandırır. Gerçek zamanlı bir arayüz üzerinden iş hacmini (dakikada iş sayısı), çalışma metriklerini ve başarısız iş yığın izlerini görüntülemenizi sağlar.
Otomatik Ölçekleme İşçi Havuzlarının Tasarımı
Horizon’un gerçek gücü, kuyruk uzunluğuna bağlı olarak işçi süreçlerini dinamik olarak otomatik olarak ölçeklendirme yeteneğidir.
// config/horizon.php
'environments' => [
'production' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['high', 'default', 'emails'],
// 1. ✅ KURUMSAL DESEN: Otomatik Ölçekleme
// Horizon, işlemlerin sayısını minimum ve maksimum değerler arasında dinamik olarak ölçeklendirecek
'balance' => 'auto',
'minProcesses' => 1,
'maxProcesses' => 20,
// 2. Yük altında her kuyruğun kaç sürece sahip olduğunu tam olarak tanımlayın
'balanceMaxShift' => 1,
'balanceCooldown' => 3,
'tries' => 3,
],
// 3. Ağır ve yavaş işleri kendi özel süpervizörlerine izole edin
'supervisor-reports' => [
'connection' => 'redis',
'queue' => ['heavy-reports'],
'balance' => 'simple',
'processes' => 5,
'timeout' => 300, // 5 dakika maksimum çalışma süresi
],
],
],
Kontrol Panelini Güvende Tutma
Horizon, hassas operasyonel verileri açığa çıkardığı ve başarısız işleri yeniden denemenize izin verdiği için, üretim ortamında güvence altına alınmalıdır. Yetkilendirme mantığını HorizonServiceProvider içinde tanımlarsınız.
// app/Providers/HorizonServiceProvider.php
use Illuminate\Support\Facades\Gate;
protected function gate(): void
{
Gate::define('viewHorizon', function ($user) {
// Sadece 'admin' rolüne sahip kullanıcıların veya belirli e-postaların kontrol panelini görüntülemesine izin verin
return in_array($user->email, [
'[email protected]',
'[email protected]'
]);
});
}
Mühendislik ROI’si
Redis kuyruklarınızı Laravel Horizon’a taşıyarak, kör bir arka uç işleme sürecini yüksek ölçülebilir, kendini onaran bir sisteme dönüştürüyorsunuz. Karmaşık Supervisor ölçeklendirme betiklerine olan ihtiyacı ortadan kaldırarak, sadece kuyruk gerçekten dolu olduğunda işçileri devreye alarak altyapı maliyetlerini önemli ölçüde azaltıyorsunuz. Ayrıca, DevOps ekibinize başarısız işleri premium bir UI’dan doğrudan izleme ve geri kazanma yetkisi veriyorsunuz.
Kaynak: Orijinal Makale


