【问题标题】:Heroku dynos not sharing the file systemHeroku dynos 不共享文件系统
【发布时间】:2014-12-31 19:26:33
【问题描述】:

我的 heroku 网络应用程序具有从 S3 下载图像的功能。它的工作原理是这样的:

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

这种方法在 Heroku 中使用 1 dyno 效果很好。不幸的是,在扩展到 2 个 dynos 之后,我们意识到它不再起作用了。原因是 Heroku 中的 dyno 不共享同一个文件系统,端点 A 和 B 由不同的 dyno 管理。因此,端点 B 中的测功机没有找到任何文件。

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

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

【问题讨论】:

    标签: node.js heroku amazon-s3


    【解决方案1】:

    我认为解决方案就在这里,这可能会有所帮助 http://technomile.github.io/wordpress/setup.html

    【讨论】:

    • 存储库已过时。
    【解决方案2】:

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

    然后设置一个进程定期运行以清除该 S3 存储桶中的任何旧内容。

    【讨论】:

    • 是的,这可能是一种方法!但是,我们如何监控下载一堆图像的进度呢?在我的解决方案中,我正在“计算”已下载图像的数量以返回下载进度。
    • 对于进度报告,您应该使用 Redis 或 Memcached。下载图像的测功机会将进度推送到一个键,任何其他测功机都可以使用该键值拉动该进度。 Redis 和 memcached 非常适合在 dyno 之间同步数据。
    • 感谢您的建议。明天我会考虑这个并在适当的时候接受你的回答。
    • 给我们我找到的博客链接或视频,但我仍然坚持technomile.github.io/wordpress/setup.html
    猜你喜欢
    • 1970-01-01
    • 2022-12-19
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多