Facebook 数据天才之一杰伊-帕瑞克 北京时间 2 月 5 日消息,目前,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 击败了他们。对于我来讲,在这里我感觉到了压力。”工程师在这里希望解决更大的问题。“如果你是个技术迷,那么这里就像是糖果乐园。” |