使用SQS在AWS S3上批处理过程映像

时间:2015-08-21 14:09:15

标签: amazon-web-services amazon-s3 amazon-ec2 batch-processing amazon-sqs

我正在使用AWS EC2为我的Web应用程序添加水印图像,将它们调整为5种不同的大小,并将它们与原始图像一起上传到AWS S3。

现在我想再次处理原始图像以添加新水印并制作新尺寸。我在S3上有一百万张图像,我很困惑如何处理它们。我研究了谷歌并阅读了很多博客。只有我发现我可以使用SQS,但我不知道它将如何工作以及如何配置它。

我希望在更短的时间内完成这项工作。 我该怎么办?

1 个答案:

答案 0 :(得分:1)

SQS可用于为您安排工作,但只有在您计划启动多个实例进行实际转换时才会有用。 SQS与实际图像转换无关 - 只是分离任务。

如果你只打算使用一个EC2实例(让它尽可能大而且速度快),让它尽可能快地通过百万个文件 - 因为这是一次性的努力,如果能够以足够快的速度完成,这将是您最简单的选择。

如果您打算使用一组EC2实例来完成工作,那么在每台机器上安装自定义软件(进行转换),添加一个新的(可能是自定义的)软件,该软件将轮询sqs队列要求进行工作,然后在实例启动并运行后,加载SQS队列,其中包含您需要处理的每个图像的详细信息;每个文件一条消息。

您的机器群将轮询队列,获取一条(或多条)消息进行处理(消息中应包含S3文件位置),然后让它处理图像并重新上传到s3。完成映像后,ec2实例会从队列中删除该消息,并要求处理另一条消息。

在这种情况下,SQS为您做的是提供一个队列'要处理的消息,让很多消费者1)要求工作,2)告诉sqs在工作完成后删除消息,3)尽力确保不发送相同的消息到多台机器(很少发生)。使用SQS是一种有效的方法,让一队机器在同一队列上工作,而不必担心如何将工作分开。

但是,正如我所说的那样,在你的情况下,由于这是一次性的转换努力,使用队列可能会或可能不会被保证 - 你可以让一台机器完成所有工作,如果你认为它可以运行得足够快,或者分开要手动完成的工作(即机器' A'获取在month1中创建的所有文件,机器' B'所有文件在month2中创建等等 - 任何你必须在机器之间拆分工作的方法也可以; SQS只是一种方法。