2014-11-04 78 views
1

我的heroku网络应用程序具有从S3下载图像的功能。它的工作原理是这样的:Heroku dynos不共享文件系统

  1. 有一个端点(A)请求下载一个映像数组,它返回一个任务ID。
  2. 这些图像由A下载到我的应用程序的tmp Heroku文件夹中。当下载所有图像时,会创建一个zip文件。
  3. 虽然图像仍可以下载,但Web客户机会从点1调用带有任务ID的另一个端点(B)。此第二个端点会检查已下载了多少图像以返回进度百分比。当压缩文件已经被创建时,它会“返回”压缩文件并下载图像。

这种方法在Heroku中使用1代动力学效果很好。不幸的是,在扩展到2个dynos后,我们意识到它不再工作。原因是Heroku中的dynos不共享相同的文件系统,端点A和B由不同的dynos管理。因此,端点B中的测试仪没有找到任何文件。

有没有一种简单的方法可以让我的方法适用于多个dynos?

如果不是,我应该如何实现所描述的功能? (从S3下载zip文件中的多个图像)

回答

1

您可以创建第二个S3存储桶,并在完成下载后将zip文件压入第二个S3存储桶。然后你可以重定向客户端直接从S3下载zip文件。

然后设置一个进程定期运行以清理S3中的任何旧桶。

+0

是的,这可能是一种方法!我们怎么能监视下载一堆图像的进度?在我的解决方案中,我“计算”了已下载图像的数量以返回下载进度。 – 2014-11-04 19:19:48

+0

对于进度报告,您应该使用Redis或Memcached。 dyno下载图像会将进度推向一个关键点,任何其他dynos都可以通过关键值获取进度。 Redis和memcached非常适合在dynos之间同步数据。 – Daniel 2014-11-04 19:24:13

+0

感谢您的这些想法。明天我会考虑这一点,并酌情接受你的回答。 – 2014-11-04 19:26:22

相关问题