我很难理解"分布式任务队列"的目的。例如,python的芹菜库。
我知道在python框架中,你可以设置函数执行的时间窗口。但是,这也可以在指向python脚本的linux crontab中轻松完成。
据我所知,从我自己的django-芹菜web应用程序中可以看出,芹菜比仅仅设置一个原始的crontab消耗更多的RAM内存。几百MB的差异对于一个相对较小的应用程序。
有人能帮我区分一下吗?也许对任务队列/crontab的工作原理进行一个高层次的解释也会很好。谢谢。
这取决于你想让你的任务做什么,如果你需要分配它们,以及你想如何管理它们。
crontab能够每N个间隔执行一个脚本。它运行,然后返回。基本上每个间隔只执行一次。你可以直接使用crontab命令来执行django管理命令并访问整个django环境,所以芹菜并不能真正帮助你。
在消息队列的帮助下,芹菜带来的是分布式任务。许多服务器可以加入工作池,并且每个服务器都可以接收一个工作项,而不必担心双重处理。也可以在任务准备好后立即执行。使用cron,您可以将其限制为至少一分钟。作为一个例子,假设你刚刚启动了一个新的web应用程序,你收到了数百个注册,需要向每个用户发送电子邮件。发送电子邮件可能需要很长时间(相对而言),所以你决定通过任务来处理激活电子邮件。
如果您正在使用cron,您需要确保cron每分钟都能够处理所有需要发送的电子邮件。如果你有几台服务器,你现在需要确保你没有向同一个用户发送多封激活邮件——你需要某种同步。
对于芹菜,您将任务添加到队列中。每台服务器可能有几个worker,因此您已经在cronjob之前进行了扩展。您还可以有多个服务器,以便进行更大的扩展。同步是作为'队列'的一部分来处理的。
你可以使用芹菜作为cron的替代品,但这并不是它的主要用途。它用于跨分布式集群分发异步任务。
当然,芹菜有很多cron没有的特性。