Arka Planda Neler Oluyor? 'Scheduled Tasks' (Zamanlanmış Görevler) Nasıl Çalışır?

3 min read | Edit on GitHub

Yazılım dünyasında kullanıcı arayüzü ne kadar akıcı olursa olsun, bir sistemin gerçek gücü arka planda (background) sessizce ve kusursuzca çalışan mekanizmalarında gizlidir. Her ayın ilk günü kesilen faturalar, gece saat 03:00’te çalışan veritabanı yedeklemeleri veya bir kullanıcının aboneliği bittiğinde erişiminin otomatik kesilmesi… Tüm bunlar Scheduled Tasks (Zamanlanmış Görevler) sayesinde gerçekleşir.

Peki ama bu sistemler saatin geldiğini nasıl anlar? Sistem yoğun trafik altındayken bu görevler nasıl kaybolmadan işlenir? Basit bir “zamanlayıcı” olmanın çok ötesine geçen bu yapının anatomisini inceleyelim.

Bir Zamanlanmış Görevin Anatomisi

Modern ve ölçeklenebilir bir arka plan görev sistemi, birbirini tamamlayan üç ana yapı taşı üzerine inşa edilir:

1. Scheduler (Zamanlayıcı) - Tetikleyici Güç

Sistemin saat ve takvimden sorumlu beynidir. Belirlenen zaman kurallarını sürekli kontrol eder ve vakti gelen görevleri başlatır.

  • Görevi: Zamanı takip etmek ve doğru an geldiğinde görevin çalışması için sinyal (event) üretmektir. Genellikle CRON ifadeleri (örn: 0 0 * * * - her gece yarısı) kullanılarak yapılandırılır.
  • Metafor: Bir fabrikadaki mesai zilini çalan veya “Şimdi üretim bandını başlatın” diyen vardiya amiri.

Scheduler

2. Message Broker / Queue (Kuyruk) - Bekleme Odası

Sistemin hafızası ve düzenleyicisidir. Zamanlayıcı “Bu iş yapılacak” dediğinde, iş doğrudan yapılmaz; önce bir kuyruğa yazılır.

  • Görevi: Vakti gelen görevleri güvenli bir şekilde saklamak, kaybolmalarını önlemek ve sıraya koymaktır. Redis, RabbitMQ veya PostgreSQL gibi yapılar bu işi üstlenebilir.
  • Metafor: Restoran mutfağındaki sipariş fişlerinin asıldığı pano. Garson siparişi yazar (Scheduler), aşçı müsait olana kadar fiş panoda bekler (Queue).

Queue

3. Worker (İşçi / Yürütücü) - Aksiyon

Sistemin kas gücüdür. Kuyrukta bekleyen işi alıp fiziksel olarak (CPU üzerinde) çalıştıran kod parçasıdır.

  • Görevi: Kuyruktan görevi çekmek, gerekli veritabanı işlemlerini yapmak, API çağrılarını gerçekleştirmek ve işlem bitince “Ben bu işi tamamladım” (ACK) sinyali göndermektir.
  • Metafor: Panodaki fişi alıp yemeği bizzat pişiren aşçı.

Worker


Sistem Arka Planda Gerçekte Nasıl Çalışır?

Bir “Scheduled Task”, kod bloğunuza yazdığınız basit bir anotasyondan çok daha karmaşık bir yaşam döngüsüne sahiptir:

Scheduled Task Mimarisi

  1. Zamanın Gelmesi (Tick): İşletim sisteminin saati veya uygulamanın iç saati döngüyü kontrol eder. Şartlar sağlanıyorsa Scheduler uyanır.
  2. Enqueue (Kuyruğa Atma): Scheduler, sistemi bloklamamak için görevin detaylarını içeren bir mesajı kuyruğa bırakır.
  3. Locking (Kilitleme): Dağıtık sistemlerde, aynı görevin iki farklı sunucu tarafından aynı anda yapılmasını engellemek için bir “Lock” mekanizması devreye girer.
  4. Processing & Acknowledgment: Worker görevi bitirince kuyruğa “Tamamlandı” sinyali gönderir ve görev listeden silinir. Eğer hata alınırsa, sistem “Retry” (Tekrar Dene) mekanizmasını çalıştırır.

Farklı Zamanlama Yaklaşımları

Mimarinin TipiKullanılan AraçlarNe Zaman Kullanılmalı?
OS SeviyesiLinux Cron JobsBasit scriptler ve sistem bakımları için.
Uygulama SeviyesiSpring @Scheduled, Node-cronTek instance çalışan, düşük riskli işler için.
Dağıtık MimariCelery, Quartz, BullMQKritik finansal işlemler ve yüksek ölçekli projeler için.

Kritik Mühendislik Detayları

Bir zamanlanmış görev sistemi kurarken şu iki kavram hayati önem taşır:

  • Idempotency (Eşetkisellik): Bir görev (örneğin e-posta gönderme) yanlışlıkla iki kez tetiklenirse, sistem bunu fark etmeli ve kullanıcıya aynı e-postayı iki kez atmamalıdır.
  • Dead Letter Queue (DLQ): Sürekli hata veren görevler sonsuz döngüye girmemesi için “DLQ” denilen ayrı bir alana alınır. Bu sayede yazılımcı, hatanın nedenini manuel olarak inceleyebilir.

Sonuç

Zamanlanmış görevler, modern yazılım mimarilerinin “kalp atışıdır”. Doğru kurgulanmış bir Scheduler-Queue-Worker yapısı, uygulamanızın sadece anlık isteklere cevap veren bir bot değil, kendi kendine yetebilen otonom bir sistem olmasını sağlar.


İletişim

Sistem mimarileri veya ölçeklenebilir backend tasarımları hakkında sorularınız varsa email yoluyla bana ulaşabilirsiniz.

Share this post on: