You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
8.1 KiB
Markdown

2 years ago
# 072 | 谷歌的大数据路:谷歌的“黑科技”
**谷歌的大数据之路上半场以“三驾马车”谷歌文件系统、MapReduce和BigTable开始却以被Hadoop开源生态系统全面山寨了自己的“三驾马车”而结束。**
此后开源社区不断推陈出新推出了连谷歌都没有的开源项目并将其融入了Hadoop生态系统。从此Hadoop生态系统成为了大数据领域事实上的标准而谷歌也不得不在自己的云计算平台上提供对Hadoop开源山寨项目的兼容性支持。
最终在大数据的上半场随着Hadoop生态圈的崛起谷歌在大数据领域的影响力荡然无存。
然而,谷歌也不是吃素的。**在大数据的下半场谷歌携带“黑科技”Spanner数据库系统闪亮登场了。** 在讲这个“黑科技”前我们先来看看谷歌“三驾马车”里的BigTable。虽然BigTable名字里面包含了“Table”但实际上它并不是一个数据库的表它只是一个键值存储系统即Key-Value Store
一方面BigTable虽然可以处理大规模高并发的查询但是这个查询功能并不好用。在BigTable中用户无法使用SQL进行数据查询而必须采用编程的方式这就导致数据查询的用户体验非常不好。因此应用程序开发者更愿意选择用他们熟悉的数据库系统通过SQL完成数据访问和查询。
另外一方面虽然谷歌的搜索系统构建在“三驾马车”上但广告引擎并不是。在很长一段时间里谷歌的广告引擎都是采用开源的关系数据库MySQL。但是随着谷歌业务的发展MySQL越来越无法支撑谷歌广告业务的发展。
基于以上两方面的诉求谷歌需要再开发一个数据库系统这个系统既要有BigTable处理大规模高并发查询的能力又要能够支持SQL查询和事务处理。这个系统就是今天的主角后来赫赫有名的“黑科技”Spanner谷歌的跨洲多数据中心的数据库。
那么Spanner到底是什么呢
* 首先它是一个数据库支持SQL查询类似于Oracle或者微软的SQL Server以及开源的MySQL、Postgres等。
* 其次Spanner跟其他数据库系统最大的不同是它支持把数据存储在谷歌全球各地的不同的数据中心里并且对这些数据进行查询。同时它还能够保证这些跨洲多数据中心数据的一致性。
目前这个系统全球只此一家别无分号。有传闻说亚马逊屡次试图实现Spanner这样的系统但是屡战屡败屡败屡战现在依旧没有什么进展。
**众所周知,时间问题是分布式系统里面最难解决的问题。** 每台机器上细小的时间差别,反应到全局的结果就是没有统一的时间观念。
在同一个数据中心通过时间同步协议定期对所有机器进行时间同步这个时间问题就可以迎刃而解了。但是一旦数据中心跨洲后通过同步协议进行定期更新的做法就不切实际了。因为利用同步协议更新跨洲数据中心的时间所要耗费的时间本身就已经可以产生了不可忽略的误差。而Spanner被称为“黑科技”的原因之一就是它开创性地采用了原子钟和GPS全球定位系统从而解决了这个跨洲的全球数据中心的时间同步问题。
在最开始谷歌只做了Spanner的存储层实现虽然解决了全球数据中心的时间同步问题但是并不能满足谷歌广告引擎业务的需要。主要原因是在Spanner中存储层的访问需要使用底层的API而广告系统是通过SQL访问MySQL集群的这是一种高层的数据访问查询方式。而这时谷歌将广告系统从MySQL集群迁移出来的需求也不断增长于是就专门组建了一个技术团队这个团队的任务就是基于Spanner的存储层开发一个新的数据库系统F1。
最终F1研发成功了。F1的成功主要体现在两个方面。
* 首先F1是一个完整的数据库可以兼容MySQL广告部门基本上不需要改代码就可以通过SQL访问F1数据库。
* 其次F1的扩展性非常好可以进行任意的扩展包括跨地域的扩展因此广告部门再也不需要因为流量的增加而手动扩展MySQL集群了。
因此谷歌终于有了属于自己的跨地域的全球性数据库。这个数据库提供了极大的便利性从此谷歌的广告业务终于可以脱离MySQL了谷歌也因此获得了许多新的收入。
然而虽然F1系统解决了谷歌广告业务受制于MySQL的问题但是这个系统有一个最大的问题它完全是为谷歌的广告业务定制的也因此无法应用在谷歌的其他项目上。
比如F1数据库把表按照广告客户ID进行分区数据在这些静态分区之间没法进行迁移。其他的项目都有自己的数据库表方式而改造成F1数据库表方式是一个非常巨大的工作量这也就导致了非广告业务无法实施在F1数据库系统上。
这时谷歌内部对构建一个通用的数据库系统的诉求愈发强烈。一方面F1数据库和广告业务紧紧耦合且F1的团队也没时间做解耦来消除这种局限性另一方面Spanner团队发现他们需要在存储层上开发一些新的东西。
在这样的背景下Spanner团队开始自己做执行层的开发。这样一来Spanner被开发地越来越像是一个完备的数据库。经过几年的演变以后Spanner最终成为了一个完备的数据库。
这样,**谷歌内部就有了两套基于Spanner存储层的数据库了Spanner团队自己开发的和广告组开发的F1数据库。** 这两套系统在谷歌内部开展了广泛的竞争最终的结果就是非广告业务都采用Spanner组开发的系统而广告业务部则用F1。而在外界很多人被谷歌这两套系统搞蒙了大家一直误会F1和Spanner是同一个产品但事实上它们是功能和适用范围都不同的两个系统。
* F1开发得比较早是针对广告部门定制的数据库系统。这个系统在广告相关业务上性能非常好但缺失了很多支撑其他业务必要的功能所以通用性很差。
* Spanner团队则开发了一个通用的数据库系统具备了数据库系统的所有功能。但是这个系统没有专门针对广告业务进行优化因此应用在广告系统上的性能要差一些。
虽然有这些小插曲但是自从有了Spanner谷歌的底气就不一样了。这个黑科技支持的数据库使谷歌第一次做到了进行全球范围的事务处理这确实是史无前例的。**鉴于开放“三驾马车”架构时的保守性让谷歌丧失了在大数据时代的先发优势这次谷歌决定把Spanner放到云上供大家使用并将其命名为Cloud Spanner。**
谷歌试图通过Cloud Spanner这个高大上的“黑科技”来推动云端大数据产品的销售但是却没有达到预期效果。在我看来Cloud Spanner发展不顺利的原因主要有两个
1. Spanner收费非常昂贵对用户来说不够经济实惠
2. 大部分用户都没有谷歌那么大的数据量,跨大洲、跨大洋的数据库功能对他们来说,多少有点华而不实。
虽然Spanner在云端客户上发展并不顺利但是有些情况也只有Spanner这样的数据库才可以从容应对。比如中国的金融行业需要两地三中心的架构这种架构目前主要通过高端机器实现。即便如此金融机构也无法避免真正可能发生的灾难。但是如果换成Spanner金融机构不但能够更好地自动应对故障的发生而且可以降低成本。
无论结果怎样Spanner让谷歌再次在大数据领域吸引了很多关注。谷歌通过无与伦比的技术实力告诉大家它才是大数据技术真正的推动者。但是Spanner这个“黑科技”也只对谷歌这种规模的数据有现实意义而对其他企业来说并不是刚需。所以Spanner终究还是落得了“叫好不叫座”的结局。