如果您的网站规模过大,以致于 uploaded_media(在 Django 中,存储用户上传的所有媒体文件)无法放在一台机器上,您会怎么做?
就我个人而言,我使用 Django,并且有一个非常大的 uploaded_media 服务器,有超过 600GB 的存储空间(但空间快用完了)。
我集思广益提出的可能解决方案:
1)尝试构建更大的存储机器。2
)转移到更抽象的系统,其中 uploaded_media 的位置和路径存储在数据库中(每个文件都被赋予一个 DB id,并且该数据库记录存储文件在多个 uploaded_media 服务器上的存储位置。)
答案1
将静态媒体移至另一个存储子系统。这可以采用大型 NAS 的形式,通过 NFS 导出到您的 Web 服务器,或者最好使用像 Amazon S3 这样的对象存储来存储您的静态媒体。使用正确的方法,您实际上可以让用户的浏览器将文件直接上传到 S3。但如果这不可行,您可以将上传的文件在本地存储一小段时间,然后定期运行一项作业并将项目上传到 S3(同时更新您的数据库以了解它们的正确位置)。
答案2
我想到了一些选择:
- 添加更多存储空间(即第二个硬盘)(并且可能将其设置为 JBOD,以便它看起来与服务器相邻)。
- 考虑使用 GlusterFS 等联网文件系统。这样您就可以将数据存储在多台机器上,而所有这些机器都可以透明地访问本地机器。
- 考虑使用外部存储服务,例如 Amazon 的 S3。您可以将其安装为本地存储(例如使用 S3fuse),它将根据您的需求进行扩展(除了成本之外,这种情况下的性能会受到一些限制 - 它肯定不适合诸如数据库之类的东西,但对于媒体文件来说应该足够了)。
- 一个糟糕的选择(至少在我看来)是使用压缩文件系统(fusecompress、btrfs)来获得一些额外的空间 - 根据文件的类型,这可能会节省大量空间(例如对于文档)或几乎不节省空间(对于图像/音乐/视频)。当然,这会对性能造成重大影响。
可能可以将上述内容结合起来(例如,在 GlusterFS 上使用现有存储和 S3 以获得无缝结果 - 但添加的层越多,性能就会越差。同样,对于主要存储文件的设置,这可能不是一个主要考虑因素)。