Amazon SQS或任何队列服务的可能用例有哪些?

时间:2015-07-31 18:08:38

标签: amazon-web-services amazon-sqs

所以我一直试图抓住亚马逊的AWS,因为我公司的整个基础设施都是基于它的。

我从未能够正确理解的一个组件是Queue Service,我搜索过Google很多但我无法得到满意的答案。我认为Cron工作和Queue Service有点相似,如果我错了,请纠正我。

究竟SQS究竟是什么?据我了解,它存储了AWS中的其他组件用来执行任务的简单消息。你可以发信息来做那件事。

在这个问题中,Can someone explain to me what Amazon Web Services components are used in a normal web service?;答案提到他们使用SQS对他们想要异步执行的任务进行排队。为什么不直接向用户发送消息&稍后进行处理?为什么要等SQS来做它的东西?

另外,我只想说我有一个网络应用程序,允许用户安排一些日常任务,SQS将如何适应?

3 个答案:

答案 0 :(得分:46)

No, cron and SQS are not similar. One (cron) schedules jobs while the other (SQS) stores messages. Queues are used to decouple message producers from message consumers. This is one way to architect for scale and reliability.

Let's say you've built a mobile voting app for a popular TV show and 5 to 25 million viewers are all voting at the same time (at the end of each performance). How are you going to handle that many votes in such a short space of time (say, 15 seconds)? You could build a significant web server tier and database back-end that could handle millions of messages per second but that would be expensive, you'd have to pre-provision for maximum expected workload, and it would not be resilient (for example to database failure or throttling). If few people voted then you're overpaying for infrastructure; if voting went crazy then votes could be lost.

A better solution would use some queuing mechanism that decoupled the voting apps from your service where the vote queue was highly scalable so it could happily absorb 10 messages/sec or 10 million messages/sec. Then you would have an application tier pulling messages from that queue as fast as possible to tally the votes.

答案 1 :(得分:5)

我要添加到@ jarmod的优秀和简洁的答案是,消息的大小确实很重要。例如,在AWS中,除非您使用扩展客户端库,否则最大大小仅为256 KB ,这会将最大值增加到2 GB。但请注意,它使用S3作为临时存储。

在RabbitMQ中,实际限制大约为100 KB。 RabbitMQ中没有硬编码限制,但系统或多或少地停顿。根据个人经验,RabbitMQ可以处理大约1 MB消息的稳定流,持续约1-2小时,但随后它将开始表现不正常,经常变成僵尸,您需要重新启动该过程。

答案 2 :(得分:0)

SQS是使服务脱钩的好方法,尤其是在需要大量的重型,面向批处理的处理时。

例如,假设您有一项服务,人们可以从他们的移动设备上传照片。照片上传后,您的服务需要对照片进行大量处理,例如将它们缩放到不同的大小,应用不同的过滤器,提取元数据等。

一种实现此目的的方法是将一条消息发布到SQS队列(或者可能将多个消息发布到多个队列,这取决于您如何构造它)。消息描述了需要对新上传的图像文件执行的工作。将消息写入SQS后,您的应用程序可以将成功返回给用户,因为您知道您拥有图像文件并且已经计划了处理。

在后台,您可以让服务器从SQS读取消息并执行消息中指定的工作。如果其中一台服务器死亡,则另一台将接听消息并执行工作。 SQS保证最终会传递一条消息,因此您可以确信工作将最终完成。