Asenkron işlerin çalıştırılması amacıyla bir veritabanına devam eden delayed_job
ve background_job
gibi mücevherleri gerçekten sevmiyorum. Sadece bana kirli görünüyor. Geçici şeyler bir veritabanına ait değil.
Büyük ölçeklenebilirlik gereksiniminiz olmadığında bile eşzamansız görevlerle uğraşmak için ileti kuyrukları hayranıyım. Gördüğüm gibi, mesaj kuyrukları karmaşık sistemler için ideal "lingua franca". Bir ileti kuyruğu ile, çoğu durumda, oluşturduğunuz şeyde yer alan teknolojiler veya dillerle ilgili hiçbir kısıtlama yoktur.Düşük eşzamanlılık mesaj kuyruğu kullanımının faydaları, entegrasyonun her zaman büyük bir acı olduğu bir “girişimci” ortamda muhtemelen en dikkat çekicidir. Ek olarak, eşzamansız iş akışınız birden çok adımı içerdiğinde mesaj sıraları idealdir. RabbitMQ benim kişisel favorim.
Örneğin, bir arama motoru oluşturmaya ediyoruz senaryoyu düşünün. İnsanlar dizine eklenecek URI'ları gönderebilir. Açıkçası, istekte bulunan sayfayı almak ve dizine eklemek istemezsiniz. Böylece bir ileti sırasının etrafında oluşturursunuz: Form gönderme hedefi, URI'yi alır, dizinlenecek mesaj sırasına atar. Bir sonraki kullanılabilir örümcek süreci sırayı URI'den çıkarır, sayfayı alır, tüm bağlantıları bulur, bilinmediklerinde her birini sıraya geri iter ve içeriği önbelleğe alır. Son olarak, önbelleğe alınan içerikle başa çıkmak için dizinleyici işlemi için ikinci bir sıraya yeni bir mesaj gönderilir. Dizinleyici işlemi, bu iletiyi sıradan çıkarır ve önbelleğe alınan içeriği dizinler. Elbette basitleştirilmiş - arama motorları çok iş, ama sen fikir edin.
Gerçek artalanlara gelince, açıkçası, kendi kütüphaneme (ChainGang) kısmi yapıyorum, fakat bu sadece Kernel.fork() etrafında bir kurgu. Bu size kurulum ve göz atma koduyla başa çıkmak için uygun bir yer sunuyor. Ayrıca henüz çok bitmedi. Daemon parçası, mesaj kuyruğundan çok daha az önemli.
Rails ortamı ile ilgili olarak, muhtemelen, bu, okuyucu için bir alıştırma olarak muhtemelen en iyisidir, çünkü bellek kullanımı uzun süreli süreçte önemli bir faktör olacak. Yapmak zorunda olmadığınız hiçbir şeyi yüklemek istemezsiniz. Bu arada, DataMapper'ın ActiveRecord'un poposunu kulağa doğru sürdüğü bir alan. Ortam başlatma iyi belgelenmiştir ve tüm kit ve caboodle'ı daha gerçekçi hale getiren çok daha az bağımlılık vardır.
Cron + komisyonu hakkında beğenmediğim tek şey, komisyonun standart çıktıya baskı yapmanın neredeyse garantisidir ve cron işleriniz çıktı aldığında cron aşırı derecede konuşkan olma eğilimindedir. Tüm cron görevlerimi uygun şekilde adlandırılmış bir dizine koymayı, sonra bunları saran bir komisyon görevi yapmayı, böylece bunları manuel olarak çalıştırmanın önemsiz olmasını seviyorum. Komisyonun bunu yapması utanç verici, çünkü bağımlılıklardan faydalanma seçeneğini tercih ederim. Her durumda, cronu cron ile çalıştırmak yerine doğrudan komut dosyalarına yönlendirirsiniz.
Şu anda yoğun asenkron işlemlere dayanan bir web uygulaması oluşturmanın tam ortasındayım ve şunu söylemeliyim ki, Rails'i kullanmayacağımı çok sevindim.
Yehuda bu cevabı kabul ederken, diğer insanlar için en iyi olmak için en iyi olanı düşünmüyorum. Korkunç bir sysadmin olarak benim önceliklerim sysadmin görevlerini azaltmaktır :) Eğer daha fazla beceriniz varsa veya daha yüksek bir performans çözümüne ihtiyacınız varsa, her şeyden önce daha ezoterik kuyruk sistemlerinden birini deneyin. –