node.js - AWS多SQS队列和workers优化设计

标签 node.js amazon-web-services message-queue amazon-sqs

我有以下任务要使用 AWS 堆栈实现:

定期触发一个作业并将消息放入队列 (SQS)。工作人员收到此任务,并基于它需要创建其他任务(大约 1-10 K 任务)。所有这些任务也被放入另一个队列,并且有额外的工作人员来处理这些任务。
这些流程可以通过以下方式描述显示:

周期性任务 ->SQS->woker_1(创建更多任务) -> SQS -> workers_2

基于项目惯例和官僚作风,需要一些时间为 worker_1 创建两个单独的服务,监听周期性任务并创建细粒度任务,为 worker_2 只处理特定任务,制作 docker 镜像,CI 作业等......并部署它。 所以,这是权衡:
1. 花费额外的时间并创建两个单独的服务。另一方面,这些服务可能非常简单。甚至怀疑有 2 个独立的项目。 2. 将其作为一项服务,将消息放入同一个队列,并将监听同一个队列中的消息,并为 worker_1 和 worker_2 perorm 工作。

如有任何建议或想法,我们将不胜感激!

最佳答案

我认为对此没有“正确”的答案,您已经列出了两种选择的优缺点。我想到的一些其他事情:

  • SQS 队列并不能真正让您挑选出特定类型的消息,您几乎需要以先进先出的方式阅读所有内容。因此,如果您共享队列,您可能无法控制消息的优先级。
  • 要使两个服务交互,它们需要共享消息定义。共享相同的代码库将使开发和测试消息传递代码变得更加容易。当然也可以是共享库。
  • 在同一服务器/应用程序中部署这两种工作器类型会共享资源,这在低端可能更经济,但在大规模时可能会造成混淆。
  • 有可能将所有代码开发到同一个应用程序中,如果所有代码都在同一个服务器和队列上,或者不同的服务器从不同的队列读取,则将决定权留给部署时间。这对我来说似乎很理想。

关于node.js - AWS多SQS队列和workers优化设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35469677/

相关文章:

amazon-web-services - 来自不同地域的Ec2实例的RDS实例访问

java - 从 java 运行 AWS CLI

java - 有没有办法强制使用 JMS 消息选择器?

c - 消息太长 - 缓冲区大于消息大小

node.js - IdentityServer nodejs token 问题

javascript - ECONNREFUSED : Connection refused. 为什么?所有其他测试均通过

javascript - NPM 环境变量在 Windows 中不起作用?

node.js - typescript , "process"不存在

python - Django AWS RDS 环境变量未在 Elastic Beanstalk 中设置

node.js - 消息处理系统的设计