2010-05-06 49 views
12

对于基于Python/Django的/芹菜部署工具,我们有以下设置:如何布置队列/工作人员结构以支持多个环境的大型任务?

  1. 目前,我们使用默认的设置芹菜。 (一个队列+交换称为“芹菜”。)
  2. 队列上的每个任务都表示一个部署操作。
  3. 环境的每个任务都以可能需要(很长)的同步阶段结束。

以下规格需要满足:

  1. 并发:任务多个环境应同时进行。
  2. 锁定:可能有最多一个任务同时为每个环境运行(即环境锁定)。
  3. 吞吐量优化:当单个环境中存在多个任务时,它们的同步阶段可能会合并以进行优化。因此,如果任务接近结束,它应该检查队列中是否有新任务等待这个环境,如果是,则跳过其同步阶段。

实现此目的的首选方法是什么?

的几点思考:

  • 我想说,我们必须建立多个队列:一个为每个环境,并有ñ芹菜工人处理单个队列完全,每个。 (这将解决规格1 + 2。)
    但是,我们如何让多名芹菜工人专门听不同的队列?
  • 有没有一种清楚的方式知道有更多的任务在队列中等待环境?

回答

1

我想看看zeromq它可以在一个超快速库中进行消息传递和多线程。它还支持大量的语言,并内置负载均衡。

2

for 1,2使用多个队列并使用-Q启动工作人员以指定要侦听的队列。 同时配置CELERYD_PREFETCH_MULTIPLIER = 1,一次只有一个任务。

要获得队列lenght(与RabbitMQ的测试),你可以使用这样的事情:

from kombu.connection import BrokerConnection 
connection = BrokerConnection(BROKER_HOST, BROKER_USER...) 
channel = connection.channel() 
q, j, c = channel.queue_declare('celery', passive=True) 
print 'celery %d jobs in queue' % j 

“queue_delcare”的副作用,给你队列的长度。 希望这可以帮助你。

相关问题