Django Celery 在生产环境中

4

我已经在本地开发机器上使用 django-celery 做了所有想要做的事情。我运行了 Django,djcelerycelery 和代理(Amazon SQS)。它发送任务并正常工作。

我可以像本地一样设置这一切(即全部在一台机器上),但是当我想将任务分发到另一台机器/共享任务等时,会发生什么?这是当前机器的副本(带有 Django,djcelerycelery)和所有连接到相同的 SQS 吗?这是如何运作的?如果它们都连接到相同的代理,它们只是“知道”吗?还是它不是这样工作的?

是否可以像在开发中一样从一个机器开始(我将在生产中启动 celery 守护程序)?


1
只要它适合您的需求,您可以从“全部”开始使用一台机器,根据您需要托管的站点,您可以制定一个扩展计划,但是对于初学者来说,将所有内容放在一起是完美的选择。我就是这样做的,并且我使用Linode,因此如果我需要更多资源,我可以扩展实例。 - PepperoniPizza
1个回答

4

Amazon SQS是一种简单的队列服务,作业进入等待运行,完成后从队列中删除。Celery只需从此队列读取。

Celery可以水平和垂直扩展。需要让Celery更快地处理更多作业吗?增加机器资源,增加工作线程数量即可进行垂直扩展,或者启动更多较小的机器以进行水平扩展。无论哪种方式,您的Celery工作线程都会消耗SQS上的同一队列。这取决于您的Celery作业正在做什么,对其他基础设施的影响如何。如果它们正在写入数据库,则拥有更多工作线程将增加数据库负载,因此您需要考虑扩展数据库。

开始时采用“所有”在一个机器上的方法是可以的。随着应用程序的需求增长,您可以开始考虑将Celery工作线程转移到更多机器上或为您的一体化服务器提供更多资源。

这有帮助吗?:)


真的非常有帮助,谢谢,它给了我一个起点。但是我注意到一件事情,当我启动了两台开发机器(相同的应用程序)时,它们都开始消耗SQS作业(如你所描述的)。这很完美,但它是如何知道的呢?我的意思是,如果我有第二台机器,我可能只想让它处理一组任务,而不是运行整个应用程序。这就像魔法一样,但我想知道,它是如何知道第二个服务器何时上线,以及如何知道要处理相同的任务?希望这讲得通。 - Prometheus
1
队列服务器对celery或您的应用程序一无所知。它只是一个存储位置,您可以将作业排队。当celery启动时,它会检查队列是否有作业,如果有作业,则会处理,一旦完成,它会再次检查队列是否有另一个作业,并持续检查直到有作业为止。这将在您拥有的x个celery工作者中发生,它们将不断检查队列。 - krak3n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接