腾讯科技援引国外媒体报道称,谷歌将GPS天线和高精度的原子钟装到了它的服务器中,并通过Spanner系统创造性地让全球多个数据中心和数百万台服务器之间保持信息同步。
谷歌的神奇魔棒
三年前,有人问一位名为Vijay Gill的谷歌高级工程师,如果给他一根魔棒,他会用它来做什么。
当时,Gill正帮助谷歌运行其网络帝国背后的庞大数据中心网络。在美国旧金山商业区的一次会议上,他谈论了全球业务所面临的独特挑战。负责监管Facebook数据中心的Jonathan Heilger坐在离Gill几个席位的地方。正是他问了Gill这个问题:如果他有一个魔棒,他会给谷歌的数据中心增添一些什么东西。
Gill在回答前略微犹豫了一下。在回答的时候,他似乎显得有些含糊其辞。但是,他的意思似乎是他会用这根魔棒来打造一个单独的系统,自动而迅速地处理所有谷歌数据中心的信息。接着,他暗示谷歌已经建立了一个这样的系统。“你如何在全球范围内管理这个系统,并进行优化呢?”他说,“这就是最有趣的部分。”
这听起来是一个非常棘手的问题。但是,在大约四个月后,谷歌又透露了另一条消息。在蒙大拿山区的一次研讨会上,谷歌最举足轻重的工程师之一Jeff Dean透露,该网络巨头正在研制一种名为Spanner的东西,并形容它是“跨越我们所有数据中心的存储和计算系统”。他表示,该计划的目的是同时处理全球“数百乃至数千个”数据中心的1000万台服务器中的数据。
该项目的覆盖范围令人难以想象。但是,迪恩并未透露相关详情。而且,目前尚不清楚,谷歌是否正在其现有的数据中心使用这个平台。
Spanner项目
本周,据报道,谷歌已发表了一篇研究论文,详细阐述了Spanner的情况。谷歌声称,这是首个能在全球数据中心网络快速存储和检索信息的数据库,而且,它还能够保持信息的“一致性”,即任何用户在任何时候均能够看到同样的信息。多年来,它一直推动着该公司广告系统和其他各种网络服务的发展。
Spanner借用了谷歌为其数据中心打造的其他大规模软件平台的技术,但是,从本质上来说,它是全新的东西。Spanner接入到了装有超精确原子钟或GPS天线(类似于智能手机上的那种)的服务器网络上,并利用这些计时器在这样庞大的网络上精确地同步发行数据。你没有听错,谷歌将GPS天线和精确的原子钟装到了它的服务器中。
“这是很了不起的事情,而且确实具有创造性。”数据存储公司Basho的首席架构师Andy Gross说。该公司开发的开源数据库Riak已运行在数千台服务器上,但是仍然没有Spanner的覆盖面广。“传统的智慧认为,在全球范围内像这样的时间同步是不现实的。”
Spanner项目听起来就像是一项不同寻常的事业,当然,它也要处理日常工作中遇到的一般问题。很少有公司像谷歌这样被迫如此迅速地处理如此多的数据。但是,谷歌大规模数据中心的技术总会流向技术领域中的其他公司。最典型的例子就是广泛使用的大数据平台Hadoop,它就模拟了谷歌的技术。而且,这种发展趋势可能会持续下去。
“如果你希望知道未来大规模、高性能的数据处理架构是什么样子的,我建议你读一读谷歌刚刚发表的研究论文。”Hadoop开源软件整体方案供应商Cloudera 公司的CEO Mike Olson最近在硅谷的一次活动中说。据Cloudera公司的产品副总裁Charles Zedlewski称,该公司(在招聘谷歌前工程师后)已听说了Spanner,它最终可能会将该论文中的思想转变成它的软件。
Facebook正在打造类似于Spanner的系统,其目的也是同时处理多个数据中心的信息。我们通过与Facebook交流获悉,该公司的这个系统名为Prism,与谷歌的Spanner完全不同。但是,它表明其他公司现在正在想法处理谷歌在过去几年中遇到的问题。
这篇有关Spanner的论文有很多人署名,但其中有两位非常杰出:杰夫-迪恩和Sanjay Ghemawat。在从昔日电脑巨头DEC研究部门跳槽到谷歌后,迪恩和格玛沃特帮助谷歌设计了三个大规模软件平台,它们对于其他互联网公司产生了较大的影响。MapReduce和Google File System最终导致了Hadoop的诞生,而BigTable帮助孕育出了一系列适合于存储和检索大量信息的NoSQL数据库。
Spanner利用了BigTable的技术,但是它走得更远。BigTable常用于在单个数据中心的数千台服务器上存储信息,而Spanner则更进一步,在数百万个服务器和多个数据中心存储信息。
这个平台最具创意的部分就是谷歌所谓的TrueTime API。API是应用程序编程接口的意思,但在这里,它是指其服务器接入的中央数据传送专线。基本上,TrueTime就使用GPS天线和原子钟来维持谷歌整个网络的运行。GPS天线利用了全球定位系统(Global Position System),该系统利用一系列太空卫星来跟踪时间和地理位置,而原子钟则利用单个原子属性来保持准确的时间。
用计时器保证服务器网络同步
谷歌拒绝讨论Spanner。“这篇论文已说得很清楚了。”该公司发言人说。但是,她指出了该论文中突出强调API重要性的部分。“我们的设计中有一个方面非常突出。”这篇论文写道,“Spanner功能组的关键就是TrueTime。”
要理解TrueTime,你就必须弄清楚现有数据库的局限性。现在有很多数据库是专门用于在数千台服务器上存储数据的。其中大多数借鉴了谷歌的BigTable数据库或亚马逊的类似存储系统Dynamo。它们运行良好,但是却无法同时处理多个数据中心的信息——至少不能够让多个数据中心的信息始终保持一致。
据Basho公司的首席架构师安迪-格罗斯称,问题的关键在于服务器必须不断地交流,以确保它们能够正确存储和检索数据。Basho公司的Riak数据库是在亚马逊Dynamo的基础上开发出来的。如果你在多个地理位置的数据中心来运行它,你就可能会让系统崩溃。“你必须不断地交流,以确定所有交易的秩序是正确的。”格罗斯说,“潜在的制约因素通常是建立快速数据库的成本高得令人望而却步。”
大数据公司10gen的首席执行官Max Schireson从不同的角度进行了解释。该公司的MongoDB数据库效法了BigTable。Schireson称,假设你用一种网络服务在两个银行账户之间转账,其中一个银行账户在欧洲,另一个在亚洲。如果你在欧洲,这种转账过程似乎能够完成。但是,对于在亚洲的某个人来说,它可能完成不了,因为存在通信延迟的问题。
他继续说,可能还存在这样的情况:一个观察者在同一时间看到两个银行账户都有这笔钱。简而言之,该服务可能无法总像广告标榜的那样完美,因为每个人看到的数据并不相同。在这个例子中,数据是不一致的。
如果再看看数以百万计的人使用的服务,你可以看出这个问题有多大。“如果有大量的人访问分布于世界各地的大量的系统,由于它们相互之间的通信延迟时间较长,因此你就很难保持所有的事情同步。”他说,“如果你增加那些影响因素,同步就会变得更加困难。”
借助于TrueTime,Spanner成功解决了这个问题,它采用的方法令所有人感到意外。谷歌不是着眼于改善服务器之间的通信,而是在其服务器网络上到处安装时钟。它将GPS天线或原子钟安装到各种不同的服务器上,与TrueTime API协同工作。最终,这些计时器保证了整个服务器网络同步运行。
谷歌做法值得借鉴
“(除了谷歌外)当前有许多研究专注于机器之间的复杂的协调协议……但是,谷歌却采用了完全不同的方法。”格罗斯说,“通过使用高精度的时钟和一个对时间非常灵敏的API,Spanner可让服务器节点不必经过复杂的通信就能够变得协调一致。”
简而言之,TrueTime API利用了这些重要的计时器,而网络上的服务器则利用了这些API。然后,TrueTime告诉服务器当前有多少“不确定性”,然后,它们就会相应地调整其读数。
普通服务器利用公共原子钟来保持准确的时间。但是,格罗斯认为这一方法还不够准确。谷歌更进一步,直接在自己的服务器上安装了原子钟和GPS天线。
最初,该系统是用来帮助整个谷歌帝国投放广告,但是后来,它已经扩展到谷歌其他形形色色的服务当中。该系统还帮助谷歌在其整个网络中复制和转移数据,从而帮助该公司的数据中心进行维修和升级,甚至安全渡过众多的网络危机。三年前,当Gill第一次提到Spanner的时候,他说,由于温度过高,谷歌自动将大量数据从需要暂时关闭的设备中转移出了。
问题的关键是,除非你在服务器中添加硬件,否则你无法使用Spanner。在这篇论文中,谷歌声称原子钟的成本并不高,而且10gen公司的总裁麦克斯-希雷森表示,其他企业也安装了类似的设备。但是,Basho公司的格罗斯和Cloudera公司的泽德勒维斯基均认为,它的成本仍然太高,不适合推广使用。
格罗斯称,对于像Basho这样的公司来说,建立依赖于这种设备的系统并没有意义。而就Cloudera公司而言,泽德勒维斯基也说过类似的话。即便他们看到了Spanner的未来。
就像许多其他NoSQL公司一样,Basho公司的目标就是服务于大型网络公司和其他需要处理大规模网络数据的公司。而格罗斯声称Spanner背后的基本理念可以帮助该公司做到这一点。
他说:“谷歌往往走在开源技术的前沿。不是每个人都能够买得起原子钟,但是我们可以从中学习他们所用到的方法。只要看一看谷歌的做法,你就能从中受益匪浅。”