大师兄

070 | 谷歌的大数据路:从“三驾马车”到一无所有

聊起西方文明,我们通常言必称希腊,古希腊有三大哲学家:苏格拉底、柏拉图和亚里士多德。而聊起大数据,我们通常言必称谷歌,谷歌有“三驾马车”:谷歌文件系统(GFS)、MapReduce和BigTable。

就像古希腊的哲学家照亮了西方文明一般,谷歌的“三驾马车”开启了大数据时代,并为我们指明了大数据的发展方向。

那么,大数据到底是从什么时候火起来的?这个问题并没有一个确切的答案,如果一定要说,2010年算是初现苗头。

但是,作为大数据时代开拓者的谷歌,它的“三架马车”远远早于2010年诞生:谷歌文件系统第一次公开发表的论文是在2003年,MapReduce公开发表的时间是2004年,而BigTable则公开发表于2006年。

谷歌的传统做法向来是先内部使用,等到下一代产品开发得差不多了,再发布这一代的产品。因此,谷歌的“三驾马车”在内部使用的时间更早。

这“三驾马车”,主要是为谷歌的核心搜索业务服务的。作为全球最大的搜索引擎,谷歌需要存储整个互联网的内容,并且要在这个内容的基础上构建倒排索引,这些都是基于“三驾马车”来实现的。

倒排索引是对互联网内容的一种索引方法,是指从搜索词到对应的互联网文档的索引方法。 用户可以通过搜索词去搜索互联网,返回的则是和搜索词相关的文档。之所以称为倒排索引,是因为文档到文档里面的词是顺序的,而从文档里面的词到文档是逆序的。

为了构建倒排索引,谷歌首先需要存储整个互联网的内容,并存储构建倒排索引所需的空间。而在当时的技术条件下,世界上是没有现成的产品可以实现这种倒排索引。所以,谷歌发明了谷歌文件系统,一个基于大量的廉价个人计算机的海量存储系统,它可以轻松地存储整个互联网的内容。

MapReduce则是谷歌构建第一代倒排索引的基础,它可以大规模并行地处理整个互联网上的所有文档,这是相当令人吃惊的。但是,这个索引构建方法有一个天然的缺陷:每次重新构建索引的时候都需要把整个索引全部推翻重来,而无法做到增量更新。而即使以谷歌的计算能力,重新构建一次索引也需要若干天的时间。这种做法最大的弊端是,新的突然更新的消息无法迅速融入到搜索引擎里。

而互联网内容变化的特点是,热点网站变化非常快,很多非热点网站却可能几个月如一日地没有内容更新。为了让索引的构建可以做到增量更新,即只更新有变化的网站,谷歌发明了BigTable。

BigTable是一个键值存储系统。 它可以存储一个主键的不同时期的多个版本的值,是谷歌代号为“咖啡因”的最新一代倒排索引引擎的核心。

在“咖啡因”构建倒排索引引擎里,因为BigTable这个键值系统的存在,互联网地址可以作为某个BigTable的主键使用,因此谷歌不必再把所有互联网地址全部推倒来重新构建索引,而只需要更新那些值已经发生变化的互联网地址。这样一来,网站上出现的新闻可以以秒级的速度被用户搜索到了。

当然,无论是存储还是数据处理的基础架构,适用性都不局限在构建索引上,这些技术渐渐在谷歌内部被广泛应用在其他很多方面。谷歌在发表这些技术的时候,也是把它们作为通用基础架构技术来发表的。

在其他方面的应用,最为著名的是谷歌对用户隐私数据的分析,这些分析促成了谷歌广告业务的蓬勃发展。业界广为流传的互联网模式是“羊毛出在狗身上,猪来买单”,而谷歌就是这个模式的开创者和第一个实践者。

具体来说,谷歌通过提供免费的互联网服务,比如搜索、邮箱、地图等,然后记录并分析用户的使用习惯,有针对性地为用户提供个性化的广告推荐服务。与此同时,谷歌把广告业务卖给其他企业。因为谷歌掌握了大量的数据,其广告推荐服务也非常地高效,所以企业主们愿意为这个服务支付高昂的广告费。

谷歌之所以可以做到个性化推荐,离不开这“三驾马车”:谷歌文件系统和BigTable用来存储和记录用户的隐私信息和产品使用情况,MapReduce用来分析海量数据。

简单来说,通过掌握“三驾马车”这一利器,谷歌具备了存储和分析海量数据的能力,其个性化广告系统就犹如永动的印钞机,不断地为谷歌赚取财富。这也正是谷歌带给全世界的互联网模式。

看懂这个互联网模式并不难,难的是除了谷歌,其他互联网公司并没有具备这样强大的数据存储、分析和处理能力。而谷歌并没有打算开放这些独家技术,也不打算通过售卖这些技术给其他互联网公司来赚钱。

这种模式赚钱如流水,因此其他互联网公司都趋之若鹜,希望构建同样强大的数据存储、分析和处理平台。“大数据”这个概念也因此被提出,从此作为一个产业开始爆发。

公允地讲,虽然谷歌扮演了大数据先驱者的角色,但是这个概念并不是它提出来的,而谷歌也从未真正通过给用户提供大数据分析平台服务的方式赚到钱,甚至在后来的Hadoop大数据开源社区里也毫无影响力。

除了谷歌,当时有众多互联网企业在诞生和发展,比如Facebook、LinkedIn,比如当时还如日中天的雅虎,又比如打算和谷歌在搜索领域竞争的微软。当这些公司意识到互联网前进的方向就是那个炙手可热的“大数据”概念,和这个概念下需要的海量存储和数据处理系统时,它们就需要面临艰难的抉择了。

有些公司,比如微软,对自己充满信心,决定像谷歌一样自己构建一套系统。有关微软这套系统的故事,我们会在后续的文章里继续讲解。有些公司,比如雅虎和Facebook,觉得凭借一己之力很难做到,于是开始抱团取暖,共同构建了后来闻名于世的Hadoop生态圈。

凭心而论,在很长一段时间里,Hadoop和谷歌内部的系统相比非常落后和不堪一击。然而,Hadoop这个毫无先进性可言的系统,凭借着人多力量大,竟也慢慢成长起来了。 这种成长包括两方面:

  • 一方面是,Hadoop的生态圈越来越大,用的人越来越多。越来越多的用户也在不断刺激着Hadoop的创新,这些创新导致Hadoop和谷歌的内部技术渐行渐远;
  • 另外一方面是,Hadoop因为用户多,成为了事实上的标准。

待Hadoop成气候,受无数人和企业追捧的时候,谷歌那个很先进的“三驾马车”则彻底失去了先机。后来,谷歌开始做云计算,“三驾马车”作为云计算很重要的一部分,谷歌却需要为用户提供Hadoop或者类似Hadoop的服务。

其中一个服务叫作HBase,它是BigTable在Hadoop生态圈里的山寨版。当谷歌试图把自己内部真正的BigTable作为云服务提供给用户时,却不得不为Hadoop实现HBase这个山寨版的接口。本来自己是鼻祖,谷歌现在却必须兼容一个山寨版才能让用户买账,可想而知实现这些接口的程序员们内心肯定在滴血。

谷歌在大数据上,可谓“起个大早,赶个晚集”,最后一无所获。它给大家指明了方向,但是并没有开放它的系统,随后众多互联网公司们联合打造了Hadoop生态圈,并让Hadoop成为事实上的标准。在这之后,谷歌就彻底丧失了在大数据时代的先发优势。后来谷歌对外提供的云服务也不得不和这个Hadoop生态圈兼容。

在我看来,对于这样的结果,也只能怪谷歌自己在开放架构上太过保守了。