Rozproszone kolejki zadań (np. Celery) a skrypty crontab

92

Mam problem ze zrozumieniem celu „kolejek zadań rozproszonych”. Na przykład biblioteka selera w języku Python .

Wiem, że w selerze, frameworku Pythona, możesz ustawić okna czasowe dla funkcji do wykonania. Jednak można to również łatwo zrobić w linuksowej tabeli crontab skierowanej do skryptu Pythona.

O ile wiem, i pokazałem to na moich własnych aplikacjach internetowych django-seler, seler zużywa znacznie więcej pamięci RAM niż tylko ustawienie surowego pliku crontab. Różnica kilkuset MB dla stosunkowo małej aplikacji.

Czy ktoś może mi pomóc z tym rozróżnieniem? Być może ogólne wyjaśnienie, jak działają kolejki zadań / tabele crontab, byłoby również miłe.

Dziękuję Ci.

Lucas Ou-Yang
źródło

Odpowiedzi:

135

Zależy to od tego, co chcesz, aby wykonywały Twoje zadania, czy chcesz je rozprowadzać i jak chcesz nimi zarządzać.

Crontab jest w stanie wykonać skrypt co N interwałów. Działa, a następnie wraca. Zasadniczo otrzymujesz jedno wykonanie w każdym interwale. Możesz po prostu nakazać crontabowi wykonanie polecenia zarządzania django i uzyskanie dostępu do całego środowiska django, więc seler nie pomaga w tym.

To, co seler wnosi do stołu, za pomocą kolejki wiadomości, to zadania rozproszone. Wiele serwerów może dołączyć do puli pracowników i każdy może otrzymać element pracy bez obawy o podwójną obsługę. Możliwe jest również wykonanie zadania, gdy tylko będzie gotowe. W przypadku crona jesteś ograniczony do minimum jednej minuty.

Na przykład wyobraź sobie, że właśnie uruchomiłeś nową aplikację internetową i otrzymujesz setki rejestracji, które wymagają wysłania wiadomości e-mail do każdego użytkownika. Wysyłanie e-maila może zająć dużo czasu (względnie), więc decydujesz, że będziesz obsługiwać e-maile aktywacyjne za pośrednictwem zadań.

Gdybyś używał crona, musiałbyś upewnić się, że cron jest w stanie przetworzyć wszystkie e-maile, które mają być wysłane, co minutę. Jeśli masz kilka serwerów, musisz teraz upewnić się, że nie wysyłasz wielu e-maili aktywacyjnych do tego samego użytkownika - potrzebujesz jakiejś synchronizacji.

Z selerem dodajesz zadanie do kolejki. Możesz mieć kilku pracowników na serwer, więc przeskalowałeś już przed cronjob. Możesz także mieć kilka serwerów, co pozwala na jeszcze większe skalowanie. Synchronizacja jest obsługiwana jako część „kolejki”.

Państwo może używać jako zamiennik seler cron, ale to naprawdę nie jest jego podstawowym zastosowaniem. Służy do wyszukiwania zadań asynchronicznych w rozproszonym klastrze.

I oczywiście seler ma dużą listę funkcji , których nie ma w programie cron.

Josh Smeaton
źródło