使用AWS SQS处理长查询

时间:2017-04-19 15:36:01

标签: node.js amazon-web-services amazon-sqs

我有一个NodeJS端点,它接收从报告引擎收集数据的请求。 保持请求端点不亮,并且因为生成的某些报告有几个步骤(收集数据 - >汇编报告 - >转换为PDF - >电子邮件发送给相关人员)我想将入站请求与作业本身分开。

使用AWS.SQS我可以接受请求,将变量放入SQS并使用200/201进行响应。

在另一端选择这项工作有哪些更好的做法? 如果我要触发lambda函数,我必须等待该函数完成才能发送200/201吗?或者我可以:

Accept Request ->
Job to SQS -> 
Initiate Lamba function ->
200 Response.

或者可以使用哪些其他选项将入站请求与处理本身分离?

1 个答案:

答案 0 :(得分:2)

以下是一些选项:

  1. 将请求插入SQS队列并立即返回200响应。在EC2服务器上有一个进程轮询SQS队列并在从SQS收到消息时执行查询。
  2. 异步调用Lambda函数,向其传递执行查询所需的属性,并立即返回200响应。由于您异步调用Lambda函数,因此调用Lambda函数的NodeJS代码不会等待函数完成。
  3. #2的替代方法是将请求发送到SNS主题,并将SNS主题配置为调用Lambda函数。如果您使用Lambda,这可能是最好的方法,因为如果Lambda函数由于某种原因失败,SNS将重试。
  4. 我不建议将SQS与Lambda结合使用,因为这两种服务不能很好地集成。另一方面,SNS与Lambda的整合非常好。

    此外,您需要确保您的Lambda函数调用可以在5分钟内完成,因为这是Lambda函数可以执行的最长时间。如果您需要单独的步骤运行超过5分钟,则需要使用EC2或ECS。

    我认为AWS Step Functions可能非常适合您的用例。