Dağıtılmış görev kuyrukları (Örn. Kereviz) ve crontab betikleri


93

'Dağıtılmış görev kuyruklarının' amacını anlamakta güçlük çekiyorum. Örneğin, python'un kereviz kitaplığı .

Python çerçevesi olan kerevizde, işlevlerin çalıştırılması için zamanlanmış pencereler ayarlayabileceğinizi biliyorum. Ancak, bu aynı zamanda bir python betiğine yönlendirilmiş bir linux crontab'da da kolayca yapılabilir.

Ve bildiğim kadarıyla ve kendi django-kereviz web uygulamalarımdan da görüldüğü gibi, kereviz, ham bir crontab kurmaktan çok daha fazla RAM belleği tüketiyor. Nispeten küçük bir uygulama için birkaç yüz MB fark.

Lütfen biri bana bu ayrım konusunda yardım edebilir mi? Belki de görev kuyruklarının / crontab'lerin genel olarak nasıl çalıştığına dair üst düzey bir açıklama da güzel olurdu.

Teşekkür ederim.

Yanıtlar:


136

Görevlerinizin ne yapmasını istediğinize, dağıtmanız gerekip gerekmediğine ve bunları nasıl yönetmek istediğinize bağlıdır.

Bir crontab, her N aralıkta bir komut dosyası çalıştırabilir. Çalışır ve sonra geri döner. Esasen, her aralıkta tek bir yürütme elde edersiniz. Bir django yönetim komutunu yürütmek ve tüm django ortamına erişmek için bir crontab'ı yönetebilirsiniz, böylece kereviz gerçekten size yardımcı olmaz.

Bir mesaj kuyruğu yardımıyla kerevizin masaya getirdiği şey, dağıtılmış görevlerdir. Birçok sunucu, çalışan havuzuna katılabilir ve her biri, çift işlem yapma korkusu olmadan bir çalışma öğesi alabilir. Bir görevi hazır olur olmaz yürütmek de mümkündür. Cron ile minimum bir dakika ile sınırlandırılırsınız.

Örnek olarak, yeni bir web uygulaması başlattığınızı ve her kullanıcıya bir e-posta gönderilmesini gerektiren yüzlerce kayıt aldığınızı hayal edin. E-posta göndermek uzun zaman alabilir (karşılaştırmalı olarak), bu nedenle görevler aracılığıyla etkinleştirme e-postalarını yönetmeye karar verirsiniz.

Eğer cron kullanıyorsanız, her dakika cron'un gönderilmesi gereken tüm e-postaları işleyebildiğinden emin olmanız gerekir. Birden fazla sunucunuz varsa, aynı kullanıcıya birden fazla aktivasyon e-postası göndermediğinizden emin olmanız gerekir - bir tür senkronizasyona ihtiyacınız vardır.

Kerevizle kuyruğa bir görev eklersiniz. Sunucu başına birkaç işçiniz olabilir, bu nedenle zaten bir cronjob'tan önce ölçeklendirmişsinizdir. Daha da fazla ölçeklendirmenize olanak tanıyan birkaç sunucunuz da olabilir. Senkronizasyon, "sıranın" bir parçası olarak ele alınır.

Sen edebilir bir cron yerine kereviz kullanmak ama bu gerçekten birincil kullanımı değil. Eşzamansız görevleri dağıtılmış bir küme üzerinde toplamak için kullanılır.

Ve tabii ki kerevizin cron'un sahip olmadığı büyük bir özellik listesi var .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.