Filas de tarefas distribuídas (Ex. Celery) vs scripts crontab

92

Estou tendo problemas para entender o propósito das 'filas de tarefas distribuídas'. Por exemplo, a biblioteca de aipo do python .

Eu sei que no aipo, o framework Python, você pode definir janelas temporizadas para que as funções sejam executadas. No entanto, isso também pode ser feito facilmente em um crontab do Linux direcionado a um script python.

E, pelo que eu sei, e mostrado pelos meus próprios webapps django-aipo, o aipo consome muito mais memória RAM do que apenas configurar um crontab bruto. Poucas centenas de MB de diferença para um aplicativo relativamente pequeno.

Alguém pode me ajudar com essa distinção? Talvez uma explicação de alto nível de como as filas de tarefas / crontabs funcionam em geral também seja bom.

Obrigado.

Lucas ou-yang
fonte

Respostas:

131

Depende do que você deseja que suas tarefas façam, se você precisa distribuí-las e como deseja gerenciá-las.

Um crontab é capaz de executar um script a cada N intervalos. Ele é executado e depois retorna. Essencialmente, você obtém uma única execução a cada intervalo. Você poderia simplesmente direcionar um crontab para executar um comando de gerenciamento do django e obter acesso a todo o ambiente do django, então o aipo realmente não o ajuda nisso.

O que o aipo traz para a mesa, com a ajuda de uma fila de mensagens, são tarefas distribuídas. Muitos servidores podem se juntar ao pool de trabalhadores e cada um recebe um item de trabalho sem medo de manipulação dupla. Também é possível executar uma tarefa assim que ela estiver pronta. Com o cron, você está limitado a um mínimo de um minuto.

Por exemplo, imagine que você acabou de lançar um novo aplicativo da web e está recebendo centenas de inscrições que exigem o envio de um e-mail para cada usuário. Enviar um e-mail pode levar muito tempo (comparativamente), então você decide que vai lidar com os e-mails de ativação por meio de tarefas.

Se você estiver usando o cron, precisará garantir que a cada minuto o cron seja capaz de processar todos os e-mails que precisam ser enviados. Se você tiver vários servidores, agora precisa se certificar de que não está enviando vários emails de ativação para o mesmo usuário - você precisa de algum tipo de sincronização.

Com o aipo, você adiciona uma tarefa à fila. Você pode ter vários trabalhadores por servidor, então você já escalou antes de um cronjob. Você também pode ter vários servidores que permitem escalar ainda mais. A sincronização é tratada como parte da 'fila'.

Você pode usar o aipo como um substituto do cron, mas esse não é realmente seu uso principal. Ele é usado para distribuir tarefas assíncronas em um cluster distribuído.

E, claro, o aipo tem uma grande lista de recursos que o cron não possui .

Josh Smeaton
fonte