读书人

【转】经典论文通译导读之《Finding a

发布时间: 2013-09-07 14:12:44 作者: rapoo

【转】经典论文翻译导读之《Finding a needle in Haystack: Facebook’s photo storage》

【译者预读】面对海量小文件的存储和检索,Google发表了GFS,淘宝开源了TFS,而Facebook又是如何应对千亿级别的图片存储、每秒百万级别的图片查询?Facebook与同样提供了海量图片服务的淘宝,解决方案有何异同?本篇文章,为您揭晓。

本篇论文的原文可谓通俗易懂、行云流水、结构清晰、图文并茂……正如作者所说的——“替换Facebook的图片存储系统就像高速公路上给汽车换轮子,我们无法去追求完美的设计……我们花费了很多的注意力来保持它的简单”,本篇论文也是一样,没有牵扯空洞的庞大架构、也没有晦涩零散的陈述,有的是对痛点的反思,对目标的分解,条理清晰,按部就班。既描述了宏观的整体流程,又推导了细节难点的技术突破过程。以至于译者都不需要在文中插入过多备注和解读了^_^。不过在文章末尾,译者以淘宝的解决方案作为对比,阐述了文章中的一些精髓的突破点,以供读者参考。

摘要

本篇论文描述了Haystack,一个为Facebook的照片应用而专门优化定制的对象存储系统。Facebook当前存储了超过260 billion的图片,相当于20PB的数据。用户每个星期还会上传1 billion的新照片(60TB),Facebook在峰值时需提供每秒查询超过1 million图片的能力。相比我们以前的方案(基于NAS和NFS),Haystack提供了一个成本更低的、性能更高的解决方案。我们观察到一个非常关键的问题:传统的设计因为元数据查询而导致了过多的磁盘操作。我们竭尽全力的减少每个图片的元数据,让Haystack能在内存中执行所有的元数据查询。这个突破让系统腾出了更多的性能来读取真实的数据,增加了整体的吞吐量。

?

1 介绍

分享照片是Facebook最受欢迎的功能之一。迄今为止,用户已经上传了超过65 billion的图片,使得Facebook成为世界上最大的图片分享网站。对每个上传的照片,Facebook生成和存储4种不同大小的图片(比如在某些场景下只需展示缩略图),这就产生了超过260 billion张图片、超过20PB的数据。用户每个星期还在上传1 billion的新照片(60TB),Facebook峰值时需要提供每秒查询1 million张图片的能力。这些数字未来还会不断增长,图片存储对Facebook的基础设施提出了一个巨大的挑战。

这篇论文介绍了Haystack的设计和实现,它已作为Facebook的图片存储系统投入生产环境24个月了。Haystack是一个为Facebook上分享照片而设计的对象存储技术,在这个应用场景中,每个数据只会写入一次、读操作频繁、从不修改、很少删除。在Facebook遭遇的负荷下,传统的文件系统性能很差,优化定制出Haystack是大势所趋。

根据我们的经验,传统基于POSIX的文件系统的缺点主要是目录和每个文件的元数据。对于图片应用,很多元数据(比如文件权限),是无用的而且浪费了很多存储容量。而且更大的性能消耗在于文件的元数据必须从磁盘读到内存来定位文件。文件规模较小时这些花费无关紧要,然而面对几百billion的图片和PB级别的数据,访问元数据就是吞吐量瓶颈所在。这是我们从之前(NAS+NFS)方案中总结的血的教训。通常情况下,我们读取单个照片就需要好几个磁盘操作:一个(有时候更多)转换文件名为inode number,另一个从磁盘上读取inode,最后一个读取文件本身。简单来说,为了查询元数据使用磁盘I/O是限制吞吐量的重要因素。在实际生产环境中,我们必须依赖内容分发网络(CDN,比如Akamai)来支撑主要的读取流量,即使如此,文件元数据的大小和I/O同样对整体系统有很大影响。

了解传统途径的缺点后,我们设计了Haystack来达到4个主要目标:

读书人网 >软件架构设计

热点推荐