Ruby on rails Rails中类似热文件的文件托管服务
我工作的公司最近分配给我一项任务,为他们构建一个文件托管服务,该服务应与Hotfile/Mediafire/等类似。它需要具备所有功能,如普通用户的下载速度限制、高级用户的高速下载、下载前等待等 我面临的主要问题是如何限制普通用户的速度。我们有很多数据(大约30TB),每天上传的数据越来越多。存储这些文件并将其提供给用户的理想方式是什么Ruby on rails Rails中类似热文件的文件托管服务,ruby-on-rails,ruby,file-upload,Ruby On Rails,Ruby,File Upload,我工作的公司最近分配给我一项任务,为他们构建一个文件托管服务,该服务应与Hotfile/Mediafire/等类似。它需要具备所有功能,如普通用户的下载速度限制、高级用户的高速下载、下载前等待等 我面临的主要问题是如何限制普通用户的速度。我们有很多数据(大约30TB),每天上传的数据越来越多。存储这些文件并将其提供给用户的理想方式是什么 我想在RubyonRails中实现它,并计划使用曲别针、Mongoid和Nginx。你的问题很模糊。堆栈溢出不是为了帮助您设计站点,只是为了回答特定的技术问题。
我想在RubyonRails中实现它,并计划使用曲别针、Mongoid和Nginx。你的问题很模糊。堆栈溢出不是为了帮助您设计站点,只是为了回答特定的技术问题。也就是说,我会这样做:
- 将文件存储在非公共S3中(在任意时间戳/GUID下)
- 高级用户可以通过有时间限制的签名链接直接访问S3上的文件(RoR进行身份验证,然后发送302重定向到签名链接)
- 对于不是很高级的用户,他们将使用nginx代理到签名链接(他们从未看到实际的S3链接)
- 使用X-Sendfile特性,这样Rails就可以在每次请求时“处于循环中”,但仍然可以将文件服务/代理卸载到nginx
- 不同类别的用户将具有不同的内部位置,所有这些位置都代理到S3。RoR决定哪个类,然后将签名链接放入发送文件头中,以便nginx提供服务
- 我不是回形针方面的专家,但除非它支持你正在做的事情,否则它可能会妨碍你的工作,而不是帮助你
- 如果所有文件都是“公共”的,就不要麻烦将它们存储在数据库中。只要让nginx提供一个友好的错误页面,如果没有在S3中找到的话。(是的,您将无处对链接进行签名,这会占用一点CPU。但这将使您的数据库不会成为瓶颈。)