2014-11-04 110 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