目前,Facebook已经发展成为全球最大的社交网络,拥有超过10亿活跃用户。九年的成长历程中,Facebook不仅仅遇到了一般公司发展过程中常见的麻烦,也因为巨大的用户数量级,遭遇更多常人难以想象的“大数据”。Facebook崛起之路上,究竟有哪些顶级数据天才、顶尖数据技术的支持呢?以下是文章全文:
杰伊·帕瑞克(Jay Parikh)的办公桌,就放置在美国加州门洛帕克(Menlo Park)Facebook总部16号楼里,而他的行政助理吉尼·萨穆埃尔(Genie Samuel),就在离他不远的地方工作。每隔一段时间,帕瑞克都会听到萨穆埃尔咯咯地傻笑,而这就意味着,她很有可能又在Facebook上传了一些令人尴尬的照片,并且将帕瑞克标记了出来。通常情况下,帕瑞克自己Facebook页面上的通知,总会紧跟着她的笑声浮现。而如果通知没有如约而至的话,他就可能就要忙碌起来了。
帕瑞克是Facebook基础设施工程部门的副总裁,负责这个全球最大社交网络的硬件和软件。如果页面上的通知,没有在几秒钟之内直接快速出现,那么他就要仔细检查自己的工作,然后努力找到造成这种情况的原因了。麻烦的是,Facebook的基础设施,已经扩展到全球四个不同的地方,四个大型数据中心,数十万台计算机服务器,除此之外,还有更多的软件工具——深深吸一口气,你也很难在不间断的情况下,说完它们的名字。而导致通知未能出现的原因,就埋藏在这个网络的某一个角落中。
这就是为什么帕瑞克和他的团队,会打造像Scuba这样的工具。Scuba是一个具有划时代意义的软件平台,它可以帮助Facebook的工程师们,及时对公司基础设施数据进行挖掘分析。通常情况下,处理如此海量的数据是需要耗费些时间的。你甚至可能需要几个小时的时间才能处理完所有的事情。不过,对Scuba来说这就不再是问题,它是一种(in memory)内存式的数据存储——将所有的数据,存储在数百个计算机服务器高速内存中(而不是硬盘)——这意味着你可以更实时地进行数据查询。
帕瑞克表示:“它让我们能够了解基础设施工作情况——我们的服务器做得如何,我们的网络表现如何,不同地软件系统交互的如何。所以如果吉尼在一张照片中标记了我,而通知在几秒钟之内都没有显现,我们就可以查看Scuba来查找问题。”
九年之前,马克·扎克伯格(Mark Zuckerberg)在哈佛的宿舍里推出了震惊世界的Facebook,而现在它已经一举发展成了世界上最流行的社交网络。扎克伯格和他的公司,建立了这个星球上最先进的工程业务,而有趣的是,他们这样做的主要原因实在只是由于迫不得已。Facebook面临着一个独特而艰巨的任务——服务10亿个不同的用户,并且要去处理10亿个不同的消息、照片、视频,以及很多其他的数据源——这一任务对的技术要求,比你想象的还要多。
是的,Facebook的工程大军中,不乏像拉尔斯·拉斯穆森(Lars Rasmussen)这样,创作了社交搜索工具Graph Search的天才,也有帮助美化工具、测试、部署应用程序的人。而现在,Facebook的硬件工程师,也拥有像阿米尔·迈克尔(Amir Michael)这样的天才,他们负责服务器设计、存储设备以及整个数据中心管理。
Facebook还打造了一个,由顶级工程师组成的数据处理团队——这项工作在现代网络中的重要性,已经日趋明显。Scuba仅仅只是Facebook众多“大数据”(Big Data)软件平台的冰山一角——利用分布式系统,让数百上千个计算机上,可以协同分散处理一个单一的任务。
包括拉古·穆尔蒂(Raghu Murthy),艾弗里·清(,Avery Ching),约什·梅茨勒(Josh Metzler)在内的工程师们,打造了这些出色工具。它们不仅仅能够排除Facebook数据中心内的故障,还能帮助Faccebook数据科学家,分析Facebook的在线应用的有效性,以及用户的行为。
虽然谷歌(微博)的“大数据”平台,仍然被公认为全网最领先的。但是随着Facebook开始拓展自己的网络帝国,这家社交网络巨头并没有被谷歌甩开太远,而与谷歌不同的是,Facebook希望与全世界共享它的软件。谷歌总是在分享自己的想法、思路,而Facebook则是在分享自己的代码,并希望其他人能够好好利用。帕瑞克表示,“我们公司的使命,是让全世界连接在一起,并且变得更开放。而在我们进行基础设施建设的同时,我们也在帮助促进达成这一使命。”
News Feed的故障
Facebook数据团队的创始人,叫作杰夫·哈梅巴赫(Jeff Hammerbacher)。与扎克伯格一样,哈梅巴赫也曾经是哈佛的一名学生,不过他的专业是数学。在2006年春天接受Facebook的工作之前,他曾在纽约贝尔斯登(Bear Sterns)担任数据科学家一职。
哈梅巴赫认为Facebook的数据操作灵感,要追溯到一天下午,那时他还在贝尔斯登,路透社的数据订阅(data feed)突然出现了故障。而犹豫数据订阅瘫痪,没有人能进行交易。故障持续了一个钟头,而造成问题的原因,让人有些哭笑不得
——负责这项任务的那个家伙,出门吃了个午饭。
哈梅巴赫突然意识到,这次严重的故障证明,数据工具的重要性丝毫不亚于数据专家。哈梅巴赫回忆说,“我突然发现了一个空白——需要创建一个完整的系统,采集数据,并且全部跑完整个数据模型——在每一个点上,尽可能优化系统。”
这基本上简单地概括了他在Facebook的工作。Facebook最初聘请他,是作为一名数据科学家——帮助通过信息分析理解公司运作。但是由于路透数据订阅失误,给他留下了深刻的印象, 哈梅巴赫更近一步。
他打造了一个团队,管理整个公司的数据。这一团队不仅分析数据,还创建并运行一个负责收集、处理数据的工具。
他刚加入Facebook的时候,这家公司还在使用老旧的甲骨文(Oracle)数据仓库处理信息。但是这样的软件设计,已经无法跟上Facebook迅速发展的脚步。
哈梅巴赫还推荐Facebook使用开源软件平台Hadoop——Hadoop可以将数据分散到商用服务器的海洋,这些机器将协同处理数据,让它们变成真正有意义的信息。这有着很强的诱惑力,因为商用服务器的价格往往相对较低,而当你的数据扩展变多的时候,你只需要添加更多的机器就可以轻松应对了。
雅虎利用Hadoop构建了网络搜索引擎索引,但是哈梅巴赫和Facebook,则把它用作了帮助公司数据科学家的方法——能够比甲骨文的数据仓库,处理更大量的信息。
而Facebook还研究了一个叫作Hive(蜂巢)的产品——分析师可以应用这一工具,使用一种与结构化查询语言(SQL)相似的语言,处理Hadoop上的数据(SQL早在20世纪80年代以来,就得到了广泛应用)。而Hive也很快发展成为了Facebook主要的在线广告性能分析工具。
2008年秋天,哈梅巴赫离开了Facebook,并帮助创建了Cloudera公司。
未来的Hadoop
现在,无论是Twitter还是eBay或是LinkedIn在使用Hadoop,而Facebook则将这一分布式系统基础架构上升到了新的极致。并且,Hadoop正致力于将此服务平台做到极致。基础设施负责人杰伊·帕瑞克曾表示,Facebook运行着世界上最大的Hadoop计算机集群。Facebook的Hadoop集群中的一个,就涉及了超过4000台机器,存储着超过100PB(petabytes)字节的数据,也就是数百万gigabytes的数据。
这个集群是非常庞大,甚至已经超越了四个数据中心。Facebook使用Hadoop服务器来分配分布于各离散数据中心的数据空间,使每次的寻址过程自主进行。Facebook工程师拉古·穆尔蒂说。“我们的规划总是目光长远的,但是,我们必须通过这个过程,将所有数据迁移到新的地方去。”几年之前,拉古·穆尔蒂还在完成斯坦福大学Ph.D.项目的时候,被杰夫·哈梅巴赫;目前为止,他作为Facebook大数据业务团队的中坚力量,已工作四年有余。
Facebook信誓旦旦地表示绝不会再犯类似的错误,于是开始着手建立一个跨越多个数据中心的Hadoop集群。该项目由穆尔蒂负责,他曾经参与搭建雅虎(Yahoo)的pre-Hadoop分布式计算系统,并吸引到了哈梅巴赫的注意。如今,穆尔蒂已经参与过,包括Hive在内的许多Facebook的重要项目的研发。但是,这还是有些许不同——Hadoop的设计并没有考虑多设备之上运行情况。通常情况下,由于需要服务器之间的高负载通信,集群被限制在了单一数据中心。
穆尔蒂和他的团队成员,在整个Facebook地基础设施上,推出了一个叫作Prism平台。典型的Hadoop集群,通常是由单一的“命名空间”(namespace)管理,但是Prism则开辟出多个命名空间,在一个相同的物理集群之上,创造了很多“逻辑集群”。
这些“命名空间”可以划分给不同的Facebook团队,这样每一个团队都能够得到属于自己的命名空间,不过仍然全都在使用同一个数据集,而这个数据集可以跨越多个数据中心。这里的诀窍是,当一个团队运行一项工作的时候,它可以复制这项工作所需要的特定的数据,并且把它移进一个单一的数据中心。穆尔蒂表示,“我们将这些能力下放到独立的小团队,因为他们能够更好的了解网站特殊部分的独特需要。”
根据穆尔蒂,这一系统理论上,可以扩展到无限多个服务器上。这意味着,Facebook不必再去担心,需要打造另一个新的数据中心了。对于数据团队的托斯来说,这意味着他能够保证这一基础设施平稳运行——这有一个额外的好处,他表示,“把整个Hadooop集群放在一个数据中心中,让我害怕极了,而Prism能够帮助在这一点上提供帮助。”
Prism只是众多扩展Hadoop的努力中的一个。前任雅虎雇员艾弗里·清带领的团队,最近刚刚部署了一个新的叫作Corona的平台,允许多个工作,在一个单一的Hadoop集群之上,而并不会导致崩溃。
穆尔蒂还帮助建造了一个叫作Peregrine的工具,能够让查询Hadoop数据的速度比标准情况快很多。Hadoop的设计初衷是一个“批处理系统”,这意味着,通常需要在运行作业的时候进行等候,但是和Impala相似的是(一个由哈梅巴赫和Cloudera创建的系统),Peregrine可以让平台更接近实时。
Facebook并没有与外界共享所有的软件,但是却分享了Corona,而如果以此作为习惯参考,它很有可能会在未来分享更多的代码。这就是为什么像艾弗里这样的工程师会在这里工作,“在Facebook,我们比起他人更早地遇到问题,而其他人就可以从中受益,他们不需要重蹈覆辙,也不需要重头再来。”
数据天才们的糖果乐园
Hadoop是Facebook数据操作的基石,这种情况还将延续很多年。但是随着Scuba等工具的兴起,Facebook也将转投新的方向。
Scuba是一款正在快速增长的内存数据储存工具,设计的主要目的是为了极大的提高数据信息分析的速度。这款工具是由Facebook公司的工程师团队开发的,该团队中包括一位在顶级编程网站Top Coder上,排名第一的工程师约什·梅茨勒。Scuba在Facebook的数据中心中运行,帮助该公司收集基础设施的信息,并这些log压缩在数以百计的服务器内存中。所以,这些数据可以被即时查询到。
帕瑞克表示:“这就像Excel的数据透视表一样。即使你在处理数以百万计的数据,你也可以在亚秒级的响应时间里得到结果。”
是的,这个项目看起来似乎与Peregrine有些重叠——至少在一些部分上存在重复。但就像杰夫·哈梅巴赫指出的,这款工具是Facebook精神的一部分。“Facebook做事的方式,就是寻找最短路径的解决方案,而并非打造一款大而全的系统,来处理所有问题。”就像Facebook的其他项目一样,Scuba是在公司级的黑客马拉松(hackathon)中脱颖而出的。工程师遇到问题就自己解决,而非等到其他项目来帮他们解决问题。
这种情况在Facebook中随处可见。Santosh Janardhan曾就职于PayPal和YouTube,但是在他眼中,这些公司的工作相比之下非常微不足道。“Facebook击败了他们。对于我来讲,在这里我感觉到了压力。”工程师在这里希望解决更大的问题。“如果你是个技术迷,那么这里就像是糖果乐园。”