![对于具有多个存储驱动程序/服务器的网站,文件路径如何工作?](https://linux22.com/image/763533/%E5%AF%B9%E4%BA%8E%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E5%AD%98%E5%82%A8%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%2F%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E7%BD%91%E7%AB%99%EF%BC%8C%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
因此,我正在本地主机上开发此网站,目前,当我“上传”文件时,我已将文件设置为存储在文件夹中uploads
,并生成由指定文件 ID 的前 2 个字符组成的子文件夹。例如,如下所示:
/uploads/ab/abcde.mp4
现在,当我将整个站点放在一台机器/驱动器上时,这很容易,但想要在规划站点时考虑到可扩展性,如果我需要为站点添加额外的存储空间,我该如何规划?
这些网站将使用 Apache(可能)和 Ubuntu 托管。但我有几个问题:
假设单个 VPS 有 16GB RAM,您可以添加多少额外的存储空间?
如果添加了其他驱动器,您将如何将服务器指向该文件?例如,假设我有以下 HTML:
<img src='uploads/aa/aaaaa.jpg'/> <-- this file is on one drive
<img src='uploads/bb/bbbbb.jpg'/> <-- this file is on another drive
在 Windows 上,如果你插入任何外部设备或其他东西,它显然会显示为驱动器E:\
或其他东西 - 如果你在网络服务器中添加额外的存储空间,情况也是如此吗?文件A可能会uploads/...
,但是文件B必须保存在E:/uploads/...
?
我认为这可能是它的工作原理,然后您可以使用 Apache/Nginx 将不同的 URL 映射到不同的驱动器 - 例如,完整的 URL 可以是http://d1.mysite.com/uploads/aa/aaaaa.jpg
和http://d2.mysite.com/uploads/bb/bbbbb.jpg
(请注意,区别是“d1“ 和 ”d2“),使用 Apache,您可以在 .htaccess 中制定一条规则,根据 URL 将不同的传入请求映射到不同的驱动器。我尝试搜索“Apache/.htacess 将 url/请求映射到不同的驱动器”等内容,但找不到任何东西,这让我认为这不是你做事的方式。
如果有人能给我指明正确的方向,我将不胜感激
答案1
在服务器系统和现代操作系统上,您拥有比访问和使用每个磁盘作为单独的唯一设备更多的选择。
比较典型的是逻辑卷管理在软件中,一个或多个磁盘/分区可以组合在一起并作为单个卷进行寻址。向系统添加物理新磁盘允许管理员将其添加到现有逻辑卷,使其变大,然后(在扩大文件系统之后)您将拥有额外的可用空间,您和您的应用程序可以使用这些空间而无需在那里进行任何重新配置...
利用 RAID 和存储控制器,您也可以在硬件上实现大致相同的功能。
对于虚拟服务器,“磁盘”通常是一个虚拟磁盘映像,可以随意增加到几乎任何大小(主要仅受所使用的虚拟化平台的限制)。您需要更多存储空间:只需增加 VPS(磁盘)大小,扩大文件系统即可。如果您读到那里的限制:通常还可以添加一个或多个额外的卷。
答案2
是的,一个卷可以有 50 TB。请务必考虑性能预算,尝试根据要处理的请求数量估算所需的 IOPS 数量。
一些云提供商提供托管文件共享,例如 Azure Files 或 Amazon Elastic File System。您可以根据需要创建一个大小的卷,并通过 NFS 将其挂载到您的实例上。
自己动手时,请用磁盘创建一个存储阵列。例如,在 Linux md RAID 6 之上的 Linux LVM 上的 XFS。或者,ZFS 池。其中任何一个都可以为客户端提供 NFS 共享。并且存在面向存储的服务器形式因素,允许在一个机箱中安装数十个驱动器。
这两种大型文件共享解决方案都需要应用程序选择文件名。如果目录中的文件超过十万个,文件系统性能就会严重下降。这可能需要更均匀的文件分布方案,例如散列文件名。
或者,考虑用对象存储替换文件共享。内容可寻址 API 存储,这样您就不必处理文件名。例如,S3 兼容存储。构建 MinIO 存储节点、购买 EMC ECS 阵列或使用实际 AWS,所有这些都允许客户端使用 S3 存储桶。这些与底层存储卷或任何一台服务器非常抽象,并允许向外扩展增长到非常大数量的对象。