Sunucuda Arka Plan İşlem Kuyrukları: PHP, Supervisor ve Redis ile Güvenli İşlem Yönetimi
Sunucuda Arka Plan İşlem Kuyrukları: PHP, Supervisor ve Redis ile Güvenli İşlem Yönetimi
Son Güncelleme: Mayıs 2026
Giriş: Modern web uygulamalarında yoğun işlem gerektiren görevleri arka plan kuyruğu (background job queue) ile yönetmek, kullanıcı deneyimini iyileştirir ve sunucu kaynaklarını verimli kullanır. Bu makalede PHP tabanlı işlerin kuyruğa alınması, Redis, Supervisor veya systemd ile tüketicilerin (workers) yönetimi, hata/yineleme (retry) stratejileri ve ölçekleme pratikleri ayrıntılı olarak ele alınacaktır.
İçindekiler
- Kısa Giriş: Neden Kuyruk?
- Mimari ve Roller
- Kuyruk Sürücüleri
- Queue Tüketici (Worker) Yazımı
- Process Yönetimi: Supervisor ve systemd
- Hata Yönetimi ve Retry Stratejileri
- Performans ve Ölçekleme
- Güvenlik ve İzinler
- Pratik Senaryolar ve Örnekler
- Karşılaştırma Tablosu
- Sıkça Sorulan Sorular
- Sonuç
Kısa Giriş: Neden Kuyruk?
Başlık: Kuyruk kullanmanın temel faydaları:
- Gecikme azaltma: Kullanıcı isteği sırasında ağır işlem yapılmaz; görev kuyruğa atılır.
- Hata izolasyonu: Başarısız görevler yeniden denemeye alınır, ana uygulama kesintiye uğramaz.
- Ölçeklenebilirlik: Worker sayısı arttırılarak işleme kapasitesi yatayda artırılabilir.
Mimari ve Roller
Mimari: Tipik bir kuyruğa dayalı mimari şu bileşenlerden oluşur:
- Producer: Görevi oluşturan uygulama (ör. HTTP endpoint).
- Queue Broker: Görevleri saklayan ve sıraya alan servis (ör. Redis, RabbitMQ).
- Worker (Consumer): Kuyruktan görevleri alıp işleyen arka plan süreçleri.
- Monitor: Görev durumunu, gecikmeyi ve hata oranlarını izleyen sistem (ör. Prometheus, özel dashboard).
İş akışı örneği
- HTTP isteği: Kullanıcı form gönderir.
- Producer: Uygulama görevi kuyruğa push eder.
- Broker: Görev sıraya alınır.
- Worker: Kuyruktan çeker, işler, sonuçları kaydeder veya hata durumunda retry politikasına göre hareket eder.
Kuyruk Sürücüleri
Popüler sürücüler:
- Redis: Hızlı, hafif ve yaygın; list/stream veri yapılarını kullanır.
- RabbitMQ: Gelişmiş routing, teslim garantileri ve plugin desteği sunar.
- Beanstalkd: Basit ve düşük gecikmeli kuyruğa uygun.
- Database queue: Kolay uygulanır ama yüksek yükte performans sınırlamaları olabilir.
Ne zaman hangi sürücü?
- Kısa süreli, yüksek hız: Redis veya Beanstalkd.
- İleri seviye teslim garantileri/routing: RabbitMQ.
- Basit küçük uygulamalar: Database queue (örn. MySQL) tercih edilebilir.
Queue Tüketici (Worker) Yazımı
PHP uygulamaları için worker yazarken dikkat edilecekler:
- Tek sorumluluk: Worker sadece bir görevin işlemesini yapmalı.
- Zaman aşımı: Her görevin mantıklı bir
timeoutdeğeri olmalı. - İdempotentlik (Tekrar çalıştırılabilirlik): Aynı görev birden fazla çalıştırılırsa veri tutarlılığı bozulmamalı.
Örnek basit PHP worker (Redis ile)
<?php
require 'vendor/autoload.php';
$redis = new Predis\Client();
while (true) {
$job = $redis->lpop('jobs');
if (!$job) { sleep(1); continue; }
$data = json_decode($job, true);
// İşleme
try {
// örnek işlem
processJob($data);
} catch (\Exception $e) {
// Hata: retry mantığı veya hata kuyruğuna gönder
$redis->rpush('jobs_failed', $job);
}
}
function processJob($data) {
// işlem detayları
}
Process Yönetimi: Supervisor ve systemd
Supervisor veya systemd ile worker süreçlerini yönetmek reliability (güvenilirlik) ve otomatik yeniden başlatma sağlar.
Supervisor örnek konfigürasyon
[program:php-worker]
command=/usr/bin/php /var/www/app/worker.php
process_name=%(program_name)s_%(process_num)02d
numprocs=4
autostart=true
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/supervisor/php-worker.log
systemd örnek unit dosyası
[Unit]
Description=PHP Queue Worker
After=network.target
[Service]
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/app/worker.php
[Install]
WantedBy=multi-user.target
Hata Yönetimi ve Retry Stratejileri
Hata yönetimi: Kuyruk sisteminde hataları uygun şekilde ele almak kritik öneme sahiptir.
- Dead-letter queue (DLQ): Belirli sayıda denemeden sonra başarısız görevler ayrı bir kuyruğa taşınır.
- Exponential backoff: Her denemede bekleme süresi artırılır.
- Alerting: DLQ veya hata oranı yükseldiğinde alarm üretin.
Retry stratejisi örneği
- 1-3 deneme: Kısa aralıklarla yeniden dener.
- 4-6 deneme: Artan gecikme (exponential backoff).
- >6 deneme: DLQ'ya gönder ve operasyon ekibini bilgilendir.
Performans ve Ölçekleme
Ölçekleme stratejileri:
- Worker scaling: CPU yoğunluğuna göre worker sayısını artırın/azaltın.
- Queue partitioning: Farklı iş tipleri için ayrı kuyruklar kullanın.
- Auto-scaling: İş yoğunluğuna göre VPS/VDS üzerinde otomatik ölçekleme.
Pratik ipuçları
- Izleme: Kuyruk uzunluğu, ortalama işleme süresi ve hata oranları izlenmeli.
- Worker izolasyonu: Yavaş görevleri farklı kuyruklara alarak diğer işleri etkilemesini engelleyin.
- Persistence: Eğer görevler kritikse, broker'ın veri kaybını önleyecek şekilde yapılandırın (ör. Redis persistence veya RabbitMQ durability).
Güvenlik ve İzinler
Güvenlik tedbirleri:
- İzinler: Worker süreçleri en az yetki prensibine göre çalışmalı (ör.
www-data). - Ağ erişimi: Broker yönetim portları (Redis 6379 vb.) sadece iç ağda veya TLS ile korunmalı.
- Veri hassasiyeti: Kuyruktaki veriler şifrelenmeli veya sadece işlenebilir minimum veri taşınmalı.
Örnek Redis erişim kısıtlama
# /etc/redis/redis.conf
bind 127.0.0.1
requirepass "GucLuParola123!"
# production için TLS ve firewall tavsiye edilir
Pratik Senaryolar ve Örnekler
Örnek 1: E-posta gönderimi kuyruğu
- Producer: Kullanıcı kayıt olurken e-posta gönderme isteğini kuyruğa atar.
- Worker: Kuyruktan mail görevini alır, SMTP ile gönderir, başarısızsa retry mekanizmasına bırakır.
Örnek 2: Resim işleme ve CDN upload
- Producer: Kullanıcı resim yükler; öncelikli olarak küçük boyutta dönüşüm kuyruğa verilir.
- Worker: Resmi işler, WebP/AVIF dönüştürür ve CDN originine yükler.
Komut örnekleri
Laravel için worker başlatma:
php artisan queue:work redis --sleep=3 --tries=3 --timeout=90
Supervisor reload:
supervisorctl reread
supervisorctl update
supervisorctl restart php-worker:*
Karşılaştırma Tablosu
| Özellik | Redis | RabbitMQ | Beanstalkd |
|---|---|---|---|
| Performans | Çok hızlı | Orta-yüksek | Hızlı |
| Routing / Exchange | Kısıtlı (Stream ile gelişir) | Gelişmiş | Basit |
| Dayanıklılık (Durability) | Konfigürasyona bağlı (AOF/RDB) | Yüksek | Orta |
| Kurulum/Operasyon | Kolay | Daha karmaşık | Çok basit |
Sıkça Sorulan Sorular
Arka plan kuyruğu nedir ve neden kullanmalıyım?
Arka plan kuyruğu, zaman alan işlemleri ana uygulama akışından ayırarak, isteklere hızlı yanıt verilmesini sağlayan bir mekanizmadır. Kullanıcı deneyimini iyileştirir ve sunucu kaynaklarını daha verimli kullanır.
Redis kuyruğunu production'da güvenli kullanmanın temel adımları nelerdir?
Redis için bind ayarını iç ağa veya localhost'a çekin, parola (AUTH) kullanın, mümkünse TLS uygulayın ve firewall ile erişimi kısıtlayın. Ayrıca persistence (AOF/RDB) ve yedekleme stratejisini belirleyin.
Kaç tane worker çalıştırmalıyım?
Worker sayısı, sunucunun CPU ve bellek kapasitesine bağlıdır. CPU yoğun işlerde genelde num_cpus veya num_cpus * 2 şeklinde başlayıp izleme ile ayarlamak en doğrusudur. I/O ağırlıklı işlerde daha fazla worker çalıştırabilirsiniz.
Supervisor ile systemd arasında tercih yaparken nelere dikkat etmeliyim?
systemd, dağıtımın yerleşik init sistemi olduğundan basit hizmetler için tercih edilir. Supervisor, çoklu process yönetimi ve kolay process loglama/daemonizasyon için daha kullanıcı dostudur. Büyük sistemlerde her ikisini de kullanım senaryonuza göre değerlendirin.
Worker'larda bellek sızıntısını nasıl tespit ederim?
Uzun süre çalışan worker'larda periyodik olarak bellek kullanımını ölçün ve belli bir limit aşıldığında süreci yeniden başlatacak mekanizma kurun. Örneğin Supervisor'da stopsignal ve autorestart ile kombinasyon kullanılabilir.
Sonuç
Bu rehberde arka plan işlem kuyruğu mimarisinin temel bileşenleri, PHP uygulamaları için worker yazımı, Supervisor ve systemd ile süreç yönetimi, hata/yineleme stratejileri, güvenlik ve ölçekleme pratikleri ele alındı. Uygulamanızın ihtiyaçlarına göre Redis veya başka bir broker seçip, izleme ve yedekleme ile destekleyerek güvenli ve ölçeklenebilir bir altyapı kurabilirsiniz.
Corelux üzerinden yüksek performanslı VPS/VDS çözümleri veya yönetilen hizmetler ile altyapınızı güçlendirebilirsiniz. Örneğin performans ve ölçekleme ihtiyaçlarınız için Türkiye VPS Sunucu veya yüksek kaynaklı Kiralık Sunucu seçeneklerini inceleyebilirsiniz. Ayrıca, kritik hizmetler için Yedekleme Hizmeti ve SSL Sertifikası hizmetlerimizden faydalanabilirsiniz.
Eğer isterseniz uygulamanıza özel bir kuyruk mimarisi taslağı ve maliyet/performans analizini Corelux mühendisleriyle planlayabilirim — hangi iş tiplerini kuyruğa almak istediğinizi belirtin, size adım adım bir öneri hazırlayayım.
Yazar
Boran BAR