如何在分布式resque worker之间共享要处理的文件

时间:2012-07-21 07:32:28

标签: ruby-on-rails amazon-s3 amazon-ec2 resque amazon-sqs

想象一下,亚马逊ec2实例侦听sqs队列以将pdfs转换为图像。 假设我们有另外4个实例,每个实例有5个工作,每个工作都有resque运行并共享主redis。

Senario:我们收到了pdf。它有25页(每个服务器5页)。我们将文件上传到s3。然后我们为每个页面执行perform方法以生成图像。

我的问题是:五个实例必须从s3下载文件。这是推荐的吗?还有其他解决方案吗?因为下载10 mb文件以转换单独图像的5个实例看起来太慢而且昂贵......对于每项工作,如果文件存在,我必须检查文件系统......

在整体可控性设计中,这种方法是在正确的道路上?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  1. 通过使用s3,您可以消除管理自己的存储,数据传输带宽,可靠性/可用性的麻烦,这对您的整体设计有利。
  2. 我认为你应该在设计上工作,做出最大限度地减少冗余数据流/集合的决定,明智地定义原子任务(不要太小也不要太大)。 (例如,您可以将PDF文件预先分成5个块)。
  3. 另外S3作为文件交换目的并不昂贵,对于同一区域内的ec2实例,流量是免费的。请参阅aws.amazon.com/s3/pricing /