Code di attività distribuite (es. Celery) vs script crontab


92

Ho problemi a capire lo scopo delle "code di attività distribuite". Ad esempio, la libreria di sedano di Python .

So che in celery, il framework Python, puoi impostare finestre temporizzate per l'esecuzione delle funzioni. Tuttavia, ciò può anche essere fatto facilmente in un crontab per Linux diretto a uno script python.

E per quanto ne so, e mostrato dalle mie webapp django-celery, il sedano consuma molta più memoria RAM rispetto alla semplice configurazione di un crontab grezzo. Poche centinaia di MB di differenza per un'app relativamente piccola.

Qualcuno può aiutarmi con questa distinzione? Forse sarebbe utile anche una spiegazione di alto livello di come funzionano le code / crontab delle attività in generale.

Grazie.

Risposte:


133

Dipende da cosa vuoi che facciano i tuoi compiti, se hai bisogno di distribuirli e come vuoi gestirli.

Un crontab è in grado di eseguire uno script ogni N intervalli. Funziona e poi ritorna. Essenzialmente ottieni una singola esecuzione ogni intervallo. Potresti semplicemente indirizzare un crontab per eseguire un comando di gestione django e ottenere l'accesso all'intero ambiente django, quindi il sedano non ti aiuta davvero.

Ciò che il sedano porta in tavola, con l'aiuto di una coda di messaggi, sono le attività distribuite. Molti server possono unirsi al pool di lavoratori e ciascuno riceve un oggetto di lavoro senza timore di una doppia manipolazione. È anche possibile eseguire un'attività non appena è pronta. Con cron, sei limitato a un minimo di un minuto.

Ad esempio, immagina di aver appena lanciato una nuova applicazione web e di ricevere centinaia di iscrizioni che richiedono l'invio di un'e-mail a ciascun utente. L'invio di un'e-mail potrebbe richiedere molto tempo (relativamente), quindi decidi di gestire le e-mail di attivazione tramite attività.

Se stavi usando cron, dovresti assicurarti che ogni minuto cron sia in grado di elaborare tutte le email che devono essere inviate. Se disponi di più server, ora devi assicurarti di non inviare più email di attivazione allo stesso utente: hai bisogno di un qualche tipo di sincronizzazione.

Con il sedano, aggiungi un'attività alla coda. Potresti avere diversi worker per server, quindi hai già scalato prima di un cronjob. Potresti anche avere diversi server che ti consentono di scalare ancora di più. La sincronizzazione viene gestita come parte della "coda".

È possibile utilizzare il sedano come una sostituzione cron, ma che non è proprio il suo utilizzo primario. Viene utilizzato per coltivare attività asincrone in un cluster distribuito.

E, naturalmente, il sedano ha un lungo elenco di funzionalità che cron non ha.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.