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 - Corelux
12 Haz 2026
Paylaş:

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?

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

  1. HTTP isteği: Kullanıcı form gönderir.
  2. Producer: Uygulama görevi kuyruğa push eder.
  3. Broker: Görev sıraya alınır.
  4. 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 timeout değ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. 1-3 deneme: Kısa aralıklarla yeniden dener.
  2. 4-6 deneme: Artan gecikme (exponential backoff).
  3. >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

Chat on WhatsApp