我们目前有一个由 Django 提供支持的网站,允许用户上传大量图像。所有这些图像都存储在我们服务器上的单个硬盘上。问题是:我们逐渐达到可用硬盘的最大容量,因此垂直扩展不再是一种选择。
据我所知,Amazon S3/CloudFront 没有这样的限制,但是,对于高流量站点,这些服务比我们自己的服务器机架要贵得多。在我们自己的环境中,是否有将上传拆分到多个磁盘上的最佳实践?
答案1
这很糟糕 - 在数据内容很重要的服务器环境中,您至少应该使用 RAID 来减轻磁盘故障的巨大风险 - 而且 RAID 也是解决存储问题的方法。您可以使用 RAID 阵列来增加存储容量。(RAID 用于使用多个磁盘来提供单个虚拟磁盘,具有不同的性能特征和冗余度)
您还真正需要了解和使用其他技术 - 您尚未指定您的操作系统,但希望它是 Linux 变体 - 在这种情况下,您应该查看处理磁盘管理的 LVM,以及除其他外,能够将多个磁盘合并为一个虚拟磁盘 - 在操作系统级别之下。
当然,您也可以看看 SANS 之类的东西,它通常需要多个磁盘并可以将它们合并为一个大型外部硬盘。
答案2
假设您想避免使用基于云的服务,传统的大型企业方法是采购可以将多个独立磁盘合并为单个逻辑文件系统的硬件或软件。有很多可能的方法可以做到这一点。我将列举一些:
使用分布式文件系统(例如 glusterfs)将允许您拥有多台服务器,每台服务器都有自己的 CPU、RAM 和存储,并且在所有服务器之间共享一个逻辑文件系统。
您还可以进一步推进这个分布式概念,将整个系统从头到尾进行集群,这样看起来您好像在运行一台逻辑计算机,而实际上它是一系列紧密连接在一起的联网计算机(最好通过一些非常高速的网络)。
您可以通过购买“存储服务器”来节省购买主板、机箱、CPU、RAM 等的费用。存储服务器是一种中等功能的企业级服务器,可连接许多硬盘 - 可以直接安装在机箱中,也可以通过光纤通道或 SAS 连接到外部存储机架,有时包含 60 个甚至更多的硬盘。在这些配置中,硬盘通常使用硬件 RAID 控制器或背板连接成一个逻辑设备。当然,如果您拥有在最大磁盘密度下可以装入单个机架的所有磁盘,这种方法最终将达到最大容量,在这种情况下,您可以通过拥有这些存储服务器的文件系统层或系统层集群来扩展。
根据您预计在未来N
几年内需要的确切存储大小(其中 N 是您愿意提前计划的年数),其中一些解决方案将比其他解决方案更昂贵或更难管理。
在需要数千 TB 冗余存储的极端情况下,按照 Amazon S3 为其下游客户提供的规模,您几乎必须拥有某种集群系统,通常使用集中式基础设施来管理它。在这些情况下,非常快速的节点间联网对于保持良好的性能至关重要。至少要考虑 10G 以太网。
从你说你目前正在竞选的事实来看单个硬盘但是,从现在开始扩展而不使规模过大的最经济的方法是购买一台可以容纳 4 到 8 个硬盘的 2U 或 3U 服务器,并在其中插入一堆磁盘以进行 RAID。RAID10、RAID5 和 RAID6 都是这种数量磁盘的相当常见的配置,但是如果您使用 RAID5/RAID6,请确保使用硬件 RAID 控制器以避免过度的 CPU 负载。
使用此方法和当前可用的磁盘,您可能可以扩展到大约 16 TB 的可用存储空间(具有冗余),但请注意,容量更大的磁盘也往往速度较慢,吞吐量较低且响应时间较长,这就是为什么流量很大的网站往往使用容量较小的磁盘的原因……这当然意味着您需要更多的以达到相同的可用容量。:/