请解释 Amazon SQS(以及一般的排队)

Please explain Amazon SQS (and queueing in general)

对于我的网络应用程序,我将需要一个单独的 EC2 实例来处理 CPU 密集型事物,以及可以排队的事物,这样它们就不会阻碍网络服务实例,例如图像大小调整、发送电子邮件....

当您创建 AWS Elastic Beanstalk 实例时,它会要求您在 "web" 或 "worker" 环境之间进行选择。据我了解,我将在工作环境中处理这些任务。

在这种情况下,SQS 的作用是什么?我读到它只是关于发送 "messages" 之类的东西,但是如何使用 "message" 调整图像大小?

我是否应该为工作实例创建特定的、不同的代码来处理图像大小调整,然后使用 SQS 命令它处理图像?那么 SQS 可以将图像从 Web 实例传递到工作实例吗?我完全错过了主要概念。

队列服务(例如 Amazon SQS)用于存储消息以供以后检索。将它想象成一个 TODO 列表——您将项目添加到队列中,稍后您从队列中检索一个项目并对该项目采取行动。

例如,假设用户将图片上传到网站,而您希望从这些图片生成缩略图。您的网站会将图像存储在 Amazon S3 中,然后将消息推送到 SQS 队列中。该消息将包含对 S3 中图像的引用以及有关用户的详细信息。

然后,您的 Elastic Beanstalk worker 将从队列请求消息并处理图像。它会从 S3 检索图像,调整其大小,将其存储在 S3 存储桶中,然后可能会通过电子邮件通知用户作业已完成。 worker 然后退出,Elastic Beanstalk 将触发一个新的 worker 从队列中读取下一条消息并再次执行所有操作。

所以,是的——您将创建工人代码。 Elastic Beanstalk 将使用 SQS 消息触发工作程序。 SQS 本身不会触发任何东西——它实际上是 Elastic Beanstalk 检索消息并运行 worker。

参见:Elastic Beanstalk worker environments