gpt4 book ai didi

amazon-web-services - 创建异步模型时的单个 SQS 队列与多个 SQS 队列

转载 作者:行者123 更新时间:2023-12-03 20:17:18 25 4
gpt4 key购买 nike

我必须开发一个组件,其中 API 本质上是异步的。为了开发这个异步模型,我将使用 Aws SQS 队列来发布消息,客户端将从队列中读取并将响应发送回队列。现在我必须公开 10 个 API(当前)。
目前,我可以考虑为所有 API 设置一个请求和一个响应队列(我将轮询),并且 API 的有效负载可以由某些操作定义。
另一种方法是为每个 API 使用单独的队列。我可以看到多个队列的优点是每个 API 可以有不同的流量,并且拥有多个队列可以帮助队列的客户端有效地扩展。
这两种方法的其他优缺点是什么?

最佳答案

将您的用例分成 2 个不同的问题:

问题一: worker 的 API,一个队列还是多个?

如果您的工作人员执行不同类型的工作,那么拥有一个队列将要求他们检查然后丢弃他们不关心的消息。如果是这种情况,那么每种消息类型应该有一个队列。这样,工作人员从队列接收的任何消息都应该能够处理。

如果您开始忽略消息,那么其他可能空闲的工作人员可能会等待一段时间以获取它关心的消息。

问题2:对“结果”使用返回队列。如果您的客户端将轮询结果,那么在每次轮询时,您的 API 都需要轮询队列。同样,它将“搜索”正确的响应,丢弃那些它不关心的响应,让其他客户端挨饿。

推荐:

使用多个队列,每个“ worker 类型”一个。工作人员应该能够处理它从队列接收到的任何消息。

然后使用 SQS 以外的其他东西来存储结果。一种选择是使用 S3 来存储结果:

  • 当您的 API “创建”任务时,在 S3 中创建一个对象并将对该 S3 对象的引用放在您的 SQS 队列中。
  • 你的 worker 会做这项工作,然后把结果放在被告知的地方。
  • 当您的客户端轮询您的 API 以获取结果时,您的 API 将检查 S3 并返回状态/结果。

  • 如果合适,可以使用其他数据存储代替 S3:RDS、DynamoDB 等。

    关于amazon-web-services - 创建异步模型时的单个 SQS 队列与多个 SQS 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49136192/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com