Prism:来自Facebook的真正的大数据项目

如今随便哪个网站都可能需要处理数量巨大的在线数据,而Facebook早在五年前就已经在处理这个问题了。Facebook技术牛人Jay Parikh说现在这些网站处理大数据比他们当年容易多了。

这是因为过去几年中许多网络公司(包括Facebook)都投入了很多精力去开发能够在上万台服务器上分析处理线上数据的软件平台。当这些处理“大数据”的软件完成之后,这些公司将成果公开了,任何感兴趣的人都可以使用。

Facebook与yahoo一样是开发推广hadoop的急先锋。Hadoop是一款很厉害的软件平台,用来处理和分析现代网络产生的海量数据。Yahoo一开始开源这款软件的时候是用作搭建自己搜索引擎所需的索引信息的,但是别的公司很快就将它用于自己的线上数据分析中,并且为了达到这个目的不断的增强完善Hadoop。

这些努力的结果是Hadoop平台可以处理超过100PB(即十亿GB)的数据。“五年前当我们开始用这些技术的时候,(这个平台)在计算的类型和速度上都还有很多的局限性。在开源社区的努力下,这些局限性和障碍都被解决了,所以人们可以比我们当年更快的完成任务。”Parikh说。他现在管理着Facebook运行所需的数量巨大的硬件和软件架构。

但是现在的Facebook所面临的数据量比过去还要大多了,现有的平台像Hadoop处理这样大的数据还是有很多局限性需要解决。在本周Facebook门罗园区总部的一个有记者参与的报告中,Parikh透露公司已经开发了两个比Hadoop伸缩性更好的新平台,而且Facebook打算将两个平台都开源出来。

第一个平台名字叫做Corona,它允许你在许多Hadoop服务器上运行大量的任务,不需要担心整个集群(被单个任务搞)崩溃。另外一个更有吸引力,叫做Prism,能够运行一个超大的、能够将全球数据中心都连起来的Hadoop集群。

Parikh说这个系统能够“让数据按照我们的要求任意移动,不管是俄勒冈州的普赖恩维尔、北卡州的Forest市、还是瑞典。”

Hadoop建立在十年前Google的两篇描述大规模软件平台(原理)的论文之上,Google用这两篇论文中的技术构造了GFS和MapReduce平台。GFS是谷歌文件系统的简称,能够将数据分布存储在上千台服务器上;MapReduce让你利用所有服务器的计算资源进行计算得到想要的结果。Hadoop的工作原理与之类似,对应GFS和MapReduce的叫做HDFS和Hadoop MapReduce。

这两个Hadoop平台已经Yahoo和Facebook等公司用了几年,但是它们不完美,尤其是在Facebook的用户数超过9亿之后这两个系统的问题越来越明显。最引人注目的问题就是“单点错误”特性,即如果管理集群的主服务器挂掉了,整个集群就(至少暂时的)挂掉了。

最近几个月,Facebook开发了一种叫做AvatarNode的技术来避免HDFS平台的单点错误,而Hadoop开源社区实现了一个类似的HA NameNode方案,提高了可用性。但是MapReduce还是存在单点失效的问题。现在Facebook通过Corona解决了这个问题。

传统上MapReduc使用一个单独的“任务跟踪器”来管理服务器集群中的任务,而Corona创建多个任务跟踪器。Parikh说这帮助Facebook在同样的MapReduce平台上执行的任务数量大大增加,总体吞吐量提高了,从而更多的小组和产品可以在集群上运行任务。

过去如果任务跟踪器出现了问题,就会导致系统中所有的任务都死掉了,逼得你把所有东西都重启一遍。只要有一个服务器故障了整个系统都会受到影响。现在系统中有了很多迷你任务跟踪器,只负责各自的任务。

Tomer Shiran是硅谷创业公司MapR最早的一批员工,这家公司发行的Hadoop版本中包含了类似的功能,他同时指出目前开源版本的Hadoop中还没有类似的多任务跟踪器实现。他见过某个版本的Corona,觉得在这个平台上MapReduce任务的启动速度也快了很多。

关于Corona平台Jay Parikh说的很少,但是显然这个系统已经在Facebook内部使用了——而且确实非常需要。Parikh说Facebook运行着世界上最大的Hadoop集群,包含超过100PB的数据,半个小时就能处理105TB的数据。

但是这个集群就快满足不了Facebook了。9亿用户不断的更新状态,传照片、视频,写评论——数据增长的速度你懂的。这就是Parikh跟同事构建跨数据中心的集群Prism的原因。

传统上由于数据中心之间的网络不够快,Hadoop计算一般不在地理上分离的数据中心之间运行。“Hadoop的一大缺陷就是所有的服务器都必须紧挨着,”他说“系统的耦合性非常高,如果服务器之间的(数据传送)延迟增加几十微秒,整个系统就会慢到爆。”

有了Prism就不一样了。简而言之它的特长就是能够根据需要在不同的网络计算节点之间自动的复制和传送数据。“这使得我们能够建立多个分离的数据中心但是在系统中看到的还是一个系统,”他说。“我们可以根据成本、性能、技术因素来移动数据……我们已经不再局限于单个数据中心的计算能力了。”

Prism让人联想到谷歌的Spanner平台。关于Spanner的消息不多——谷歌在其基础架构的设计实现上比较低调——但是在09年求点,谷歌公开描述这个系统为“一个存储和计算系统,利用了我们所有的数据中心(的磁盘和计算能力),根据资源的约束和使用模式自动的进行数据的复制和计算的重分布。”

谷歌宣称这个平台提供“在任何服务器上自动分配资源的能力”,涵盖了全球36个数据中心。

Parikh承认Prism跟Spanner类似,但是他也谨慎的指出对于Spanner他知道的不多。而且Prism可能在一个数据中心当掉的时候即时的将数据重新分布(到别的中心中去)。

Tomer Shiran说这类平台只在谷歌或Facebook内部使用,还没有开放的实现。但是他也指出,目前也没有多少公司需要这么高级的东西,“还没有公司(数据量)达到了谷歌处理的数据的量级“。

Facebook目前还没有实际的部署Prism,Parikh也没有给出明确的时间。但是他说到那时可能就会开源了。Corona系统也会开源。确实现在还没有公司需要处理像谷歌和Facebook这么多的线上数据,但是在未来可能会的。“他们需要面对下一波数据量级增长的挑战,”Parikh说。