使用 AWS 构建任务处理的最佳实践是什么?

What is the best practice to architect tasks processing using AWS?

我想知道如何配置 AWS Lambda、SNS 和 SQS 来处理后台任务。

我想到了三种方式。

选项 1。一个名为 consumer 的函数可以通过从队列中接收任务来执行 worker。

选项 2。将所有任务发送到 SNS。一名工作人员和一名 SQS 从 SNS 接收和工作。

选项 3。 APP直接将任务转发给1个SQS和1个lambda

最大的顾虑是在应用程序中直接调用Lambda还是使用SQS或SNS的任务消费者。

我的想法来自

典型的模式是:

  • 将 jobs/tasks 推送到 Amazon SQS 队列
  • 配置 AWS Lambda 函数以订阅 SQS 队列
  • Lambda 将自动为 SQS 队列中的每条消息执行 Lambda 函数

我想这符合您的选项 1,但 AWS Lambda 服务充当触发各个 Lambda 函数的“消费者”。

如果有不同类型的输入(例如三个不同的任务),每个都需要不同的 Lambda 函数,则创建 3 个单独的队列,每个队列链接到它自己的 Lambda 函数(您的选项 3).

在中间插入 Amazon SNS(在您的 选项 2 中显示)可以更轻松地 'fork' 信息,例如向每条消息添加另一个订阅者,以防他们需要并行处理。否则没有必要。

这取决于您当前和未来的要求:

选项 1:选择消费者 lambda 将允许您在事件中添加验证和操作。 但是你的消费者 lambda 将是 运行 直到你的工人 lambda 是 运行.

选项 2:SNS 使您可以灵活地在未来添加新事件和新订阅者,并且您的应用程序将只需要处理 SNS。

选项 3:如果您确定将来不会有这样的其他 lambda。在这种情况下,您的应用需要配置哪种类型的事件将转到哪个 SQS。

您可以根据您的要求选择任何选项,但我建议您选择选项 2,因为您的应用将需要仅将通知推送到 SNS(单一集成)。在 SNS 中,您可以为不同类型的事件添加过滤器。 您也可以从 SNS 直接触发 lambda。

如果您的应用程序不需要 lambda 函数的输出,您应该使用 SNS/SQS 进行异步处理。