干货丨杨晓洋:金融大数据架构概述与应用

这里很重要的问题,两阶段的提交肯定是强意志的,不管是M/S还是MM都是Eventual的,这里就会出现一个问题,像经典的购物车的问题,它就有可能出现数据丢失、数据不一致的情况出现。很多做传统数据库的专家,他们去挑战Amazon的老大,它们是最早做Eventual,在学术界提出Eventual最终一致性,就去挑战这个,最终一致性到最后的结果就是最终不一致。当然大家可以互相争论,这里确实有一些学术问题值得讨论,包括微软把一堆分布式数据专家请到微软研究院。但是你看他做出来的Azure效率高,性能也没它好,尽管没听说它数据丢失,但整体上来说并不见得比Amazon做得更好。理论上可能很成功,实际操作过程上不一定会做得很好。大家有机会可以把这个东西记住,有很多有价值的东西。我们设计了一套系统基本上是在Paxos这个领域。

底下有很多细节的东西不说了。比如说Peer-to-peer,这是在Cluster里要设计三个并列点的时候,从个人的角度来讲,不希望是Master/Slave模式——它支持的是Eventual。在处理这个数据里面的时候,我们希望是既有Eventual,同时也有强一致性。所以在这里,我们就采用了Peer-to-peer的模式,而没有采用Master/Slave模式。

Meta-data,这个挑战更大,是结构化的数据。结构化数据最好的方式是放在关系数据库里面,这是最简洁,非常成熟,很稳定等等,但是关系数据库不能很好地Scale Out,它在分布式的环境下面做得不太好,它要么就是效率非常的低,要么就是只有单独的一台机器,所以这里面有很多矛盾,我们采用特殊的方法对它处理。我们刚才提到每秒钟100万个影像,每个影像是有元数据描述的,意味着每秒存100万影像的同时必须每秒存100万条元数据存到我的数据库里面,目前没有已知的数据库可以cost-effectively处理这个事。

你那里面分出来,可能能分出三类数据。一类是放到关系型数据库里面。一类是对象类的数据,包括你的图片、网页、文本、PDF文件等等。还有一类就是,你把这个里面的数据和这个里面文本的部分提取出来变成索引的,就是现在大家比较熟悉的,跟搜索引擎相关的一些东西。这三类数据,你们未来建构里面肯定都会碰到,所有我们碰到的挑战你们也可能会碰到,取决于看你底下选择什么样子的平台来实现。对象这边,我们采用的是Openstack Swift,来做Object Store,但是光用这个还不够,我们还对小文件进行了特殊的优化,你们可能也会碰到同样的事情,你可能不需要去管Swift底下做了什么,或者你用Amazon、华为的对象服务器都可以,你要求它给你的指标都可以了,不做研究,也没有必要走到下面。

小文件的Optimizer,这是一个技术,我们物理盘构建的结构,当年IBM做硬件盘的时候用了很多成熟的技术,有很多创新在里面,过去很多年我们还在这个硬盘上生活着,我们现在构造的大多数数据都在这硬盘上面,随着数据量越来越大它有一个限制,只有一个读头,这个读头每秒钟最多能处理100个读或者是写,这是它基本的限制,由于数据量增加限制越来越多性能就直线下降,要解决的问题是用特殊的方式做成平的,这样你的盘在三年生命周期当中是保持一致的,我们做的这样一个东西。

当要用关系数据做这件事情的时候,金融的数据,尤其是股票交易的数据过来,一定要保证它参照的,换句话说它必须是Atomic,不能让它变成Eventual,Base在这个数据上面是不合适的。那些其他的数据是可以用Base来做的,但是在这个底层存储上必须要做到Atomic,这种情况底下要保证至少存三份,才能保证足够的冗余来处理这件事。这边可能也要用到Object Store,这是我们当时做的东西。

这是Facebook的例子,Facebook来用HBase做Messaging,然后它发现单机是不行的,一旦单点失败了Facebook用户和用户之间、用户和系统之间的交互就会失效,于是做成了双机版,双活的版,到目前我还没有听说进到Hadoop里面去,它底下的对象是Haystack,Haystack有一篇很著名的论文,你们可以读一下,里面做了很多优化。

谷歌的Spanner。谷歌是很有意思的一家公司,已经金蝉脱壳了,换了一个名字。它在数据的层面,十几年前它跟大家说SQL死了,大家应该用NoSQL,于是一大批人跟着它走,三年前它说SQL还是很有用的,于是大家就不知道怎么办了,十年前跟着你跑,跑了半天又绕回来,不是在忽悠我们吧?本质上SQL还是有用的,它做的F1&Spanner本质上就是实现全球的SQL,它把它叫第一个全球化的SQL,这个稍许夸大了一点,从使用上来讲是第一个使用的,别的有一些内部的秘密没有公开。它里面很重要的一个东西,它的数据是通过Paxos来维护它的高一致性的,Paxos是很著名的算法,大家有机会可以专门讨论。它的Paxos是在全球的大数据中应用,我们知道,数据一致性里面,分数据管理里面很重要的难题,根本上我们是用一个时间,以这个时间纬度作为数据到来的先后顺序决定数据的一致性,换句话说,当你有N个数据分析的时候,每个数据时钟有些微差异的时候,当你达到毫秒级、微秒级、纳秒级的时候,你的时钟和时钟之间的同步就变得异常重要,精度也变得异常重要,谷歌做这个的时候,每个数据中心上面要支一根天线接到GPS卫星,用GPS卫星时间来衡量先后,这是分布式问题的一个本质。谷歌未来会走成什么样子,这个不清楚,目前它们内部在使用这个事情。