Daha iyi bir Türkiye mümkün! Türkiye'nin girişimcilik ve inovasyon topluluğu·2018'den beri

Yazılım Geliştirme

/yazilim

Fikirden çalışan ürüne yazılımın her hali: web, backend, veritabanı, mimari kararlar, kod kalitesi ve araçlar. Dil ve framework fark etmez; yazan herkesin ortak kanalı.

#yazılım geliştirme akışına dön
@damon · 11 gün önce

Küçük işletme yazılımında zamanlanmış işler: cron ne zamana kadar yeter, kuyruğa ne zaman geçmeli?

Yaklaşık sekiz yıldır küçük işletmelere yazılım yapıyorum: bir oto yedek parçacının stok sistemi, iki diyetisyenin randevu paneli, bir toptancının cari takibi gibi işler. Hepsinde arka planda çalışan işler var. Gece stok senkronizasyonu, randevudan bir gün önce SMS hatırlatması, ay sonu ekstre e-postası. Bunların hepsini yıllardır sunucudaki cron ile çalıştırıyorum ve şimdiye kadar idare etti.

Son iki ayda işler değişti. Toptancı müşterim pazaryerlerine de satmaya başladı ve fiyat güncellemesi artık günde bir değil saatte bir çalışmak zorunda. Güncelleme bazen bir saatten uzun sürüyor ve bir sonraki cron tetiklendiğinde ilki hâlâ çalışıyor. İki kez aynı ürüne çakışan fiyat yazıldı. Geçici çözüm olarak dosya kilidi koydum, ikinci süreç kilidi görünce çıkıyor. Bir de pazaryeri API'si zaman zaman hata dönüyor ve cron işi o noktada ölüyor; tekrar denemeyi kendim yazmam gerekti.

Şimdi kendime soruyorum: bu noktada bir iş kuyruğuna geçmenin zamanı geldi mi? Kafamdaki seçenekler şunlar. Birincisi, Redis üzerine kurulu bir kuyruk kütüphanesi kullanmak. İkincisi, zaten PostgreSQL kullandığım için veritabanı tablosunu kuyruk gibi kullanan bir çözüm. Üçüncüsü, hiçbirine dokunmayıp cron'u daha akıllı hale getirmek: kilit, tekrar deneme, durum tablosu.

Benim tereddüdüm bakım yükü. Bu müşterilerin hiçbirinde ayrı bir sistem yöneticisi yok, sunucuyla ben ilgileniyorum. Redis eklemek demek izlenecek bir servis daha, yedeklenecek bir şey daha demek. Öte yandan kendi yazdığım tekrar deneme ve kilit mekanizması da zamanla büyüyüp bir kuyruğa benzemeye başladı zaten, sadece daha kötü bir kuyruğa.

Benzer ölçekte çalışan arkadaşlar nerede çizgi çekiyor? Günde kaç iş, kaç farklı iş türü olunca kuyruğa geçtiniz? Ya da hâlâ cron'la ilerleyip pişman olmayan var mı?
12 2 yorum
Yorumlar (2)
@kodkedisi · 11 gün önce 3
Zaten PostgreSQL varsa ikinci seçenekle başlardım. SELECT ... FOR UPDATE SKIP LOCKED ile birden fazla işçinin aynı satırı almasını engelleyen basit bir tablo kuyruğu, senin ölçeğinde rahat yeter ve yeni bir servis eklemez. İş durumu, deneme sayısı ve son hata mesajı aynı tabloda durunca müşteriye neyin neden çalışmadığını göstermek de kolaylaşıyor.
@endof · 11 gün önce 4
Çizgiyi iş sayısında değil, işin yeniden denenebilir olup olmadığında çekiyorum. Bir iş iki kez çalıştığında zarar veriyorsa önce onu idempotent yapmak gerekiyor, hangi altyapıyı seçersen seç. Fiyat güncellemesinde ürün başına son güncelleme zamanını tutup eskisini ezmemek bu açıdan kuyruktan daha önemli olabilir.
Tanıtım videosu · 1 dk

inovanadolu'yu 1 dakikada tanı

Kanallar, sözlük, İlham blogu, kişilik testleri ve 140'tan fazla ücretsiz araç. Üretenlerin buluşma noktasında neler olduğunu kısaca izle.