繁体   English   中英

Amazon SQS 或任何队列服务的可能用例是什么?

[英]What are the possible use cases for Amazon SQS or any Queue Service?

所以我一直在尝试使用 Amazon 的 AWS,因为我公司的整个基础设施都基于它。

我一直无法正确理解的一个组件是Queue Service ,我在谷歌上搜索了很多,但没有得到满意的答案。 我认为Cron 作业队列服务有些相似,如果我错了,请纠正我。

那么SQS到底是做什么的呢? 据我了解,它存储简单的消息,供 AWS 中的其他组件使用以执行任务,您可以发送消息来执行此操作。

在这个问题中, 有人可以向我解释在普通 Web 服务中使用哪些 Amazon Web Services 组件吗? ; 答案提到他们使用SQS来排队他们想要异步执行的任务。 为什么不直接向用户回馈消息并稍后进行处理? 为什么要等待SQS做它的事情?

另外,假设我有一个 Web 应用程序,它允许用户安排一些日常任务, SQS将如何适应?

不,cron 和 SQS 不相似。 一个 (cron) 调度作业,而另一个 (SQS) 存储消息。 队列用于将消息生产者与消息消费者分离。 这是构建规模和可靠性的一种方法。

假设您为一个流行的电视节目构建了一个移动投票应用程序,并且有 5 到 2500 万观众同时投票(在每场演出结束时)。 您将如何在如此短的时间内(例如 15 秒)处理这么多票? 可以构建一个重要的 Web 服务器层和数据库后端,可以每秒处理数百万条消息,但这会很昂贵,您必须为最大预期工作负载预先配置,并且它没有弹性(例如数据库故障或限制)。 如果很少有人投票,那么你就为基础设施支付了过高的费用; 如果投票变得疯狂,那么投票可能会丢失。

更好的解决方案是使用某种排队机制,将投票应用程序与您的服务分离,其中投票队列具有高度可扩展性,因此它可以愉快地每秒吸收 10 条消息或 1000万条消息/秒。 然后,您将有一个应用程序层尽可能快地从该队列中提取消息以统计投票。

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

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

SQS 是解耦服务的好方法,尤其是在需要大量繁重的、面向批处理的处理时。

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

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

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

您可以使用此服务在Web应用程序中构建(例如)聊天应用程序。 https://aws.amazon.com/blogs/mobile/building-a-serverless-real-time-chat-application-with-aws-appsync/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM