2013-12-22 14 views
0

我工作的公司最近向我分配了爲他們構建文件託管服務的任務,這些服務應該以與Hotfile/Mediafire /等類似的方式工作。它需要具備所有功能,例如正常用戶的下載速度限制,高級用戶的高速下載,等待下載等。Rails中類似Hotfile的文件託管服務

我面臨的主要問題是如何限制我的普通用戶的速度。我們有很多數據(大約30TB),每天都會上傳越來越多的數據。什麼是存儲這些文件並將其提供給用戶的理想方式?

我想在Ruby on Rails中實現它,並計劃使用Paperclip,Mongoid和Nginx。

+0

你開始的時候是錯誤的做法。你知道這個問題,你不知道解決方案,但你事先決定語言,甚至是圖書館。誰告訴你這些技術可能會幫助你解決問題?你應該關於解決方案*首先*,然後*選擇最好的技術/語言/工具來實現它。 –

回答

2

你的問題確實含糊不清。堆棧溢出不是幫助您設計您的站點,而僅用於回答特定的技術問題。這就是說,這裏是我會怎麼做:

  • 存儲文件的非公開S3(下任意時間戳/ GUIDS)
  • 付費用戶是通過時間限制的簽署給S3的文件直接訪問(RoR認證,然後發送302重定向到簽名鏈接)
  • 對於不那麼高級的用戶,他們將使用nginx代理簽名鏈接(他們從未看到實際的S3鏈接)
  • 使用X - 發送文件功能,以便Rails可以在每個請求中「循環」,但仍然將文件服務/代理卸載到nginx。
  • 不同類別的用戶可能會有不同的內部位置,全部代理到S3。 RoR決定哪個類,然後將一個帶符號的鏈接放入Sendfile頭中供nginx使用。
  • 我不是PaperClip的專家,但除非它支持你正在做的事情,否則它可能會超過它的幫助。
  • 如果所有文件都是「公開」的,不要費心將它們存儲在數據庫中。如果沒有在S3中找到,只需要nginx提供一個友好的錯誤頁面。 (是的,你會簽署鏈接到無處,吃一點CPU,但它會節省你的數據庫成爲一個瓶頸。)
+0

非常感謝您的回答。我會在未來發布更好的問題。 – Sheharyar