何时使用消息队列以及何时使用云后台工作程序

时间:2014-04-24 22:08:06

标签: web-services message-queue background-process ironworker ironmq

我什么时候会使用像ironMQ这样的消息队列,何时会使用像ironWorker这样的工作处理工作者?

我刚刚开始研究这两个主题,我发现很难区分这两个用途。我理解一个worker或多或少是一个沙盒,它将在app服务器之外的不同环境中运行程序,以增加用户体验。我也理解消息队列很像它的数据库替代方案,其中任务被添加到队列,然后另一个服务器/编程侦听该任务,然后将处理它。然而,虽然我认为我明白他们是什么,但我无法区分何时使用每一个以及为什么。

如果我理解正确,我会使用工作人员完成图像处理等任务。但是为什么我不能使用消息队列,更重要的是为什么不呢?当然,我可以在ironMQ中排队一个图像URL,然后再检索并处理它。在我看来,这似乎是一个额外的步骤,所以我会避免这一点。

当工作人员可用时,对于常见任务,消息队列对我来说似乎毫无意义。当然,对于发表评论这样的非密集型任务,我可以让工人这样做吗?

我可能误解了每个工具之间的区别,如果是这样,请让我直截了当。否则,请帮忙。

2 个答案:

答案 0 :(得分:11)

它们密切相关,所以我能理解这种混乱。它们都是基于队列的系统,一个是消息队列,一个是任务/作业队列。这是一般的经验法则:

  • 如果要运行使用者/工作进程/服务器,则使用IronMQ。
  • 如果您希望Iron.io负责消费者/工作进程/服务器,则可以使用IronWorker。您还可以使用IronWorker获得许多其他功能/优势,而不仅仅是您不必管理自己的服务器并扩展它们等等。

所以不,如果您正在使用IronWorker,则不需要消息队列,因为IronWorker是您的消息队列+您对该队列的处理。

不要添加任何混淆,但有些人也一起使用IronWorker和IronMQ,工作人员将消息从IronMQ中删除。这种模式适用于非常短的任务来分摊工作人员的设置/拆卸(建立数据库连接或工人必须做的任何设置)。

答案 1 :(得分:4)

当您想要将某些数据发送到其他进程,应用程序的一部分,甚至是不同的应用程序时,消息队列非常有用。它像管道一样工作,将数据传输到另一侧。例如,我有10家网上商店,顾客在那里买东西。我想在一台服务器上处理所有签出。有几种方法可以将商店连接到处理中心:

  1. 在结帐处理中心服务器上创建API;需要人力资源来编写API代码,商店一侧的API和客户端必须是故障安全的(结账必须交付给处理中心)。
  2. 将结账退出到商店服务器的DB,将它们放在处理服务器上;它需要从商店和加工中心访问相同的数据库,有时这种数据库不够安全。请注意,使用单独的DB服务器必须充当消息队列。它必须是可扩展的,因此,我需要花钱购买基础设施和管理员。
  3. 从商店发送到消息队列,从另一侧的消息队列中获取;需要消息队列服务安装和基础架构支持。
  4. 像IronMQ这样的云服务可以提供基础架构支持,为许多语言提供简单的库,具有出色的基于Web的UI等。

    用于异步处理的IronWorker等系统也是如此。例如,如果我有小应用程序,我可以在我的服务器上做这样的工作。它只需要使用专门的库。在中型应用程序的情况下,我可以设置服务器并安装软件以进行异步任务处理。如果我拥有包含大量任务的庞大应用程序,则需要支持可扩展的基础架构,任务负载均衡器等。

    为开发人员提供云服务的公司是通过AWS等服务编程的基础架构控制器层。它们为其服务提供简单的API,支持基础架构并为不同语言提供大量客户端库。