PHP Worker Sistemi Kurulumu
PHP projelerinde özellikle yüksek trafik veya zaman alıcı işlemler söz konusu olduğunda, geleneksel senkron işlem yapma modeli yetersiz kalabilir. Bu noktada, "worker" sistemi devreye girer; yani, belirli görevleri arka planda bağımsız çalışan süreçlere devrederek uygulama performansını ve yanıt verme hızını artırmak mümkün hale gelir. Bu yazıda, PHP kullanarak temel bir worker sistemi kurulumunu ve uygulama örneklerini detaylandıracağım.
İlk olarak, worker sistemlerinin temel mantığını anlamak önemlidir. Bu sistemler genellikle mesaj kuyruğu teknolojileri (Redis, RabbitMQ vb.) ile iletişim kurar. PHP tarafında ise, worker scriptleri sürekli çalışan ve kuyruktan görevleri alan, işleyen bağımsız süreçler olarak yapılandırılır. Bu sayede, örneğin büyük dosya işlemleri, API çağrıları veya e-posta gönderme gibi zaman alan işlemler, ana uygulamadan ayrılarak arka planda güvenle yürütülebilir.
Kurulum aşamasında, öncelikle mesaj kuyruğu teknolojisini seçmek gerekir. Redis, PHP ile entegrasyonu kolay ve performans açısından yeterlidir. Redis kurulumunu yaptıktan sonra, PHP'den Redis'e bağlanmak için
php-redis uzantısını kullanmak tercih edilir. Ardından, görevleri tanımlayan ve kuyruklara gönderen API ya da scriptleri tasarlamalısınız. Worker scriptleri ise, sürekli döngüde kuyruktan görevleri çeken ve işlem yapan bağımsız PHP dosyalarıdır.
Örnek olarak, Redis kullanılarak basit bir worker sistemi şöyle yapılandırılabilir:
- Görev gönderen kod (örneğin, e-posta göndermeyi planlayan bir API):
1234567891011121314
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$task = json_encode([
'type' => 'send_email',
'to' => 'kullanici@ornek.com',
'subject' => 'Test',
'body' => 'Merhaba, bu bir test mesajıdır.'
]);
$redis->lPush('task_queue', $task);
- Worker scripti:
123456789101112131415161718192021
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
while (true) {
$taskJson = $redis->BRPop('task_queue', 0);
$taskData = json_decode($taskJson[1], true);
if ($taskData['type'] === 'send_email') {
// E-posta gönderme fonksiyonu çağrısı
sendEmail($taskData['to'], $taskData['subject'], $taskData['body']);
}
// Diğer görev türleri eklenebilir
}
function sendEmail($to, $subject, $body) {
// E-posta gönderim kodu
mail($to, $subject, $body);
}
Bu temel yapı, yüksek trafikli uygulamalarda görevleri ana işlemden ayırarak sistem stabilitesini ve hızını artırır. Ayrıca, worker'ların sayısını artırmak veya farklı görev kategorilerine göre worker'lar tasarlamak ölçeklenebilirliği sağlar.
Sonuç olarak, PHP tabanlı worker sistemi kurarken, mesaj kuyruğu teknolojisinin seçimi, worker scriptlerinin tasarımı ve sistemin ölçeklenebilirliği üzerinde dikkatli planlama yapmak gerekir. Bu yapı, uygulama performansını önemli ölçüde artırırken, bakım ve yönetim açısından da avantaj sağlar.