14

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

我刚刚开始研究这两个主题,我发现很难区分这两种用途。我知道工作人员或多或少是一个沙箱,它将在应用服务器之外的不同环境中运行程序以增加用户体验。我也知道消息队列很像它的数据库替代方案,即一个任务被添加到一个队列中,然后另一个服务器/编程监听该任务,然后处理它。但是,尽管我认为我了解它们是什么,但我无法区分何时使用它们以及为什么使用它们。

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

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

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

4

2 回答 2

11

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

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

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

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

于 2014-04-25T19:26:07.250 回答
4

当您想将一些数据发送到其他进程、应用程序的一部分,甚至是不同的应用程序时,消息队列很有用。它像管道一样工作,将数据传输到另一端。例如,我有 10 家在线商店供客户购买商品。我想在一台服务器上处理所有结帐。有一些方法可以将商店连接到加工中心:

  1. 在结账处理中心服务器上制作API;需要人力资源来编写 API 代码,API 和车间的客户端必须是故障安全的(结账必须交付到处理中心)。
  2. 将结帐从商店服务器放入数据库,将它们放在处理服务器上;它需要从商店和处理中心访问同一个数据库,这有时不够安全。请注意,使用单独的数据库服务器必须充当消息队列。它必须是可扩展的,所以,我需要花钱购买基础设施和管理员。
  3. 从商店发送到消息队列,从另一侧的消息队列中获取;需要消息队列服务安装和基础架构支持。

云服务,如 IronMQ,提供基础设施支持,为多种语言提供简单的库,具有出色的基于 Web 的 UI 等。

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

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

于 2014-04-24T23:49:47.077 回答