如何存储千兆字节的大型随机访问文件?

可以说,我有几千个大文件(每个1-800mb),都是随机访问的,新上传的文件访问非常频繁,随着时间的推移,访问时间以反方形方式下降,但在那里可能是使用旧文件的随机高峰。

总吞吐量在2-4Gbit范围内。

我正在寻找一个自我托pipe的解决scheme,而不是亚马逊的产品,因为它们太贵了。

我大致想到的是这样的:

昂贵的“主”服务器与几个15k rpm的SAS驱动器(或固态硬盘)将托pipe新的文件,只是上传到网站。 一旦下载速度下降(或文件达到一定的年龄),其移动到一个更便宜的存档节点。

编辑:文件将通过HTTP服务于各种各样的用户。 服务器正在运行FC5。 大多需要读取访问权限,但写入也是重要的。

现在我得到了一个简单的2服务器设置最大的一个千兆位,我得到疯狂的IO。 该框格式化为4K块。 会不会增加说…. 1024K有一个巨大的影响?

如果您只在本地提供这些数据,则可以使用现成的组件轻松组装一台具有几TB存储空间的服务器。 组合几千兆网卡可以为您提供networking吞吐量。

如果内容必须在更远的距离上传送,则可能会更好地将数据复制到多个框中。 如果你能负担得起,你可以完全复制数据,如果文件不会被覆盖,粗糙的基于时间戳的复制脚本可以工作。

否则,你可以看看并行文件系统的实现; 如果你想要一个免费的,你可以看看Lustre(用于Linux)或Hadoop(多平台)。

所有这些都是重要的:

1)大量的RAM

2)多个网卡和/或前端,以减less瓶颈

3)反向代理服务器,例如Squid(参见例如http://www.visolve.com/squid/whitepapers/reverseproxy.php )或清漆

4)磁盘的RAID设置(条纹或条纹/镜像组合可能)

5)select正确的文件系统,是的,块大小。 XFS曾经是大量数据的好表演,可能现在ZFS更好。

这些都应该有所帮助。 根据您的目标需求(即您想要使用的总净带宽,单卡吞吐量,未读和未查找的磁盘的最大吞吐量等),您需要执行多less和需要执行哪些操作?

你提出的是一个自动化的分层存储解决scheme。 这不是一个微不足道的成就。 一些像EMC这样的高端存储厂商正在推销自动化分层解决scheme,但是它们面向高端企业局域网解决scheme,并带有相应的价格标签。

你会想看看Sun公司的ZFS存储系统,因为它宣传了你所追求的function,并且可能更接近于价格点。

http://blogs.oracle.com/studler/entry/zfs_and_the_hybrid_storage

如果你不想要一个DIY分层存储选项(如果必须的话,我可能会使用Windows 2008 R2中的文件系统pipe理任务 ),我强烈build议你看一下Compellent的解决scheme。 您不需要任何额外的节点(本身)来降低成本的存储空间,因为您可以简单地通过您select的操作系统安装一些快速磁盘和一些廉价的慢速磁盘。 Compellent的 OOBfunction集是基于访问的HSM。 该解决scheme还提供了可扩展性。 现在这个方法可能会很昂贵(而且你没有提供前景),但是从长远来看,它可能比试图pipe理和维护自己的解决scheme更具成本效益。

不清楚你在哪个操作系统上运行? 或者,如果你计划在这些文件被自动移动或写一个脚本来处理它吗? 当你说访问你的意思是通过networking(HTTP)或其他方法?

我曾在一个社交网站,有一个“锁箱”的文件。 随着网站的增长,我们每天在仓库里烧了大约200GB。

我们使用每天晚上运行的networking统计信息来跟踪繁忙的文件。 如果文件列在顶部文件列表中,则脚本将更新数据库并将文件设置为“高优先级”。 这告诉networking应用程序使用高优先级的URL,并确保文件在快速存储系统上。

直到他们买得起可扩展的SAN解决scheme,这个工作才算合理。

还没有听到足够的细节,但知道我所知道的,我会看到一个基本的1U服务器(或两个HA),有很多RAM运行您select的操作系统/存储软件,连接到一个Xiotech Emprise 5000。假设你可以在内存中安装一个好的工作集,那么通过主轴的IOPS将是非常宽泛的随机I / O,这就是盒子的最佳select。 您可能可以做一个单一的服务器(64GB)/单arrays(2.4TB)组合为20K下触摸。

我们用VoD服务器来做这件事情,我们使用许多具有大量内存的非集群服务器作为本地磁盘的caching,而本地磁盘依次是多个SAS连接的25×2.5“15krpm磁盘,然后通过多个1Gb网卡或双10Gb网卡,我们花了很长时间才弄清了PCIe插槽/ SAS-HBA位置以及RAID群集和磁盘块大小等设置。

有趣的问题。 看起来你正在主持一堆盗版电影:P

除了笑话,我认为你的解决scheme可能是一个很好的起点。 在制定一个太昂贵或者太有限的解决scheme之前,这就是你想要熟悉的问题。

我会做这样的事情:

  • (假设或做一个性能testing)瓶颈是用户最有可能同时访问同一文件的不同部分 – 因为人们将有不同的下载速度,并在不同的时间login;
  • 因此,为了达到最佳的吞吐量,你应该把最需要的文件加载到RAM或并行types的存储器中(例如,将它们复制到许多磁盘上并分配用户的访问权限)。
  • ergo,你可能想要有几个前端服务器 ,每个都有大量的RAM,以及一个磁盘空间很大的后台服务器
  • 也放置一个反向代理或类似的东西来分配redirect用户到正确的服务器(即服务器A拥有电影#1-#20,服务器B拥有#21-40,等等)
  • 最后,根据下载频率,一年中的时间,名人的生日和什么,放置一个pipe理节点将电影从后端存储移动到前端

(如果有效的话,我可以在服务器完成时使用服务器吗?我想运行一些尖峰neural network实验)