有人能告诉我使用RabbitMQ(消息队列)而不是延迟作业(后台处理)的优点吗?
基本上,我想知道什么时候使用后台处理和消息队列?
我的web应用程序有3个组件,一个主要服务器,将处理所有用户请求和两个应用服务器,所有后台作业(如es重新索引,es记录更新,发送电子邮件,crons)都应该运行。
我看到一些文章说,数据库作为队列(延迟作业)是非常糟糕的,因为消费者将轮询数据库中的新作业,并更新将锁定表的作业状态。然后如何存储兔子MQ或其他消息队列以避免此问题。
对于延迟作业,还有其他替代方案,如sidekiq,它将在redis上运行,而不是mysql。用塞普基克比用狂犬病好吗?
和延迟的工作相比,使用方面有什么好处吗?
发布于 2019-08-27 08:34:35
您有两个员工和一个web服务器:我猜您的web应用程序会向您的员工分派一些延迟的工作。因此,您需要一种存储与这些后台作业相关的数据的方法。
为此,您可以使用一个数据库(比如Redis,这就是它所做的)或一个消息队列(比如RabbitMQ)。消息队列是一个对此用例非常有效的专用系统(允许更高的吞吐量)。数据库可以让您进行更好的内省(因为您可以请求作业表来查看当前情况),而排队系统将更有效率,但更多的是一个黑匣子,需要新的技能。
如果您没有性能问题,那么越简单越好,即使是一个简单的mysql数据库也足够了。如果您想要一个更强大的系统或需要大量监视,您还可以考虑使用一个专门的托管服务,比如泽纳顿 (我是创始人),它将为您完成所有繁重的工作,包括对后台工作的调度或更复杂的编排。
发布于 2018-12-29 12:06:57
两者执行相同的任务,即在后台执行作业,但执行的方式不同。
使用延迟作业 one使用某种数据库进行存储,然后对作业进行查询,然后对其进行处理。设置起来很简单,但是性能和可伸缩性都不是很好。
RabbitMQ或它的替代品Redise.t.c很难设置,但是它们的性能、灵活性和可伸缩性都很好,我们正在讨论每秒5000多个作业,而且您需要使用更少的代码。
发布于 2019-06-16 02:00:56
另一种选择是使用像Cadence工作流这样的任务编排系统。它支持延迟执行和排队,但提供了更高级别的编程模型和大量没有队列或延迟执行框架的特性。
与使用队列进行任务处理相比,Cadence提供了许多优点。
请参阅介绍,它超越了Cadence编程模型。
https://stackoverflow.com/questions/53956913
复制相似问题