W przypadku moich projektów będę czuł się bardzo komfortowo dzięki collectidea/delayed_job w rails2 i 3. Nie znam beanstalkd, ale wkrótce spróbuję :-). Postępowałem zgodnie z sugestiami w dokumentacji resque. Zgłoszę to.
Resque vs DelayedJob
Jak wypada Resque w porównaniu z DelayedJob i dlaczego miałbyś wybrać jedną z nich?
- Resque obsługuje wiele kolejek
- DelayedJob obsługuje bardziej szczegółowe priorytety
- Pracownicy Resque są odporni na wycieki pamięci / wzdęcia
- Pracownicy DelayedJob są niezwykle proste i łatwe do modyfikacji
- Resque wymaga Redis
- DelayedJob wymaga ActiveRecord
- Resque może umieszczać w kolejce tylko obiekty JSONable Ruby jako argumenty
- DelayedJob może umieścić dowolny obiekt Ruby w swojej kolejce jako argumenty
- Resque zawiera aplikację Sinatra do monitorowania tego, co się dzieje
- DelayedJob może być odpytywany z poziomu Twojej aplikacji Rails, jeśli chcesz dodać interfejs
Jeśli zajmujesz się tworzeniem Railsów, masz już bazę danych i ActiveRecord. DelayedJob jest bardzo łatwy w konfiguracji i działa świetnie. GitHub używał go przez wiele miesięcy do przetwarzania prawie 200 milionów zadań.
Wybierz opcję Odpowiedz, jeśli:
- Potrzebujesz wielu kolejek
- Nie obchodzi cię / nie lubisz priorytetów liczbowych
- Nie musisz nigdy utrwalać każdego obiektu Rubiego
- Masz potencjalnie ogromne kolejki
- Chcesz zobaczyć, co się dzieje
- Oczekujesz wielu niepowodzeń / chaosu
- Możesz skonfigurować Redis
- Nie brakuje Ci pamięci RAM
Wybierz zadanie opóźnione, jeśli:
- Lubisz priorytety liczbowe
- Nie wykonujesz codziennie gigantycznej ilości prac
- Twoja kolejka pozostaje mała i zwinna
- Nie ma wielu niepowodzeń / chaosu
- Chcesz łatwo wrzucić cokolwiek do kolejki
- Nie chcesz konfigurować Redisa
Wybierz Beanstalkd, jeśli:
- Lubisz priorytety liczbowe
- Chcesz niezwykle szybkiej kolejki
- Nie chcesz marnować swojej pamięci RAM
- Chcesz obsłużyć dużą liczbę miejsc pracy
- Jesteś w porządku z obiektami JSONable Ruby w kolejce jako argumentami
- Potrzebujesz wielu kolejek
W żadnym wypadku Resque nie jest „lepszym” opóźnionym zadaniem, więc upewnij się, że wybierasz narzędzie, które jest najlepsze dla Twojej aplikacji.
Ładne porównanie szybkości zaplecza kolejkowania:
enqueue work
-------------------------------------------------
delayed job | 200 jobs/sec 120 jobs/sec
resque | 3800 jobs/sec 300 jobs/sec
rabbitmq | 2500 jobs/sec 1300 jobs/sec
beanstalk | 9000 jobs/sec 5200 jobs/sec
Miłego dnia!
PS Istnieje RailsCast o resque, Delayed Job (wersja poprawiona) i Beanstakld. Zajrzyj!
PS. Moim ulubionym wyborem jest teraz Sidekiq (bardzo prosty, szybki i wydajny do prostych zadań), spójrz na tę stronę w celu porównania.