首页 文章

如何保证Celery的邮件传递?

提问于
浏览
33

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

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

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

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

RabbitMQ: 支持持久队列和群集,但是它们今天进行群集的方式的问题是,如果丢失群集中的节点,则该节点中的所有消息都将不可用,直到您将该节点重新联机为止 . 它没有运行,你是S.O.L.不理想 .

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

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

Questions:

  • 设置芹菜的最佳方法是保证消息处理 .

  • 以前有人这样做过吗?如果是这样,会分享您的所作所为吗?

5 回答

  • 3

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

  • 0

    您可能想查看IronMQ,它涵盖了您的要求(耐用,高可用性等),并且是 Cloud 原生解决方案,因此零维护 . 还有一个Celery代理商:https://github.com/iron-io/iron_celery所以你可以通过改变你的Celery配置来开始使用它 .

  • 0

    我怀疑Celery绑定现有的后端是您所需的可靠性保证的错误解决方案 .

    鉴于您希望分布式排队系统具有强大的持久性和可靠性保证,我首先要寻找这样一个系统(它们确实存在),然后找出在Python中绑定它的最佳方法 . 这可能是通过芹菜和新的后端,或不 .

  • 5

    我已经使用亚马逊SQS来提出这个建议,并取得了不错的成绩 . 您将收到消息,直到您将其从队列中删除,并允许您根据需要增加应用程序 .

  • 1

    使用分布式渲染系统是一种选择吗?通常保留给HPC但很多概念是相同的 . 查看Qube或截止日期渲染 . 还有其他开源解决方案 . 鉴于每个图像序列帧可能需要数小时的一些渲染的高度复杂性和失败风险,所有都有故障转移 .

相关问题