走近谷歌Spanner:地球上最大的单一数据库
谷歌 Spanner 数据库示意图
北京时间 11 月 28 日消息,《连线》杂志网络版近日刊载文章,对全球最大的单一数据库谷歌 Spanner 进行了详细的描述,称其昭示着整个世界的未来发展方向。文章指出,在 Spanner 数据库中,谷歌摒弃了传统的“网络时间协议”,转而使用自己的时间协调机制,这个机制被称为“TrueTime API”。谷歌在 Spanner 数据中心里配备了自己的原子钟和 GPS 接收器,这些时间协调装置会连接到特定数量的主服务器,然后再由主服务器向整个谷歌网络中运行的其他电脑传输时间读数。
以下是这篇文章的全文:
每天早上,当安德鲁·菲克斯(Andrew Fikes)坐在美国加州山景城谷歌总部的办公桌前时,他就会打开谷歌与纽约之间的“VC”连接。
“VC”是谷歌对视频会议(video conference)的缩写。通过办公桌上的电脑屏幕,菲克斯能看到威尔逊·谢(Wilson Hsieh)坐在谷歌曼哈顿办公室里,后者也能看到菲克斯。两人还会与谷歌在华盛顿州柯克兰(Kirkland,靠近西雅图)的一个办公室建立 VC 连接。他们的工程团队跨越这个国家三个不同地区的三个办公室,但所有人仍旧可以毫无延迟地聊天、进行“头脑风暴”和互相解答疑难问题,而这就是谷歌建立 Spanner 数据库的方式。
“如果你走进我们的办公室就会发现,我们一直都会保持 VC 处于开启状态。”菲克斯说道,他在 2001 年加盟谷歌,现在已经跻身于谷歌杰出的软件工程师之列。“我们在过去多年时间里一直都在这样做,这就降低了一般通信方式的所有壁垒。”
这种布置是合适的。正如创造 Spanner 数据库的工程团队一样,Spanner 覆盖全球,但其运作却像是完全在同一个地方发生的。在经历了多年的暗示和传言以后,Spanner 终于在今年秋天出现在公众视线里,它是第一个有资格“有名有姓”的全球数据库——其目的是在数以百计的数据中心、成百万的电脑和数万亿计行信息之间无缝运 作。
Spanner 是一个如此庞大的创造产物,以至于有些人很难真正去了解它。但是,它所带来的最终结果是很容易说明的:通过 Spanner,谷歌能向全球受众提供网络服务,但仍可确保正在世界某个地区中发生在这项服务中的事情不会与发生在另一个地区的事情相抵触。
这个新时代的谷歌数据库已经成为该公司在线广告系统的一部分——这个系统能给谷歌带来庞大的收入——可能预示着网络的其他部分将走向何处。当谷 歌在 9 月中旬发布研究报告来对 Spanner 作出详细描述时,整个世界都为之震动;几个星期以后,当威尔逊·谢在加州好莱坞的一次会议上演示这份研究报告的内容时,在中坚电脑系统工程师中引发的热议 也是明显可见的。
“这当然是很有趣的一件事情。”为 非死book 网站提供支持的大型软件平台的主要工程师之一罗谷·默蒂(Raghu Murty)说道——但他补充称,非死book 尚未探索实际构建类似数据库的可能性。
谷歌的网络业务比大多数公司的同类业务都要复杂得多,而且这家公司还被迫构建远远超出大多数网络公司范畴的定制化软件。但随着互联网的增长,谷歌创造的产品经常都会对世界其他部分造成“涓滴效应”。
在谷歌公布 Spanner 数据库的细节以前,许多人甚至都不认为这是可能做到的事情。没错,我们已经拥有了能在多个数据中心之间存储信息的“NoSQL”数据库,但这些数据库不能 在保持信息“一致”——意味着在世界一端的数据中心里浏览数据的人所看到的东西与另一端的人看到的东西完全相同——的情况下做到跨数据中心存储。人们原本 对此作出的假设是,之所以不能做到这种“一致”性,是因为在数据中心之间传递信息存在固有的延迟。
但在构建一个既具有全球性又能保持一致性的数据中心的过程中,谷歌 Spanner 工程师做了一些令人完全意想不到的事情,而这也恰恰符合他们经常都会出人意料的过往历史。这个团队的成员不仅包括菲克斯和威尔逊·谢,同时还包括传奇性的 谷歌人物杰夫·迪恩(Jeff Dean)和桑杰伊·格马瓦特(Sanjay Ghemawa)以及其他很多工程师,这些工程师都曾致力于开发开创性的数据中心平台,如 Megastore 和 Dremel 等。
而这一次,他们找到了一种让时间保持一致的新方法。
“作为一名分布式系统开发者,你会受到这样的教育——我想说的是,从孩提时代就开始受到这种教育——那就是不要相信时间。”菲克斯说道。“我们所做的事情就是找到一种方法来让我们能相信时间——以及理解相信时间意味着什么。”
时间是极其重要的
在网络上,时间是极其重要的。没错,当运行一项大型网络服务时,你需要事情迅速地发生。但你还需要一种精确追踪许多电脑的时间的方法,这些电脑 为你的服务提供支持。你必须同步在每台服务器上运行的许多进程,而且还必须对服务器本身进行同比,这样一来它们才能协同运作。而想要做到这一点可谓“知易 行难”。
通常情况下,数据中心运营商会使用所谓的“网络时间协议”(Network Time Protocol,NTP)来保持服务器的的同步,这从本质上来说是一种将电脑与官方原子钟联系到一起的在线服务,从而让全世界各地组织的时间保持一致。 但是,由于在一个网络中传输信息需要时间的缘故,这种方法从来都无法做到完全精确,而且有些时候还会完全失效。在今年 7 月份,几家主要的网络公司——包括 Reddit、Gawker 和 Mozilla 等——就遭遇了问题,原因是其软件没有做好应对“闰秒”(为保持协调世界时接近于世界时时刻,由国际计量局统一规定在年底或年中对协调世界时增加或减少 1 秒的调整)的准备。
但在 Spanner 数据库中,谷歌摒弃了“网络时间协议”,转而使用自己的时间协调机制,这个机制被称为“TrueTime API”。“我们想要一种能让自己信得过的东西。”菲克斯说道。“那就是谷歌自己拥有的时间基准。”
谷歌没有依靠外部时钟,而是在其 Spanner 数据中心里配备了自己的原子钟和 GPS(全球定位系统)接收器,这与你 iPhone 中的应用是不一样的。通过环绕地球进行轨道运行的卫星所构成的网络,GPS 接收器不仅可以精确找到你所在的位置,而且还能精确报时。
这些时间协调装置会连接到特定数量的主服务器,然后再由主服务器向整个谷歌网络中运行的其他电脑传输时间读数。基本上来说,谷歌网络中的每台电 脑都会运行一个后台程序,这个程序会不断地与同一个数据中心及其他谷歌数据中心的主服务器进行联系,试图达成协调一致的时间。通过这种方式,整个谷歌网络 中的电脑都会相当接近于运行一个通用时钟。
系统做出回应,而非人类
这种方法是如何引导一个全球数据库的呢?这要感谢 TrueTime 服务,这种服务让谷歌得以将许多电脑保持同步——即使这些电脑是分布在多个数据中心里的——这意味着它们能迅速存储和检索数据,而不会互相踩到对方的“脚趾”。
“我们能在两个不同的地方交付数据——比如说美国西海岸和欧洲——而这两个地方之间仍旧存在某种商定的定序。”菲克斯说道。“因此,如果美国西 海岸地区首先交付数据,然后欧洲地区再交付,那么整个系统都会知道这个顺序——然后就不会出现数据以截然不同的顺序被查看的可能。”
根据安迪·格罗斯(Andy Gross)——他是数据存储和管理软件创业企业 Basho 的主架构师,该公司开发了一个名为 Riak 的开源数据库,目的是在数千个服务器之间运行——的说法,数据库设计人员通常都会寻求让计算机彼此之间进行“对话”,从而实现信息的同步化。“你必须进行 一大堆的通信,来判定所有信息处理的正确顺序。”他在今天秋天接受《连线》杂志采访时说道,当时谷歌刚刚对外发布了 Spanner 的细节。
问题在于,这种通信能让整个网络都陷入停顿状态——数据库也是如此。正如麦克斯希雷森(Max Schireson)——他是大数据公司 10gen 的总裁,这家公司开发了 NoSQL 数据库 MongoDB——对我们所说的那样:“如果有大量用户同时接入大量分布在全球的系统,那么这些系统之间的通信延迟时间会是相当长的,让所有事情都同步起 来就会变得非常困难。如果这些要素的数值提高,那么就会变得更加困难。”
因此,谷歌就采取了一种完全不同的道路。谷歌没有竭力试图改善服务器之间的通信方式,而是给它们带来了一种新的报时方法。“这可能是(谷歌研究)报告的最酷的一件事情:使用原子钟和 GPS 来提供一个时间 API(应用程序接口)。”非死book 的默蒂说道。
在控制时间的问题上,谷歌不仅能构建一个同时具有全球性和时间一致性的数据库,同时还能让其服务在网络延迟、数据中心宕机及其他软件和硬件故障 的面前变得更加具有抵抗力。从基本上来说,谷歌是利用 Spanner 来精确复制多个数据中心之间的数据,然后迅速地在各个数据副本之间“穿梭”。换而言之,这些数据副本也同样具有一致性。
当一个数据副本不可用时,Spanner 能迅速转向另一个副本。但是,Spanner 也会在不同副本中“穿梭”,目的只是为了改善其表现。“如果你拥有一个数据副本,而这个副本变得忙碌,那么网络延迟就会变得很高;但如果你还拥有其他四个 副本,那么就能选择转到另一个副本,从而减少延迟。”菲克斯说道。
菲克斯表示,这样做的结果之一是,谷歌花在管理自身系统上的费用有所减少。“从某种程度上来说,当一个服务器宕机时,我们只需要转到系统中其他服务器的客户端电脑即可。”他说道。“这是一种简单得多的服务……做出回应的是系统本身,而不是人类。”
追随谷歌的步伐
有些人会怀疑,其他公司是否也会追随谷歌的步伐——以及它们是否想要这样做。当我们与格罗斯交谈时,他猜测甚至就连谷歌原子钟和 GPS 接收器也将由于成本过高而不适用于大多数公司。
没错,重新构建平台将是一项庞大的任务。谷歌在这个项目上已经花费了四年半时间,菲克斯——他帮助构建了谷歌的网络历史工具、第一项产品搜索服 务以及 Google Answers 和 BigTable——将 Spanner 称为他曾从事开发过的最困难的东西。另外,还有数不清的后勤相关事务需要处理。
正如菲克斯所指出的那样,谷歌不得不在其数据中心的屋顶上安装 GPS 天线,并将这些天线与数据中心内部的硬件连接起来。而且,你还需要两种不同类型的时间协调器。硬件经常都会出故障,而时间协调器也同样会在不同的时候发生 故障。“原子钟会在 GPS 出问题时提供稳定性。”他说道。
但据菲克斯称,这些设备相对来说都不算贵。GPS 接收器当然不会像 iPhone 里的装置那样便宜,但跟谷歌的原子钟一样,这种设备的单价不会超过几千美元。“这些设备从某种程度上来说符合企业级服务器的成本序列。”他说道。“而且有 许多供应商都会提供这些设备。”当我们与迪恩——他是谷歌主要的架构工程师之一,同时也是 Spanner 报告的另一名作者——讨论此事时,他也作出了几乎相同的回答。
菲克斯还指出,TrueTime 服务并不需要配备专门的服务器。时间协调器就放置在服务器机架上,而且只需要与数据中心里的某些服务器连接起来即可。
“你可以认为,每个数据中心里仅有少量的此类设备。它们的外形就像盒子一样,你可以购买这些设备,然后将其插入服务器机架,通过以太网将其与服 务器连在一起。”菲克斯说道。“需要考虑的一件重要的事情是,这是一种向数据中心提供的服务,其成本会平摊在所有的服务器中。每台服务器的成本都是某个增 量的数字——你需要权衡的就是这种成本与我们能利用其所做到的事情。”
Spanner 并非当今所有网站都需要的东西,但整个世界都正朝着它的方向发展。虽然 非死book 尚未探索开发类似于 Spanner 的数据库,但该公司正在构建一个名为 Prism 的平台,这个平台将负责运行该公司在多个数据中心庞大的数据运算任务。
没错,谷歌的广告系统是很庞大,但这个系统得益于 Spanner 数据库,而且在某种程度上来说也会让许多其他网络服务从中受益。谷歌广告系统是一个在线拍卖平台——广告主需要进行竞价来显示自己的广告,用户则将在搜索 某一特定物品或访问特定网站时看到这些广告——每一则广告的出现都有赖于描述大量广告主和网民行为的数据。通过 Spanner,谷歌可以在全球范围内处理这种数据,同时仍可保持整个系统的同步性。
正如菲克斯所说,Spanner 只是谷歌利用其控制时间的新方法的第一个范例。“我预计,未来还将出现许多其他服务。”他说道。菲克斯的意思是指其他的谷歌服务,但既然这家公司现在已经 将其 Spanner 报告与整个世界都进行了共享,那么它这样做必然是有理由的。