2013-04-26 47 views
67

我无法理解“分布式任务队列”的用途。例如,python的celery library分布式任务队列(例如Celery)vs crontab脚本

我知道在芹菜python框架中,你可以为函数设置定时窗口来执行。但是,这也可以在针对python脚本的linux crontab中轻松完成。

据我所知,从我自己的django-celery webapps显示,芹菜消耗更多的RAM内存比只是设置一个原始的crontab。相对较小的应用程序几百MB差异。

有人可以帮助我这个区别?也许关于任务队列/ crontabs如何工作的高层次解释也很好。

谢谢。

回答

100

这取决于你想要你的任务做什么,如果你需要分配它们,以及你想如何管理它们。

crontab能够每N个间隔执行一次脚本。它运行,然后返回。基本上你会在每个时间间隔执行一次执行。你可以直接指定一个crontab来执行一个django管理命令,并且可以访问整个django环境,所以芹菜并不能真正帮助你。

芹菜带到桌子上,借助消息队列,是分配任务。许多服务器可以加入工作人员队伍,每个人都可以接收工作项目,而不用担心双重处理。一旦准备就绪,也可以执行任务。使用cron,你至少被限制在一分钟内。

举个例子,假设你刚刚推出了一个新的Web应用程序,并且你收到了数百个需要发送电子邮件给每个用户的注册信息。发送电子邮件可能需要很长时间(比较),因此您决定通过任务处理激活电子邮件。

如果您使用的是cron,您需要确保每分钟cron都能够处理所有需要发送的电子邮件。如果您有多台服务器,您现在需要确保您没有向同一用户发送多个激活电子邮件 - 您需要某种同步。

使用芹菜,您可以将任务添加到队列中。你可能每个服务器有几个工人,所以你已经在cronjob之前进行了缩放。您可能还有几台服务器,可以让您进一步扩展。同步作为“队列”的一部分进行处理。

可以使用芹菜作为cron替代品,但这不是真正的主要用途。它用于在分布式群集中挖掘异步任务。

当然,芹菜有一个big list of features cron没有。