2013-04-26 15 views
67

Non riesco a capire lo scopo delle "code di attività distribuite". Ad esempio, python celery library.Code attività distribuite (ad esempio Celery) e script crontab

So che in celery, il framework python, è possibile impostare le finestre temporizzate affinché le funzioni vengano eseguite. Tuttavia, questo può anche essere fatto facilmente in un crontab di Linux diretto ad uno script python.

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

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

Grazie.

risposta

100

Dipende da ciò che si desidera eseguire, se è necessario distribuirli e come si desidera gestirli.

Un crontab è in grado di eseguire uno script ogni N intervalli. Funziona e quindi restituisce. In sostanza si ottiene una singola esecuzione ad ogni intervallo. Potresti semplicemente dirigere un crontab per eseguire un comando di gestione di django e ottenere l'accesso all'intero ambiente di Django, quindi il sedano non ti aiuta veramente lì.

Ciò che il sedano porta in tavola, con l'aiuto di una coda di messaggi, è un'attività distribuita. Molti server possono unirsi al gruppo di lavoratori e ognuno riceve un oggetto di lavoro senza timore di una doppia gestione. È 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 ricevi centinaia di registrazioni che richiedono l'invio di una e-mail a ciascun utente. L'invio di un'e-mail potrebbe richiedere molto tempo (comparativamente), pertanto decidi che gestirai le e-mail di attivazione tramite le attività.

Se si utilizza cron, è necessario assicurarsi che ogni minuto cron sia in grado di elaborare tutte le e-mail che devono essere inviate. Se hai diversi server ora devi assicurarti di non inviare più e-mail di attivazione allo stesso utente - hai bisogno di un qualche tipo di sincronizzazione.

Con il sedano, si aggiunge un'attività alla coda. Potresti avere diversi lavoratori per server, quindi hai già eseguito il ridimensionamento prima di un cronjob. Potresti anche avere diversi server che ti permettono di scalare ancora di più. La sincronizzazione viene gestita come parte della 'coda'.

È possibile può utilizzare il sedano come sostituto di cron ma non è proprio il suo uso principale. Viene utilizzato per l'agricoltura di attività asincrone su un cluster distribuito.

E, naturalmente, il sedano ha un big list of features che cron non lo fa.

Problemi correlati