如何处理金字塔和芹菜的长异步请求?

时间:2013-04-18 09:02:49

标签: rabbitmq celery pyramid amqp

我正在设置一个带金字塔的网络服务。对视图的典型请求将非常长,大约需要15分钟才能完成。所以我的想法是用芹菜和一个rabbitmq经纪人排队工作。 我想知道什么是确保不会发生坏事的最佳方法。 具体来说,我想阻止任务队列溢出,例如。

第一个mesure将定义每个IP的配额,以限制给定IP每小时可以提交的请求数。

但是我无法预测所涉及的IP数量,因此无法解决所有问题。

我已经读过用celery / rabbitmq限制队列大小是不可能的。我想在将新项目推入之前检索队列大小,但我不确定这是不是一个好主意。

我不习惯消息传递/作业调度方面的良好实践。是否有推荐的方法来处理这类问题?

1 个答案:

答案 0 :(得分:3)

RabbitMQ内置了flow control QoS。如果RabbitMQ无法处理发布速率,它将调整TCP窗口大小以减慢发布者的速度。如果将太多消息发送到服务器,它也将溢出到磁盘。这将使您的消费者更加天真,但如果您在出错时重新启动连接并充斥连接,则可能会导致问题。

我一直决定花更多的时间确保发布者/消费者可以使用多个队列服务器,而不是试图让他们对单个队列服务器更加智能。好处是,如果你真的超载了单个服务器,你可以添加另一个服务器(或者如果使用RabbitMQ HA则添加另一个服务器。有一个来自Pycon的有用视频关于Messaging at Scale使用Celery和RabbitMQ应该是有用的。