[书接上篇]
下面我们聊一聊颠覆了CAP“理论”的NewSQL类系统(兼具可扩展性、数据可用性与一致性)。确切地说NewSQL可以兼顾OLTP+OLAP,但在一般分类上,我们还是主要突出了它的交易、事务处理对ACID的支持上,因此归为OLTP阵营。
最早的NewSQL系统是H-Store15,由美国东海岸的四所大学(Brown、CMU、MIT和Yale)在美国国家科学基金会、加拿大工程与研究委员会及Intel大数据科技中心的资助下联合开发,于2007年面世。H-Store的意义在于它真的开发够早,要知道NewSQL这个词汇是2011年才出现的(451group分析师Matthew Aslett的2011年的一篇文章中首次提及)。
H-Store显然是一个学院派的NewSQL实现,距离商用还有相当距离,于是基于H-Store的商业版NewSQL实现VoltDB17应运而生。VoltDB的作者都是业界赫赫有名的大家,比如Michael Stonebreaker,此公在加州Berkeley任教期间开发了Ingres、Postgres等关系型数据库系统;后来转战到MIT任教又开发了C-Store、H-Store等系统。此公的学生也多是赫赫有名之辈,比如VMware的前COE,Diane Greene, Cloudera的创始人Mike Olson,Sybase的创始人Robert Epstein等。最后要提一点,Stonebreaker老先生现在已年逾花甲了(1943年生人),想来老先生开发VoltDB时已然是六十大几了,反观国内的研发人员不到30岁就都纷纷要转型做people-manager(经理),实在是令人唏嘘。没有持续多年的第一手技术累积所搭建出来的系统是很难经得起时间的检验的,写下这段文字,与读者共勉!
图:Michael Stonebraker 被称为数据库领域的布道者,著名的数据库科学家,美国工程院院士,2005年获得冯诺依奖、2014年获得图灵奖
业界最早的商用NewSQL系统是谷歌公司经过五年内部开发后于2012年面世的Google Spanner,它具有四大NewSQL的特性:
·ACID强一致性支持(用于交易处理)
· SQL语言支持(向后兼容)
· 支持模式化表(Schematized Table)
·半关系型数据模型(意味着数据多样性支持)
Spanner是第一个在全球范围内可以做到交易一致性的半关系型数据库(也就是说在各个大洲的数据中心之间的数据可以通过Spanner系统来实现读写同步)。Spanner系统主要用于服务谷歌的最赚钱的广告系统,而之前该系统是构建在一套相当复杂的分片化(Sharded)MySQL集群之上的。谷歌的Spanner系统显然是在可算作是NoSQL数据库鼻祖的BigTable系统之上的一次飞跃。
Spanner立足于高抽象层次,使用Paxos协议横跨多个数据集把数据分散到世界上不同数据中心的状态机中。出故障时,它能够在全球范围内响应客户副本之间的自动切换。当数据总量或服务器的数量发生改变时,为了平衡负载和处理故障,Spanner自动完成数据的重切片和跨机器,甚至跨数据中心的数据迁移。
区别于以往的任何已知NoSQL或分布式数据库,在技术架构上Spanner具备如下几个特点:
·应用可以细粒度地进行动态控制数据的副本配置。应用可以详细规定:哪个数据中心包含哪些数据,数据距离用户有多远(控制用户读取数据的延迟),不同数据副本之间距离有多远(控制写操作的延迟),以及需要维护多少个副本(控制可用性和读操作性能)。数据可以动态、透明地在数据中心之间移动,从而平衡不同数据中心内资源的使用。
· 读写操作的外部一致性,时间戳控制下的跨越数据库的全球一致性的读操作。
Spanner的这两个重要的特性使得Spanner可以支持一致性的备份、一致性的 MapReduce 执行和原子性(Atomic)的模式更新,所有这些都是在全球范围内实现,即使存在正在处理中的事务也可以。
Spanner的全球时间同步机制是用一个具有GPS和原子钟的TrueTime API提供的。TrueTime API能够将不同数据中心的时间偏差缩短在10ms内。这个API可以提供一个精确的时间,同时给出误差范围。TrueTime API直观地揭示了时钟的不可靠性,它运行提供的边界更决定了时间标记。如果不确定性很大,Spanner会降低速度来等待不确定因素的消失。
TrueTime技术被认为是Spanner可以实现跨大洋数据中心的交易强一致性的使能科技(Enabling Technology),通过它可以实现分布式lock-free的只读交易、二段锁(2PL,Two-phase Locking)写交易。下图展示的是在美国、巴西与俄罗斯三个数据中心间实现并发读写交易一致性的时序图。
图:Spanner的commit-wait与2-phase commit18
Spanner系统中还有一些引领业界潮流的架构设计。
· 一个Spanner部署实例称之为一个Universe。而谷歌在全球范围内置用了3个实例:一个开发,一个测试,一个线上。因为一个Universe就能覆盖全球,谷歌认为他们不需要更多实例了。
· 每个Zone相当于一个数据中心,一个Zone在物理上必须在一起。而一个数据中心可能有多个Zone。可以在运行时添加移除Zone。一个Zone可以理解为一个BigTable部署实例。
其他业界知名的NewSQL系统还有如下:
· Clustrix:一家旧金山的创业公司的产品,Percona早前曾做过测试表明一个3节点的集群(Cluster)比一个类似处理能力的单节点MySQL服务器性能高73%,并且Clustrix的性能随节点数增加呈线性增长!
· Gemfire XD:Pivotal公司的基于内存的IMDG(In-Memory Data Grid,数据网格产品)产品,区别于基于内存的数据库的主要之处是其强大的可扩展性(通常可以到几千个节点),尽管它也能提供部分SQL访问接口,但是更多的为了实现高性能计算和实时交易处理。经典应用场景如12306网站的车票预订系统的后台就是10对X86服务器搭建而成的Gemfire XD IMDG —每天14亿次页面浏览、每秒超过4万次访问,服务超过5,700个火车站19。
· SAP HANA:恐怕是业界最为知名的商用NewSQL型数据库系统了。一款完全基于内存的关系型列数据库(Column-oriented RDBMS),支持实时的在线分析处理(OLAP)与交易处理(OLTP)。SAP为了推出HANA前后收购了多家公司的核心技术,其中至少3个技术值得一提:基于内存TREX列搜索引擎、基于内存的P*Time OLTP数据库以及基于内存的liveCache引擎。HANA的战略重要性如此之高,SAP似乎已经把全部赌注压在其上了。整个业界对于实时性、低延迟的越来越高的期待似乎与SAP的赌注颇为吻合。到目前为止SAP HANA的客户每年在以翻倍的速度增长,而整个SAP的云计算+大数据分析战略似乎都围绕着HANA在构建。
这个列表可以很长,在此不再赘述,有兴趣深究的读者可以自行展开研究。
最后,关于NewSQL和SQL,笔者认为SQL作为一门数据库的操作语言,它有着一些天然的缺陷,而这种缺陷已经在阻碍行业的向前发展。熟悉SQL的同学都会明白几点:
SQL不是一个递归型语言,也就是说SQL不善于处理深度的数据关联、穿透,而这些诉求恰恰是业务方所看重的;
SQL同样不善于处理高维数据,或者可以理解为多表链接就会造成SQL类数据库的性能指数级下降,SQL与关系型数据库相伴而生,都是为二维表的世界而存在的,但是高维的世界用二维表来表达,杯水车薪;
SQL是面向存储进程的,而存储进程是典型的T+1类型的操作,大量的存储进程拖累了数据库,甚至把数据库的实时化OLTP能力弱化为数仓的OLAP能力,这种弱化过去几十年大行其道,不得不说是关系型数据库的一段“黑历史”;
SQL终将让路给GQL,过去40年来,数据库行业只有两个查询语言标准委员会,SQL和GQL(图查询语言),期待GQL的标准尽快出台。而GQL标准委员会的设立就是为了解决上面的几个问题。
·文/ 老孙(孙宇熙:云计算、大数据、高性能存储与计算系统架构专家 )
·END·