Verteilte Aufgabenwarteschlangen (z. B. Sellerie) im Vergleich zu Crontab-Skripten

92

Ich habe Probleme, den Zweck von "verteilten Aufgabenwarteschlangen" zu verstehen. Zum Beispiel die Selleriebibliothek von Python .

Ich weiß, dass Sie in Sellerie, dem Python-Framework, zeitgesteuerte Fenster festlegen können, damit Funktionen ausgeführt werden. Dies kann jedoch auch problemlos in einer Linux-Crontab durchgeführt werden, die an ein Python-Skript gerichtet ist.

Und soweit ich weiß und aus meinen eigenen Django-Sellerie-Webanwendungen hervorgeht, verbraucht Sellerie viel mehr RAM-Speicher als nur das Einrichten einer rohen Crontab. Ein paar hundert MB Unterschied für eine relativ kleine App.

Kann mir bitte jemand bei dieser Unterscheidung helfen? Vielleicht wäre auch eine allgemeine Erklärung, wie Aufgabenwarteschlangen / Crontabs im Allgemeinen funktionieren, hilfreich.

Danke dir.

Lucas Ou-Yang
quelle

Antworten:

131

Es hängt davon ab, was Ihre Aufgaben tun sollen, ob Sie sie verteilen müssen und wie Sie sie verwalten möchten.

Eine Crontab kann alle N Intervalle ein Skript ausführen. Es läuft und kehrt dann zurück. Im Wesentlichen erhalten Sie in jedem Intervall eine einzelne Ausführung. Sie können einfach eine Crontab anweisen, einen Django-Verwaltungsbefehl auszuführen und Zugriff auf die gesamte Django-Umgebung zu erhalten, sodass Sellerie Ihnen dort nicht wirklich hilft.

Was Sellerie mit Hilfe einer Nachrichtenwarteschlange auf den Tisch bringt, sind verteilte Aufgaben. Viele Server können dem Pool von Mitarbeitern beitreten und erhalten jeweils ein Arbeitselement, ohne Angst vor doppelter Behandlung zu haben. Es ist auch möglich, eine Aufgabe auszuführen, sobald sie fertig ist. Mit cron sind Sie auf mindestens eine Minute beschränkt.

Stellen Sie sich beispielsweise vor, Sie haben gerade eine neue Webanwendung gestartet und erhalten Hunderte von Anmeldungen, für die eine E-Mail an jeden Benutzer gesendet werden muss. Das Senden einer E-Mail kann (vergleichsweise) lange dauern, sodass Sie entscheiden, dass Sie Aktivierungs-E-Mails über Aufgaben bearbeiten.

Wenn Sie cron verwenden, müssen Sie sicherstellen, dass jede Minute cron alle E-Mails verarbeiten kann, die gesendet werden müssen. Wenn Sie mehrere Server haben, müssen Sie jetzt sicherstellen, dass Sie nicht mehrere Aktivierungs-E-Mails an denselben Benutzer senden - Sie benötigen eine Art Synchronisierung.

Mit Sellerie fügen Sie der Warteschlange eine Aufgabe hinzu. Möglicherweise haben Sie mehrere Mitarbeiter pro Server, sodass Sie bereits vor einem Cronjob skaliert haben. Möglicherweise verfügen Sie auch über mehrere Server, mit denen Sie noch mehr skalieren können. Die Synchronisation wird als Teil der 'Warteschlange' behandelt.

Sie können Sellerie als Cron-Ersatz verwenden, aber das ist nicht wirklich seine primäre Verwendung. Es wird zum Auslagern asynchroner Aufgaben in einem verteilten Cluster verwendet.

Und natürlich hat Sellerie eine große Liste von Funktionen , die Cron nicht bietet.

Josh Smeaton
quelle