首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >何时使用延迟作业与RabbitMQ

何时使用延迟作业与RabbitMQ
EN

Stack Overflow用户
提问于 2018-12-28 10:19:32
回答 3查看 1.9K关注 0票数 1

有人能告诉我使用RabbitMQ(消息队列)而不是延迟作业(后台处理)的优点吗?

基本上,我想知道什么时候使用后台处理和消息队列?

我的web应用程序有3个组件,一个主要服务器,将处理所有用户请求和两个应用服务器,所有后台作业(如es重新索引,es记录更新,发送电子邮件,crons)都应该运行。

我看到一些文章说,数据库作为队列(延迟作业)是非常糟糕的,因为消费者将轮询数据库中的新作业,并更新将锁定表的作业状态。然后如何存储兔子MQ或其他消息队列以避免此问题。

对于延迟作业,还有其他替代方案,如sidekiq,它将在redis上运行,而不是mysql。用塞普基克比用狂犬病好吗?

和延迟的工作相比,使用方面有什么好处吗?

EN

回答 3

Stack Overflow用户

发布于 2019-08-27 08:34:35

您有两个员工和一个web服务器:我猜您的web应用程序会向您的员工分派一些延迟的工作。因此,您需要一种存储与这些后台作业相关的数据的方法。

为此,您可以使用一个数据库(比如Redis,这就是它所做的)或一个消息队列(比如RabbitMQ)。消息队列是一个对此用例非常有效的专用系统(允许更高的吞吐量)。数据库可以让您进行更好的内省(因为您可以请求作业表来查看当前情况),而排队系统将更有效率,但更多的是一个黑匣子,需要新的技能。

如果您没有性能问题,那么越简单越好,即使是一个简单的mysql数据库也足够了。如果您想要一个更强大的系统或需要大量监视,您还可以考虑使用一个专门的托管服务,比如泽纳顿 (我是创始人),它将为您完成所有繁重的工作,包括对后台工作的调度或更复杂的编排。

票数 3
EN

Stack Overflow用户

发布于 2018-12-29 12:06:57

两者执行相同的任务,即在后台执行作业,但执行的方式不同。

使用延迟作业 one使用某种数据库进行存储,然后对作业进行查询,然后对其进行处理。设置起来很简单,但是性能和可伸缩性都不是很好。

RabbitMQ或它的替代品Redise.t.c很难设置,但是它们的性能、灵活性和可伸缩性都很好,我们正在讨论每秒5000多个作业,而且您需要使用更少的代码。

票数 1
EN

Stack Overflow用户

发布于 2019-06-16 02:00:56

另一种选择是使用像Cadence工作流这样的任务编排系统。它支持延迟执行和排队,但提供了更高级别的编程模型和大量没有队列或延迟执行框架的特性。

与使用队列进行任务处理相比,Cadence提供了许多优点。

  • 构建了具有无限过期间隔的指数重试。
  • 故障处理。例如,如果两个更新在配置的间隔内都不能成功,则可以执行通知另一个服务的任务。
  • 支持长时间运行心跳操作
  • 能够实现复杂的任务依赖关系。例如,在无法恢复的故障(佐贺)情况下实现调用链接或补偿逻辑。
  • 提供更新当前状态的完全可见性。例如,在使用队列时,您知道队列中是否有一些消息,并且需要额外的DB来跟踪整个进度。有了卡丹斯,每件事都被记录下来。
  • 能够取消飞行中的更新。
  • 内置于分布式CRON中

请参阅介绍,它超越了Cadence编程模型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53956913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档