AWS SQS队列可提高性能

时间:2017-01-24 00:12:29

标签: amazon-web-services amazon-sqs

我尝试实施AWS SQS队列以最小化来自后端服务器的数据库交互,但我遇到了问题。

  • 我有一个消费者进程,它从一个SQS队列中查找消息。
  • 当客户端点击Web界面中的按钮时,JSON消息将放置在SQS队列中。
  • 应用服务器中的后端作业从SQS队列中获取JSON消息,从队列中删除消息并对其进行处理。

为了测试功能,我为一个客户端实现了逻辑。它运行正常。但是,当我添加3个客户端时,它无法正常工作。我能够看到SQS队列中有500条消息,并且后端作业正在从队列中正常读取。

我是否需要增加后端作业的数量或增加客户端SQS队列的数量?现在所有客户端都将消息发送到同一队列。

如何计算所需的后端作业数量?另外,是否有任何设置可以使SQS更快地工作?

1 个答案:

答案 0 :(得分:2)

将消息存储在队列中是好的 - 事实上,这是使用队列的目的。

如果您的后端系统无法以产生它们的速率使用消息,则该队列将充当缓冲区以保留消息,直到它们可以被处理。一个很好的例子是这个AWS re:Invent演示,其中显示的队列包含超过2亿条消息:Building Elastic, High-Performance Systems with Amazon SQS and Amazon SNS

如果快速处理邮件很重要,那么扩展您的消费者以匹配邮件生成率(或更快,以便您可以使用积压工作)。

您提到您的进程"从SQS队列中获取JSON消息,从队列中删除消息并对其进行处理"。请注意,最佳做法是从队列中接收消息,处理消息并然后将其删除(在完全处理后)。这样,如果您的进程失败,则在定义的不可见期后,该消息将自动重新出现在队列中。这使您的应用程序更能适应故障。