如何保证Celery的邮件传递?

Ken*_*ane 34 high-availability message-queue rabbitmq redis celery

我有一个python应用程序,我想在后台开始做更多工作,以便它变得更加繁忙,因为它变得更加繁忙.在过去,我使用Celery来完成正常的后台任务,这一点运作良好.

这个应用程序和我过去做过的其他应用程序之间的唯一区别是我需要保证这些消息得到处理,它们不会丢失.

对于这个应用程序,我不太关心我的消息队列的速度,我首先需要可靠性和耐用性以及formost.为了安全起见,我希望有两个队列服务器,两个都在不同的数据中心,以防出现问题,一个是另一个的备份.

看看Celery看起来它支持一堆不同的后端,有些后端具有更多功能.两个最流行的看起来像redis和RabbitMQ所以我花了一些时间来进一步检查它们.

RabbitMQ: 支持持久队列和群集,但是它们今天进行群集的方式的问题是,如果丢失群集中的节点,则该节点中的所有消息都将不可用,直到您将该节点重新联机为止.它不会复制群集中不同节点之间的消息,只是复制有关消息的元数据,然后返回到原始节点以获取消息,如果节点未运行,则为SOL Not理想.

他们建议解决这个问题的方法是设置第二台服务器并使用DRBD复制文件系统,然后运行pacemaker之类的东西,以便在需要时将客户端切换到备份服务器.这似乎很复杂,不确定是否有更好的方法.谁知道更好的方法?

Redis: 支持一个读取从站,这将允许我在紧急情况下备份,但它不支持主 - 主设置,我不确定它是否处理主站和从站之间的主动故障转移.它没有RabbitMQ那样的功能,但看起来更容易设置和维护.

问题:

  1. 设置芹菜的最佳方法是什么,以保证消息处理.

  2. 有没有人这样做过?如果是这样,会分享您的所作所为吗?

Chr*_*son 5

OP以来发生了很多变化!现在有一个高可用性选项,也就是"镜像"队列.这对解决您描述的问题非常重要.见http://www.rabbitmq.com/ha.html.


var*_*ela 0

我已使用 Amazon SQS 来实现此建议并取得了良好的结果。您将收到消息,直到您将其从队列中删除为止,并且它允许将您的应用程序增长到您需要的高度。