![]() |
1
6
我们使用FreeBSD(文件系统UFS),而不是Linux,所以一些细节可能会有所不同。 背景我们在这个系统上有数百万个文件,需要尽快从网站上提供,供个人访问。我们使用的系统在过去16年里一直运行良好。 服务器1(名为:Tom)的主用户网站具有相当标准的Apache设置和MySQL数据库。没什么特别的。 服务器2(名为:Jerry)是存储用户文件的地方,并且经过定制,可以快速交付这些小文件。 Jerry的硬盘在创建过程中进行了调整,以确保我们不会用完索引节点——这是创建数百万个小文件时需要考虑的问题。 Jerry的Apache配置进行了调整,以实现非常短的连接时间和每个连接的单个文件访问。如果没有这些调整,你就会有开放的连接,浪费资源。这个Apache配置根本不适合主系统(Tom),并会导致许多问题。 由于你提供的是“缩略图”,而不是单个请求,你可能需要一个稍微不同的结构。说实话,我对你的需求了解得还不够,无法真正建议什么最适合你的Web服务器配置。 从历史上看,我们在多台服务器上使用了多个SCSI驱动器。目前,我们有一台配备300MB/s驱动器的服务器。该业务已经下滑了一段时间(多亏了脸书),但我们每天仍有200多万个文件请求。在我们的高峰期,每天大约有1000万。 我们的结构(一个可能的答案)Jerry上的所有内容都针对小文件传输进行了调整,没有其他内容。 Jerry是一个网络服务器,但我们更像是一个数据库。所有不需要的东西都被删除了。 每个文件都有一个4个字符的ID。ID是字母数字(0-9,a-z,a-z)。这将为您提供61*61*61x61个组合(或13845841个ID)。 我们也有多个域,因此每个域最多有13845841个ID。在Facebook出现之前,我们已经非常接近这个限制,我们已经准备好了允许5个字符ID的计划,但最终并不需要它。 如果你知道文件的完整路径,文件系统查找会非常快。只有当你需要扫描文件匹配时,它才会很慢。我们充分利用了这一点。
每个4个字符的id是一系列目录。例如,
这是一个非常多的唯一ID,仅分布在4个目录中。每个目录最多有61个子目录。在不淹没文件系统索引的情况下创建快速查找。
位于目录中
如果用户正在更新或检查元数据,则ID是已知的,因此会返回对元数据的请求。 如果再次请求数据文件,则ID是已知的,因此返回数据。不进行扫描或复杂的检查。 如果ID无效,则返回无效结果。 没什么复杂的,一切都是为了速度。 我们的问题当你谈论数百万个小文件时,可能会用完索引节点。请确保从一开始就将此因素纳入服务器的磁盘创建中。提前计划。 我们禁用和/或编辑了许多FreeBSD系统检查。维护cronjobs不是为具有如此多文件的系统设计的。
Apache配置是一个有点试错的过程,以使其恰到好处。当你得到它时,解脱是巨大的。Apache的
首先要做的是禁用所有日志文件。接下来,禁用所有内容,只添加您需要的内容。 元数据和原始数据的交付(和保存)代码也进行了非常优化。忘记代码库。多年来,每一行代码都经过了速度检查和重新检查。 结论如果你真的有很多缩略图,请拆分系统。从为此而优化的专用服务器上提供小文件。保持主系统的调整,以实现更标准的使用。 基于目录的ID系统(可以是随机的4个字符或MD5的一部分)可以很快,只要你不需要扫描文件。 您的基础操作系统需要调整,这样系统检查就不会占用您的系统资源。
禁用Web服务器日志文件创建。您几乎永远不需要它,它会在文件系统上造成瓶颈。如果你需要统计数据,你可以从以下网址获得总体概述
说实话,关于你的个人情况和需求,我们了解的信息还不够。我不确定我的个人经历是否会有所帮助。 祝你好运! |
![]() |
2
4
最佳、高效、最小和最简单的方法是 SeaweedFS 自2017年以来,我一直在使用 海藻FS 每24小时存储约400万张JPEG。目前,DB拥有超过20亿条记录。我从来没有遇到过任何问题,与存储为文件系统文件相比,它节省了大量的磁盘空间。 以下是作者简介:
细节:
我的项目包含每个事件的2张图片,一张是缩略图,另一张是全帧。在项目的第一阶段,我将图像存储为具有目录结构的文件
美丽的
在我的服务器中,每个文件都在消耗
希望这能有所帮助。 |
![]() |
3
1
如果你使用md5的前2个字符作为文件夹名称,并假设你有100个缩略图,其中只有2个缩略图共享前2个文件名字符,你很快就会遇到文件系统速度慢的问题。 你能分享一下原始图像存储的目录结构吗? 也许,您可以根据原始图像的创建日期创建缩略图目录结构?
假设原始图像是在
因此,要定位上述缩略图,您需要:
希望这能很好地回答你的问题。 |
![]() |
4
1
|
![]() |
5
1
我不确定你正在构建什么样的应用程序,但根据用户数量、服务器速度和缩略图访问频率,你可能会使用类似缓存的系统?按照您的建议使用MD5哈希存储生成的缩略图,并在一定时间后将其删除。如果缩略图主要是在图像第一次放在服务器上时访问的,并且随着时间的推移,它们的使用会减少,那么你可以删除它们(在半夜,或者在使用最少的时候),如果需要再次生成它们,只要不经常这样做。 根据原始文件的目录结构,您可能有另一种选择,即将原始文件分离到目录中,并将缩略图存储在其原始目录中的某个目录中。这样,如果你知道原始的路径,你就已经知道缩略图的大部分路径了。 |
![]() |
my notmypt · 同一类别中所有帖子的默认缩略图 7 年前 |
![]() |
Jacek Kowalewski · 其他图像文件有一些随机散列? 7 年前 |
![]() |
Leth · fancybox缩略图的灵敏填充 8 年前 |
![]() |
Leth · 使旋转木马缩略图在移动设备中具有响应性 8 年前 |
![]() |
Nirav · 亚马逊S3 MP4/MOV URL中的iOS缩略图 10 年前 |