AWS多SQS队列和workers优化设计
AWS multiple SQS queues and workers optimal design
我要使用 AWS 堆栈执行以下任务:
定期触发一个作业并将消息放入队列 (SQS)。工作人员收到此任务,并基于它需要创建其他任务(大约 1-10 K 任务)。所有这些任务也被放入另一个队列,并且有额外的工作人员来处理这些任务。
这些流程可以通过以下方式描述显示:
周期性任务 ->SQS->woker_1(创建更多任务) -> SQS -> workers_2
根据项目惯例和官僚作风,需要一些时间来为 worker_1 创建两个单独的服务,用于侦听周期性任务并创建细粒度任务,以及为 workers_2 仅处理特定任务,制作 docker 图像,CI 作业等...并进行部署。
所以,这是权衡:
1. 花费额外的时间并创建两个单独的服务。另一方面,这些服务可能非常简单。甚至怀疑有 2 个独立的项目。
2. 将其作为一项服务,将消息放入同一个队列,并将收听同一个队列中的消息并执行以下操作:worker_1 和 worker_2.
如有任何建议或想法,我们将不胜感激!
我认为对此没有 "correct" 答案,您已经列出了两种选择的优缺点。我想到的一些其他事情:
- SQS 队列并不能真正让您挑选出特定类型的消息,您几乎需要先入先出地阅读所有内容。因此,如果您共享队列,您可能无法控制消息的优先级。
- 要使两个服务交互,它们需要共享消息定义。共享相同的代码库将使开发和测试消息传递代码变得更加容易。当然也可以是共享库。
- 在同一个 server/application 中部署两种工作器类型会共享资源,这在低端可能更经济,但在大规模时可能会造成混淆。
- 有可能将所有代码开发到同一个应用程序中,如果所有代码都在同一服务器和队列上,或者不同的服务器从不同的队列读取,则将决定权留给部署时间。这对我来说似乎很理想。
我要使用 AWS 堆栈执行以下任务:
定期触发一个作业并将消息放入队列 (SQS)。工作人员收到此任务,并基于它需要创建其他任务(大约 1-10 K 任务)。所有这些任务也被放入另一个队列,并且有额外的工作人员来处理这些任务。
这些流程可以通过以下方式描述显示:
周期性任务 ->SQS->woker_1(创建更多任务) -> SQS -> workers_2
根据项目惯例和官僚作风,需要一些时间来为 worker_1 创建两个单独的服务,用于侦听周期性任务并创建细粒度任务,以及为 workers_2 仅处理特定任务,制作 docker 图像,CI 作业等...并进行部署。
所以,这是权衡:
1. 花费额外的时间并创建两个单独的服务。另一方面,这些服务可能非常简单。甚至怀疑有 2 个独立的项目。
2. 将其作为一项服务,将消息放入同一个队列,并将收听同一个队列中的消息并执行以下操作:worker_1 和 worker_2.
如有任何建议或想法,我们将不胜感激!
我认为对此没有 "correct" 答案,您已经列出了两种选择的优缺点。我想到的一些其他事情:
- SQS 队列并不能真正让您挑选出特定类型的消息,您几乎需要先入先出地阅读所有内容。因此,如果您共享队列,您可能无法控制消息的优先级。
- 要使两个服务交互,它们需要共享消息定义。共享相同的代码库将使开发和测试消息传递代码变得更加容易。当然也可以是共享库。
- 在同一个 server/application 中部署两种工作器类型会共享资源,这在低端可能更经济,但在大规模时可能会造成混淆。
- 有可能将所有代码开发到同一个应用程序中,如果所有代码都在同一服务器和队列上,或者不同的服务器从不同的队列读取,则将决定权留给部署时间。这对我来说似乎很理想。