Laravel ile çalışan bir projede, arka planda yürüyen işler doğru yönetilmediğinde ilk darbe genellikle kullanıcı deneyimine vurur: sipariş sonrası e-posta geç gider, raporlar saatlerce sürer, yoğun trafikte sayfalar beklenenden daha yavaş yanıt verir. Tüm bu problemler çoğu zaman veritabanından ya da PHP kodundan değil, arka plan işlerinin ve kuyruk tüketicilerinin yanlış yönetilmesinden kaynaklanır. Özellikle VPS üzerinde kendi altyapınızı yönettiğinizde, Laravel queue, Supervisor, systemd ve PM2 gibi araçların nasıl konumlanacağını bilmek kritik hale gelir.
Bu yazıda, DCHost altyapısında sıkça karşılaştığımız gerçek senaryolardan yola çıkarak, VPS üzerinde arka plan işleri ve kuyruk yönetimini uçtan uca ele alacağız. Laravel Queue mimarisini sade bir dille özetleyecek, Supervisor ve systemd ile PHP queue worker süreçlerini nasıl yönetebileceğinizi gösterecek, Node.js tarafında PM2 ile çalışan tüketici süreçlerini bu mimariye nasıl entegre edeceğinizi konuşacağız. Ayrıca loglama, izleme, yeniden başlatma stratejileri ve ölçeklendirme gibi operasyonel detaylara da gireceğiz. Okuduğunuzda, Laravel tabanlı bir uygulamayı DCHost VPS üzerinde üretim ortamına taşırken arka plan işleri konusunda net bir yol haritanız olacak.
İçindekiler
- 1 Arka Plan İşleri ve Kuyruklar Neden Bu Kadar Önemli?
- 2 VPS Üzerinde Kuyruk Mimarisi: Temel Bileşenler
- 3 Laravel Queue Temelleri: Job Tasarımı ve Sürücüler
- 4 VPS Üzerinde Queue Worker Çalıştırma Stratejisi
- 5 Supervisor ile Laravel Queue Worker Yönetimi
- 6 systemd ile Laravel Queue Worker Çalıştırmak
- 7 Node.js Tüketiciler İçin PM2: Laravel ile Yan Yana
- 8 Hangi Aracı Ne Zaman Seçmeli? Supervisor, systemd ve PM2 Karşılaştırması
- 9 Loglama, İzleme ve Alarm: Kuyrukların Sağlığını Ölçmek
- 10 Güvenlik ve Kaynak Yönetimi Perspektifinden Kuyruklar
- 11 DCHost VPS Üzerinde Örnek Bir Kuyruk Mimarisi
- 12 Özet ve Yol Haritası: Arka Plan İşlerini Rayına Oturtmak
Arka Plan İşleri ve Kuyruklar Neden Bu Kadar Önemli?
Modern web uygulamalarında kullanıcı isteğine anında cevap vermek ile ağır işleri arka plana atmak arasındaki denge, performansın kalbinde yer alır. Özellikle PHP-FPM veya klasik PHP çalıştırma modellerinde, her HTTP isteği belirli bir maksimum süre içinde tamamlanmak zorundadır. Ağır işleri senkron çalıştırırsanız sadece kullanıcıyı bekletmekle kalmaz, aynı zamanda sunucu kaynaklarını da gereksiz yere tüketirsiniz.
Tipik olarak arka planda çalışması gereken işler şunlardır:
- E-posta, SMS, push bildirim gönderimi
- Fatura PDF üretimi, rapor oluşturma, Excel dışa aktarma
- Görsel işlemeleri, thumbnail üretimi, video transkodlama
- Dış API’lere (ödeme, kargo, entegrasyonlar) toplu istekler
- Önbellek ısıtma, arama indekslerini güncelleme, veri migrasyonları
Bu tür işler için düzgün bir kuyruk ve worker mimarisi kurmazsanız, uygulamanızın ön yüzü ile arka plandaki ağır işler birbirine karışır; hem tepki süreleri artar hem de hata yönetimi zorlaşır. DCHost olarak yüksek trafikli WooCommerce, Laravel ve SaaS projelerinde gördüğümüz en yaygın performans sorunlarından bazıları, aslında yanlış konumlandırılmış cron job’lar ve dağınık queue worker süreçlerinden kaynaklanıyor. Bu yüzden önce mimariyi netleştirmek gerekiyor.
VPS Üzerinde Kuyruk Mimarisi: Temel Bileşenler
VPS üzerinde kendi Laravel altyapınızı yönettiğinizde, kuyruk mimariniz genellikle şu bileşenlerden oluşur:
- Uygulama (Laravel): Job sınıfları, dispatch edilen işler, queue sürücüleri.
- Kuyruk Arka Ucu: Veritabanı, Redis veya başka bir mesaj kuyruğu sistemi.
- Worker Süreçleri: Kuyruktan işi çekip çalıştıran PHP (veya Node.js) süreçleri.
- Süreç Yöneticisi: Supervisor, systemd veya PM2 gibi worker’ları ayakta tutan araçlar.
- İzleme ve Loglama: Log dosyaları, metrikler, alarmlar.
Bu bileşenlerin hepsini doğru konumlandırmadan performans optimizasyonu yapmak çoğu zaman boşa efor oluyor. Örneğin sadece PHP-FPM ayarları ile oynamak genellikle yeterli olmaz; Laravel prod ortamındaki bütün bileşenleri birlikte ele almak gerekir. Bu konuda daha geniş bir resim görmek isterseniz, Laravel prod ortam optimizasyonu rehberimizde PHP-FPM, OPcache, Octane ve queue yapılarını birlikte ele aldığımız yazıya göz atabilirsiniz.
Laravel Queue Temelleri: Job Tasarımı ve Sürücüler
Laravel Queue, senkron iş yükünü arka plana taşımanızı sağlar. Basitçe:
- Yapılacak işi bir
Jobsınıfında tanımlarsınız. - Bu job’ı
dispatch()ile kuyruğa atarsınız. - Arka planda çalışan worker süreçleri bu job’ı kuyruqdan çekip çalıştırır.
Job Sınıflarını Doğru Tasarlamak
Job sınıfları, kuyruk mimarisinin çekirdeğidir. Temel pratikler:
- Job içine fazla mantık koymayın; asıl işi servis katmanına devredin.
- Job içinde sadece taşınabilir veri tutun (ID, küçük array’ler). Büyük model nesnelerini serileştirmekten kaçının.
- Idempotent (tekrar çalıştırılınca zarar vermeyen) olacak şekilde tasarlamaya çalışın. Çünkü başarısız olan job’lar yeniden denenebilir.
Basit bir örnek job sınıfı:
php artisan make:job SendOrderEmail
class SendOrderEmail implements ShouldQueue {<br> use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;<br><br> public function __construct(public int $orderId) {}<br><br> public function handle(): void {<br> $order = Order::find($this->orderId);<br> if (! $order) {<br> return;<br> }<br> Mail::to($order->customer_email)->send(new OrderCreatedMail($order));<br> }<br>}
Sürücü Seçimi: Database mi, Redis mi?
Laravel Queue için birkaç sürücü seçeneği var. VPS ortamında en sık gördüklerimiz:
- sync: Geliştirme ortamı için, işi anında çalıştırır (kuyruk yokmuş gibi). Üretim için uygun değildir.
- database: Job’ları veritabanındaki bir tabloda saklar. Kurulumu basit ama yoğun trafikte veritabanını yorar.
- redis: Yüksek performanslı, bellek tabanlı kuyruk. Gerçek zamanlı işler ve yüksek trafik için ideal.
Küçük ölçekli bir SaaS veya kurumsal panel için database sürücüsü başlangıçta gayet yeterli olabilir. Ancak arka plan işlerinin hacmi arttıkça, veritabanını iş kuyruğu ile doldurmak, hem sorgu performansını hem de yedekleme/restore operasyonlarını zorlaştırır. Bu noktada Redis’e geçmek genellikle mantıklı olur.
Queue sürücü seçimi yaparken, veritabanı tarafındaki yükün sitenizi ne kadar etkileyebileceğini anlamak için veritabanı indeksleme ve sorgu optimizasyonu rehberimizde anlattığımız sorgu yükü analiz yöntemlerini kuyruk tablolarınız için de uygulayabilirsiniz.
Retry, Timeout ve Failed Jobs
Üretim ortamında en çok ihmal edilen konulardan biri de job hata yönetimidir. Laravel tarafında şu ayarları mutlaka düşünmelisiniz:
- timeout: Bir job’ın en fazla kaç saniye çalışabileceği.
- tries veya maxAttempts: Job’ın başarısız olduğunda kaç kez yeniden deneneceği.
- failed_jobs tablosu: Kalıcı olarak başarısız olan işlerin kayıtları.
Örneğin çalışan bir entegrasyon API’si zaman zaman geç cevap veriyorsa, timeout’u biraz yüksek tutabilir; ancak idempotent olmayan işlerde tries değerini sınırlı tutup, başarısız job’ları manuel incelemeye alabilirsiniz.
VPS Üzerinde Queue Worker Çalıştırma Stratejisi
Artık kod tarafı hazır; sıra VPS üzerinde worker süreçlerini nasıl yöneteceğinize geliyor. Bir DCHost VPS üzerinde Laravel uygulaması çalıştırdığınızda, genellikle şu yapı ile karşılaşıyoruz:
- Nginx veya Apache + PHP-FPM ile HTTP trafiğini karşılayan web katmanı
- Laravel artisan komutları ile çalışan queue worker süreçleri
- Bu süreçleri yöneten Supervisor veya systemd unit dosyaları
En temel komut şu:
php artisan queue:work --queue=default --sleep=1 --max-time=3600 --tries=3
Bunu doğrudan SSH oturumundan çalıştırmak yerine, arka planda, çökünce yeniden başlayacak, log’ları merkezi bir yerde toplanacak şekilde yönetmek için bir süreç yöneticisine ihtiyaç var. Burada iki klasik oyuncu devreye giriyor: Supervisor ve systemd. Node.js tabanlı worker’larınız varsa, üçüncü oyuncu olarak PM2 de sahneye çıkıyor.
Supervisor ile Laravel Queue Worker Yönetimi
Supervisor, özellikle Laravel topluluğunda yıllardır kullanılan, basit ini tarzı yapılandırma dosyalarıyla çalışan bir süreç yöneticisidir. Debian/Ubuntu tabanlı bir DCHost VPS üzerinde kurulumu oldukça kolaydır.
Supervisor Kurulumu
sudo apt update<br>sudo apt install supervisor -y
Supervisor genellikle /etc/supervisor/conf.d/ altında konfigürasyon dosyaları bekler. Her uygulama için ayrı bir dosya oluşturabilirsiniz.
Laravel Queue İçin Örnek Supervisor Konfigürasyonu
[program:myapp-queue-default]<br>command=/usr/bin/php /var/www/myapp/artisan queue:work redis --queue=default --sleep=1 --max-time=3600 --tries=3<br>directory=/var/www/myapp<br>user=www-data<br>autostart=true<br>autorestart=true<br>numprocs=3<br>redirect_stderr=true<br>stdout_logfile=/var/log/supervisor/myapp-queue-default.log<br>stopwaitsecs=600
Burada kritik birkaç nokta var:
- command: Mutlaka tam yolları kullanmaya çalışın. PHP’nin ve projenizin yolu net olsun.
- user: Web sunucusunun çalıştığı kullanıcı ile uyumlu olmasına dikkat edin (genelde www-data veya nginx).
- numprocs: Aynı konfigürasyondan kaç worker süreci açılacağını belirler. CPU çekirdek sayısına ve iş yüküne göre ayarlayın.
- stopwaitsecs: Graceful shutdown için önemli. Uzun süren job’larınız varsa yüksek tutun ki ani kesilmelerde veri tutarsızlığı olmasın.
Konfigürasyonu kaydettikten sonra Supervisor’a tanıtalım:
sudo supervisorctl reread<br>sudo supervisorctl update<br>sudo supervisorctl status
status çıktısında worker’larınızı RUNNING olarak görüyorsanız, temel yapı hazır demektir.
Supervisor’ın Artıları ve Eksileri
Artıları:
- Laravel dokümantasyonu ve ekosistemi ile çok uyumlu.
- İni formatı sayesinde yapılandırması basit ve okunaklı.
- Aynı dosya içinde birden çok kuyruk ve worker tanımlayabilirsiniz.
Eksi Yanları:
- systemd kadar derin servis entegrasyonu yok (örneğin cgroups, resource limitler vb.).
- Log yönetimi için ek ayarlara ve zaman zaman
logrotateentegrasyonuna ihtiyaç duyar. - İşletim sisteminin varsayılan init sistemi olmadığı için ek bir katman olarak düşünülmeli.
Yine de pek çok proje için Supervisor hâlâ son derece pratik ve güvenilir bir çözüm. Özellikle tek bir VPS üzerinde birkaç Laravel uygulaması koşturduğunuz senaryolarda, her proje için ayrı Supervisor programları tanımlamak temizlik ve yönetilebilirlik getirir.
systemd ile Laravel Queue Worker Çalıştırmak
Modern Linux dağıtımlarında systemd zaten varsayılan init sistemi olarak çalışıyor. Yani makineniz açıldığında hangi servislerin ayağa kalkacağı, nasıl izleneceği, log’ların nereye akacağı gibi konuların çoğu systemd üzerinden yönetiliyor. Bu yüzden pek çok ekip ek bir katmana ihtiyaç duymadan, doğrudan systemd unit dosyaları ile queue worker süreçlerini yönetmeyi tercih ediyor.
Basit Bir systemd Service Tanımı
Örnek bir Laravel queue worker service dosyasına bakalım. /etc/systemd/system/laravel-queue-default.service dosyasını oluşturalım:
[Unit]<br>Description=Laravel Queue Worker (default queue)<br>After=network.target<br><br>[Service]<br>Type=simple<br>User=www-data<br>WorkingDirectory=/var/www/myapp<br>ExecStart=/usr/bin/php artisan queue:work redis --queue=default --sleep=1 --max-time=3600 --tries=3<br>Restart=always<br>RestartSec=5<br>StandardOutput=append:/var/log/laravel-queue-default.log<br>StandardError=append:/var/log/laravel-queue-default-error.log<br><br>[Install]<br>WantedBy=multi-user.target
Servisi etkinleştirelim:
sudo systemctl daemon-reload<br>sudo systemctl enable laravel-queue-default<br>sudo systemctl start laravel-queue-default<br>sudo systemctl status laravel-queue-default
Bu yapı ile makine her açıldığında queue worker otomatik devreye girer, çöktüğünde yeniden başlar ve log’lar systemd tarafından yönetilir.
systemd Kullanırken Dikkat Edilecek Noktalar
- PHP sürümü ve yol: Birden fazla PHP sürümü yüklü ise, doğru binary yolunu kullanmayı unutmayın.
- Environment değişkenleri: .env içeriği genelde yeterlidir ama özel ortam değişkenlerine ihtiyaç varsa,
Environment=KEY=valuesatırları ekleyebilir veya ayrı bir environment dosyası kullanabilirsiniz. - Kaynak limitleri: systemd ile
MemoryMax,CPUQuotagibi ayarlarla queue worker süreçlerinin kaynak kullanımını sınırlandırabilirsiniz.
Cron işlerini de systemd timer ile yönetmek isterseniz, cron mu systemd timer mı rehberimizde detaylı anlattığımız gibi, schedule edilmiş görevleri de tek çatı altında toplamanız mümkün.
Supervisor mı systemd mi?
İki yaklaşımın da güçlü tarafları var. Özet bir karşılaştırma yapalım:
- Supervisor daha uygun olabilir:
- Birden çok proje için hızlıca worker tanımlamak istiyorsanız.
- Laravel dökümantasyonundaki örneklerle birebir ilerlemek istiyorsanız.
- Sunucu yönetimi ekibiniz Supervisor’a alışkınsa.
- systemd daha uygun olabilir:
- Ekstra bağımlılık istemiyor ve sadece Linux’un sunduklarıyla yetinmek istiyorsanız.
- Kaynak limitlerini, restart politikalarını, log’ları tek merkezden yönetmek istiyorsanız.
- DevOps tarafında zaten systemd ile standardize bir pratik benimsediyseniz.
DCHost tarafında yönetilen VPS ve dedicated sunucularda, müşterinin operasyon kültürüne göre iki yaklaşımı da görüyoruz. Küçük/orta Laravel projelerinde Supervisor, daha büyük ve karmaşık yapılarda ise systemd ağırlığını hissettiriyor.
Node.js Tüketiciler İçin PM2: Laravel ile Yan Yana
Pek çok ekip Laravel’i ana API ve panel katmanı olarak kullanırken, arka plandaki bazı işlerde Node.js tabanlı tüketicilere de yer veriyor. Örneğin Redis tabanlı bir kuyruğu hem Laravel hem de Node.js worker’ların tükettiği hibrit bir mimari düşünebilirsiniz. Bu noktada Node.js süreçlerini yönetmek için PM2 devreye giriyor.
PM2 ile Basit Worker Süreci
Örneğin Redis tabanlı bir kuyruğu dinleyen Node.js script’iniz olsun: worker.js.
npm install -g pm2<br>pm2 start worker.js --name myapp-node-worker<br>pm2 save<br>pm2 startup
Bu komutlar ile:
- worker.js arka planda bir servis gibi çalışır,
- PM2 çökünce yeniden başlatır,
- Sunucu yeniden açıldığında process otomatik ayağa kalkar.
Node.js uygulamalarını üretim ortamına taşırken PM2 ve systemd entegrasyonunu adım adım görmek isterseniz, Node.js’i canlıya alırken PM2 ve systemd kullanımı rehberimiz iyi bir referans olacaktır.
Laravel ve PM2’yi Aynı Kuyruğa Bağlamak
Redis tabanlı bir kuyruk kullanıyorsanız, Laravel tarafında Redis queue sürücüsünü, Node.js tarafında ise örneğin Bull, BullMQ gibi kütüphaneleri aynı Redis instance’ına bağlayarak hibrit tüketiciler oluşturabilirsiniz. Burada önemli olan:
- Her iş tipine ayrı queue (örneğin mail, sms, report) tahsis etmek,
- İşlerin hangi dilde (PHP/Node) çalışacağını net belirlemek,
- Retry politikasını ve idempotent davranışı her iki tarafta da tutarlı kılmak.
Bu sayede CPU ve IO yoğunluğu yüksek işleri Node.js tabanlı süreçlere kaydırırken, Laravel’in güçlü olduğu alanlarda PHP worker’ları kullanmaya devam edebilirsiniz.
Hangi Aracı Ne Zaman Seçmeli? Supervisor, systemd ve PM2 Karşılaştırması
Kısa bir karar matrisi üzerinden gidelim:
- Sadece Laravel, sadece PHP worker’lar:
- Küçük/orta ölçek: Supervisor çok pratik.
- Orta/büyük ölçek, kurumsal operasyon: systemd daha bütüncül.
- Laravel + Node.js karışık mimari:
- PHP worker’lar için Supervisor veya systemd,
- Node.js worker’lar için PM2,
- Hepsinin üzerinde iyi kurgulanmış log ve izleme katmanı.
- CI/CD ile entegre gelişmiş dağıtımlar:
- systemd servisleriyle
ExecReload,Deployscript’leri tanımlamak, - PM2 ile zero-downtime deploy senaryoları.
- systemd servisleriyle
VPS tarafında sıfır kesinti dağıtım, rollback ve benzeri konulara girmek istiyorsanız, VPS’e sıfır kesinti CI/CD nasıl kurulur rehberimizde anlattığımız systemd tabanlı dağıtım teknikleri bu mimariyle çok iyi örtüşüyor.
Loglama, İzleme ve Alarm: Kuyrukların Sağlığını Ölçmek
Arka plan işleri ile ilgili en büyük tehlike, sessizce bozulmalarıdır. HTTP istekleri genelde log’lara ve error monitoring araçlarına daha hızlı yansır; ancak queue worker’lar arka planda sessizce durabilir, takılabilir ya da hata verip kapatılabilir. DCHost tarafında sık gördüğümüz sorunlardan biri, kimsenin fark etmediği bir worker çökmesi sonrası biriken on binlerce job ve ani gecikmelerdir.
Log Yönetimi
Supervisor veya systemd kullanıyor olsanız da, şu prensiplere dikkat edin:
- Her queue grubuna ayrı log dosyası verin (örneğin
queue-mail.log,queue-report.log). - Log’ları
logrotateile düzenli döndürün; disk dolma problemlerini önlemek için VPS disk kullanımı ve logrotate rehberimizde anlattığımız pratikleri uygulayın. - Laravel iç logları ile sistem loglarını korele edebilmek için zaman damgalarını ve korelasyon ID’lerini tutarlı kullanın.
Metrik ve Alarm
Kuyruk sağlığını izlemek için şunlara bakmak iyi bir başlangıçtır:
- Her queue için bekleyen job sayısı
- Job’ların ortalama ve maksimum bekleme süresi
- Failed jobs metrikleri (saatlik/günlük artış)
- Worker sayısı ve CPU/RAM kullanımı
Basitten başlayıp zaman içinde olgunlaştırmak için, önce Prometheus ve Grafana ile VPS izleme rehberimizde anlattığımız temel node exporter metriklerini kurabilir; ardından Laravel tarafında job metriklerini Prometheus’a işleyerek daha ayrıntılı grafikler elde edebilirsiniz.
Güvenlik ve Kaynak Yönetimi Perspektifinden Kuyruklar
Arka plan işleriniz de sonuçta sunucuda çalışan süreçlerdir; dolayısıyla güvenlik ve kaynak yönetimi açısından web katmanı kadar önemlidir.
Kullanıcı, İzinler ve İzolasyon
- Queue worker süreçlerini root kullanıcı ile kesinlikle çalıştırmayın.
- Web sunucusunun kullandığı kullanıcı (www-data, nginx vs.) veya projeye özel açtığınız kısıtlı bir kullanıcı ile çalıştırın.
- Dosya izinlerini ve sahiplikleri doğru kurgulamak için Linux dosya izinleri rehberimizde anlattığımız prensipleri uygulayın.
CPU, RAM ve IO Kullanımı
Özellikle görsel işleme, PDF üretimi, rapor oluşturma gibi CPU ve disk ağırlıklı işler, yanlış yapılandırılmış worker sayılarıyla birleştiğinde tüm VPS’inizi kilitleyebilir. Şu pratikleri öneriyoruz:
- CPU çekirdek sayınız kadar veya biraz altında worker sayısı belirleyin.
- Ağır işler için ayrı kuyruk tanımlayın (örneğin
heavy) ve bu kuyruğu sınırlı sayıda worker ile tüketin. - systemd kullanıyorsanız,
CPUQuotaile worker servisinin maksimum CPU yüzdesini sınırlamayı düşünün. - Disk IO kullanımını izlemek için VPS kaynak kullanımı izleme rehberimizde anlattığımız iotop ve benzeri araçlarla periyodik kontroller yapın.
DCHost VPS Üzerinde Örnek Bir Kuyruk Mimarisi
Tüm bu anlattıklarımızı, orta ölçekli bir Laravel e-ticaret projesi için örnek bir DCHost VPS mimarisi üzerinden toparlayalım:
- Sunucu: 4 vCPU, 8 GB RAM, NVMe diskli bir DCHost VPS
- Uygulama: Laravel 10, Nginx + PHP-FPM
- Kuyruk Arka Ucu: Redis
- Worker Yönetimi: systemd (PHP) + PM2 (Node.js varsa)
Önerilen Queue Yapıları
queue=mail: Sipariş e-postaları, bildirimler. 2 worker.queue=report: Raporlama ve PDF işleri. 1 ağır worker.queue=realtime: Anlık stok güncelleme, entegrasyon callback’leri. 2 hızlı worker.
Her biri için ayrı systemd service dosyası oluşturup, her servise özel log dosyası, restart politikası ve gerekiyorsa CPU/RAM limitleri tanımlanabilir. Böylece mail kuyruğunda sorun yaşansa bile realtime işleri etkileyen worker’lar ayrı kalır.
Laravel uygulamanızı bu yapıyla birlikte DCHost VPS üzerinde ayağa kaldırma sürecinde, Laravel uygulamalarını VPS’te yayınlama rehberimizde anlattığımız Nginx, PHP-FPM ve dağıtım adımlarını takip edebilir, oradaki Horizon ve queue yapılarını bu yazıdaki süreç yönetimi pratikleri ile birleştirebilirsiniz.
Özet ve Yol Haritası: Arka Plan İşlerini Rayına Oturtmak
VPS üzerinde çalışan bir Laravel uygulamasında, arka plan işleri ve kuyruk yönetimi çoğu zaman ertelenen, ama sorun çıktığında en çok can yakan başlıklardan biri oluyor. Job’ları doğru tasarlamak, uygun kuyruk sürücüsünü seçmek, Supervisor veya systemd ile worker süreçlerini sağlam şekilde koşturmak, Node.js tarafında PM2 ile hibrit bir yapı kurmak ve tüm bunları loglama ile izleme katmanına bağlamak; projenizin olgunluk seviyesini doğrudan etkiliyor.
Pratik bir yol haritası çizelim:
- Önce uygulamanızdaki ağır işleri tespit edin, hepsini Laravel Queue job’larına taşıyın.
- Küçük ölçekli projelerde database, büyüyen projelerde Redis tabanlı queue yapısına geçmeyi planlayın.
- VPS üzerinde Supervisor veya systemd tercihine karar verin; tek bir yaklaşımda standardize olun.
- Her queue türü için ayrı worker grupları ve log dosyaları tanımlayın,
logrotateile disk kullanımını kontrol altına alın. - Prometheus/Grafana veya benzeri bir sistemle kuyruk metriklerini izlemeye başlayın; basit ama anlamlı alarmlar kurun.
DCHost olarak sağladığımız VPS, dedicated ve colocation altyapılarında, benzer kuyruk mimarilerini her ölçekte projede uyguluyoruz. Uygulamanız Laravel veya Node.js tabanlı olsun, arka plan işlerini güvenilir ve ölçeklenebilir şekilde yönetmek için bu yazıdaki adımları temel çerçeve olarak alabilirsiniz. İhtiyacınız olduğunda, doğru kaynak planlaması (CPU, RAM, NVMe disk ve ağ) için VPS kaynak planlama rehberimizde paylaştığımız hesaplama yöntemlerini de bu kuyruk mimarisiyle birlikte düşünmenizi öneririz. Böylece hem ön yüz, hem arka plan işler, hem de altyapı tarafı aynı anda dengede kalır.
