Facebook存储解析:管理最复杂的系统

截止到去年,全球著名的SNS社区网站Facebook拥有150万的活跃用户,根据分析机构comScore的统计,Facebook现在已经跃然稳坐全球社交网站的第一把交椅,目前,其在Alexa的排行榜上排在第五位。

Facebook的用户现在每个月都上传超过800万张数码照片,截至去年夏天,Facebook是全球排名第一的网络照片存储网站,共存储了6.5亿张图片,同时,Facebook还拥有500多万部影片,以及其他内容,其中包括约20万件网络新闻、博客文章以及报告和评论,总计存储的数据量达到数个PB,所有这些数据都需要安全的存储,而且需要马上就进行检索。而这,是一个极为艰巨的任务。

事实上,Facebook就像是一个传奇,很难相信,前哈佛大学二年级学生Mark Zuckerberg创建的Facebook到目前为止仅仅只有5岁,在如此短的时间内积累下如此庞大的数据简直让人不可思议,但是,这的确是事实。

其实,Facebook的增长一直这么快且乐观,在2007年12月,该公司在美国加州的数据中心达到了满载的容量,幸运的是,Facebook的存储管理团队已经看到了存储的未来,并且在数据增长的过程中在美国东海岸的弗吉尼亚州建立了一个数据中心,并在几周前正式上线。不过,能够积极地管理PB级别的数据是很不容易的事情,因此,Facebook的团队一直在寻找可行之道。

“对于存储容量来说,我每天早餐的时候都会看到一个图表,那上面显示着我们正在做的。”Facebook公司存储工程经理Anoop Nagwani表示,他已经在Facebook工作了一年半,“我们每个月都会评价整个我们的组织机构,然后每周都会有一个小组讨论。”

MySQL越来越庞大

Facebook的用户数据存储在MySQL数据库上,Facebook拥有一个全球最大的MySQL数据库系统,骑在超过1800台服务器上运行着MySQL数据库。Facebook选择了MySQL的开放性,因为其代码的可修改性是必要的。Facebook同时还是用了大量的内存缓存服务器(Memcached Server),其速度大幅度超过了MySQL服务器,从而能够更好的跟上存储数据副本的要求。此外,每个晚上,Facebook都会进行数据复制,将Facebook在西海岸数据中心的数据复制到东海岸的数据中心中,并进行一次数据转储,这些数据通过重复数据删除技术专业厂商Data Domain的技术进行重复数据删除后进行长期存储。

Facebook处理图片和视频略有不同,其使用NetApp的NFS系统以及SATA硬盘来进行存储,因为NetApp能够在一个很大的容器中存储很大的对象。但是,随着Facebook上存储的照片数量的增长,NetApp的系统因由元数据已经不堪重负,造成了带宽的瓶颈。

因此,今年晚些时候,Facebook计划推出自己的对象存储系统“Haystack”,该系统被其描述为“一个标示数据所在的用户级别的抽象对象都存储在一个单一的文件中(类似于LUN)”。

Facebook也使用NFS来存储视频,“因为我们有许多设备要存储相同的数据在一线系统,这事最具成本效益和高性能的方式做到这一点。”Nagwani谈到。Facebook的系统正在像Isilon的集群存储系统一样良好工作着。但是Nagwani和他的团队仍然在积极寻找其他平台,比如Sun的Storage 7410统一存储系统,其能够扩展到576TB。

能耗和性能

另一个备受Nagwani和他的团队关注的话题是能耗问题。

“我们一直都在关注电力问题。”他表示,“我们担心我们数据中心机架的能耗。话虽如此,我们正在制定一个解决方案,例如,当我们转移到NetApp,特别是当我们的照片都转移到运行着SATA硬盘的NetApp系统时,我们很看重电力消耗。我们期待系统能够做到的I/O指数,他们提供的容量和性能。而且我们还希望从根本上创建一个cookie刀片设计,我们要知道该系统有多少能力能够支持多少的用户使用。”

正如他的MySQL的数据,Facebook的照片和视频从西海岸数据中心利用快照复制到东海岸的数据中心,这样一来,“如果有人和类型的应用程序或是管理错误,我们可以随时通过快照来返回,或者,在最坏的情况下,出现系统故障,我们能够转移到东海岸,并将数据复制到西海岸那边。”Nagwani表示。

另一个大的问题是,Facebook的团队关注扩展性,因为,大约每周用户上传到Facebook的数据达到25TB,“这是我们的第一要务,是我们的规模、和扩展水平能够领先市场需求的原因。”

“闪存将是我们今年巨大的进步。”——Anoop Nagwani
 
作为其始终创建最佳的数据存储平台的长期战略,Facebook目前正在研究闪存技术,特别是以PCI为基础的高容量闪存设备,加入到固态存储(SSD)的用户大军中去。

“我们正在寻求将高容量的闪存设备到我们的MySQL数据库中去,因为我们的数据库内容需要非常快的I/O操作,这样做就能更快的进行ETL处理、数据仓库并且可以更快的获得数据。”Nagwani表示,“我们也在寻求将Sun的ZFS平台作为我们的一个新的系统,就像我们使用NetApp一样。我们喜欢他们,因为他们有一系列的闪存,因此,我们可以缓存大量的数据,所以基本上我们今年在闪存存储上的进步将是巨大的。”