Amazon ec2 如何为大量文件创建持久队列?

Amazon ec2 如何为大量文件创建持久队列?,amazon-ec2,queue,bigdata,amazon-sqs,apache-kafka,Amazon Ec2,Queue,Bigdata,Amazon Sqs,Apache Kafka,目前,我正在使用ec2+sqs+s3实现一个大数据解决方案。我的想法是,我有一个巨大的文件数据库托管在s3上。使用我的应用程序的客户端将提交一个规则匹配,它将尝试匹配s3上可用的所有相关文件,然后计算一个条件语句,将输出返回给用户,显示哪些文件与条件语句匹配 显然,我不能直接在s3文件上执行规则匹配,因为这样就无法防止在ec2实例上重复作业,我将启动这些实例来进行规则匹配。也不会有分工 我最初的解决方案是合并AmazonSQS:当客户端发出请求时,S3中的所有文件都将加载到队列中。这将允许我的e

目前,我正在使用ec2+sqs+s3实现一个大数据解决方案。我的想法是,我有一个巨大的文件数据库托管在s3上。使用我的应用程序的客户端将提交一个规则匹配,它将尝试匹配s3上可用的所有相关文件,然后计算一个条件语句,将输出返回给用户,显示哪些文件与条件语句匹配

显然,我不能直接在s3文件上执行规则匹配,因为这样就无法防止在ec2实例上重复作业,我将启动这些实例来进行规则匹配。也不会有分工

我最初的解决方案是合并AmazonSQS:当客户端发出请求时,S3中的所有文件都将加载到队列中。这将允许我的ec2实例执行分工+无重复,因为SQS负责这一点

但是,使用上述解决方案,每次客户端请求时,我都会将所有文件加载到SQS队列中,这显然是浪费(更不用说急剧上升的SQS成本了)。理想情况下,我希望有一个持久队列,一次加载所有文件(并且在s3中添加更多文件时加载更多文件)

有没有关于如何创建大数据队列结构的想法??我应该抛弃SQS,还是应该让SQS像持久队列一样运行,在处理消息之后不删除它们,并保持保留的SQS实例始终运行


谢谢。

假设您的规则匹配是基于文件元数据而不是文件内容,您可以将有关文件的元数据存储在实际的数据库中,如Amazon DynamoDB,然后进行这样的匹配

将数据“永久”存储在SQS中(而不是删除消息)不是一个好主意—消息的大小有限,如果不删除消息,它们将再次用于后续请求—这样您将获得更多的重复。此外,SQS并没有提供任何关于复制的保证——它实际上是“至少一次”交付

如果您正在对文件内容(可能除了元数据之外)运行规则匹配,这听起来像是您真正想要的,那么您可以使用并在其上构建:

SWF有两个主要组件——工作流(维护状态)和活动(执行工作的无状态代码)。对于您的情况,工作流会将每个请求分成许多工作块,并将活动提交给SWF服务。您的activity workers将在许多EC2实例上运行—他们的工作本质上是拾取作业(即:在指定的S3文件子集上运行规则匹配代码)并返回结果。然后,工作流将整合活动结果并对结果进行处理

文档中有一些代码模式的好例子,您需要同时执行许多活动并合并结果


总之,要特别回答您的问题:抛弃SQS,使用专为这种使用模式设计的SWF。

请求非现场资源(“什么是……的大数据服务”)是离题的。如果您只是询问如何做您想做的事情(如果可能的话,请更具体地说明这是什么),而不是询问服务,您的问题可能会更好地被接受。感谢您的建议作为说明,SQS不保证没有重复项-它至少有一次交付。你需要处理重复的交付。谢谢你的回答,我甚至没有考虑过AWF。我最终使用了芹菜+RabbitMQ,一种分布式队列系统。