是谁革了传统BI的命?
- 来源:中国计算机报 smarty:if $article.tag?>
- 关键字:敏捷BI,列存储,内存 smarty:/if?>
- 发布时间:2015-07-28 08:04
如果我们抛开传统BI复杂的原因是计算能力不足这一点不谈,单看传统BI和敏捷BI的区别,你会觉得没啥了不起,就是把架构简化了,去掉了一些环节而已。
换句话说,看起来开发一个敏捷BI的工具也不难,不需要考虑建模等技术功能的话,跟开发一个前端展现的绘图工具似乎差不多。
但如果事情就这么简单的话,那为什么传统BI的数据分析方式持续了这么多年?
这时我们就会发现,计算能力这个话题是绕不开的。开发一个类似的前端工具确实很简单,但如果不突破性能,而且又采用了新架构,计算任务需要用户点击才开始执行,那换来的只能是一场灾难。用户会发现原先的传统BI虽然过程复杂耗时长久,但好歹计算完了看报表时还是很快的,现在打开报表居然要等几十分钟或几个小时,还能让人按时下班吗?
所以,实现敏捷的BI有个必不可少的大前提,就是计算能力要有几十倍甚至几百倍的提升,才能让计算和交互完美完成。
现在,让我们一探究竟,以永洪科技的敏捷BI产品(永洪BI)为例洞悉敏捷BI实现高性能计算的方法原理。
列存储
非技术人员都有个心理阴影,就是一看到技术名词潜意识里就觉得恐惧和排斥,认为技术高深莫测复杂至极,自己不可能搞懂。其实这些名词仅仅是一些名词而已,都可以用一句大白话说明,背后也没有多少不能理解的奥秘。造成这种阴影技术人员有责任,总是满口术语而不解释,认为听者理所应当像自己一样知道这些术语的含义,实际的结果就是造成沟通不畅。而正如前文所说,科技一定是朝着人性化的方向发展,因此,笔者认为非技术人员应该是作为评判技术的法官般存在,凡是不能让非技术人员理解其作用的技术都不是(或者现阶段不是)用户需要的技术。
我们来聊聊敏捷BI涉及的第一个技术——列存储。列存储不是新概念,早在1985年SIGMOD会议上就有文章“A decomposition storage model”对DSM(decomposition storage model,列存储)做了比较详细的介绍。
存储很容易理解,不管在屏幕上看到的是怎样花花绿绿的漂亮内容,其核心信息都是以文件块的形式存储在服务器的硬盘里的,当文件块里的内容被用到时,硬盘会通过磁头的I/O(Input/Output,输入/输出)把数据读出写入内存进行处理。
有列存储,对应自然就有行存储,后者是更早产生的数据存储形式,应用也更广泛。行存储就是以行为单位进行存储的机制,可以简单理解为每一个文件块都是N行的数据,每一行包括了所有列。列存储是以列为单位进行存储的机制,每一个文件块都是一列的数据,这一列跨越了很多行。
行存储和列存储在技术上没有好坏之分,只是基于各自的特点适用于不同的场景。而BI系统的数据库则是另一种场景,在BI系统里进行分析的通常都是已经确定了的历史数据,如果分析昨天的销售情况,结果昨天的销售数据还老频繁发生更改,那么分析的准确作用就丧失了。在数据分析的过程中,通常我们只需要某几列的数据,比如分析不同区域收入占比的情况,只需要用到“区域”和“收入”这两个字段,也就是两列,采用列存储,就可以很容易地只把这两列对应的文件块读出写入内存。但如果是行存储,则需要把所有用到的行里面所有的列都读出写入内存,并且绝大部分都是不需要的冗余列,性能上要差很多。更何况硬盘的I/O是整个硬件体系中最慢的一个环节。
分布式计算
下面我们再来谈一谈分布式计算。说分布式计算之前,先说向上扩展(Scale-up)和向外扩展(Scale-out,或者叫横向扩展)。
当我们用一台电脑执行计算任务时,随着任务量加大,电脑计算出结果的速度也会变慢。这时我们有两种选择,第一种是买更好的电脑/服务器,或者升级服务器的配置,加CPU,加内存,等等。这种方法即为向上扩展。
向上扩展短期能解决问题,但也存在着多种弊端。那就是向上扩展的效率会逐渐降低,向上扩展的代价十分昂贵,向上扩展的过程会影响系统的运行。因此,越来越多的人倾向于另一种选择——向外扩展。阿里的去IOE本质上也有类似的地方。
与其把所有压力都推给孤零零的一台服务器,不如转而采用多台高性价比的服务器一起协同工作。这样,上述的三个弊端都得到了较完美的解决,扩展效率更高,代价很低,而且不用影响系统运行。
分布式计算,实际上就是向外扩展的一种解决方案。通过分布式计算,系统能够把计算任务分布到多个计算节点,再在指定节点将计算结果汇总输出。比如想计算过去一年的总收入,假设我有三台服务器,过去一年的销售数据也散布在这三台服务器上,那么我可以让三台服务器并行工作,每台服务器都把自己存储的销售数据进行求和,得到三个求和的结果,最后再进行汇总,得出最终结果。这样,效率又提升了很多。
由于企业的数据量越来越大,并且增速也越来越快,尤其是互联网企业,天生就是大数据环境作业,采用分布式计算是必不可少的。分布式计算的优点也很明显。根据经典的定义,分布式计算具有以下优点:首先,稀有计算资源可以共享;其次,通过分布式计算可以在多台计算机上平衡计算负载;再次,可以把程序放在最适合运行它的计算机上。
其中,共享稀有资源和平衡负载是计算机分布式计算的核心思想之一。
最早分布式计算的应用场景是为了应对需要非常巨大的计算能力才能解决的问题,一般是跨学科的、极富挑战性的、人类急待解决的科研课题。其中较为著名的是解决较为复杂的数学问题,例如GIMPS(寻找最大的梅森素数);研究寻找最为安全的密码系统,例如RC-72(密码破解);生物病理研究,例如Folding@home(研究蛋白质折叠、误解、聚合,及由此引起的相关疾病);各种各样疾病的药物研究,例如United Devices(寻找对抗癌症的有效的药物);信号处理,例如SETI Home(在家寻找地外文明)。
当然,我们在企业里做数据分析遇到的问题肯定远没有上面这些高大上的问题复杂,否则我们做的可能不是面向一般大众的企业。但上面这些问题可以允许有很长的运算周期,人们本来就不期望能在几小时内就把这些问题算完,而我们需要的是几秒内就看到数据分析的结果展现,所以也需要通过分布式计算来进行提速。在这种情况下,我们需要的就不是一台超级计算机,而是多台高性价比的服务器,搭建成集群。
内存计算
下面再来谈谈内存计算和分布式通信。内存计算(In-Memory Computing),实质上就是CPU直接从内存而非硬盘上读取数据,并对数据进行计算、分析。一般地,内存访问速度比硬盘要快几百倍甚至上千倍,通过内存计算,CPU直接从内存而非硬盘上读取数据并对数据进行计算。内存计算是对传统数据处理方式的一种加速,是实现敏捷BI中海量数据分析的关键应用技术。
光这么说可能给人感觉是废话,因为事实上任何一个系统在进行计算时都是要把数据加载到内存的。关键点在于是否有好的算法能让内存计算的效用发挥到最大,将硬盘I/O减到最少,并且减少内存的工作环节。通过更优的方法,内存的优势能被淋漓尽致地发挥到敏捷BI的数据计算当中来。
分布式通信
分布式通信是比较底层的技术,市面上介绍得也比较少。不过,中间过程的计算结果能否在服务器集群中稳定且高效地传输,是整个集群能否达到高性能实时计算的关键。高性能主要体现在可复用的TCP/IP连接(通信连接),多路的信息传输、异步的信息传输、稳定的内存使用、健壮的信息传输这几个方面。
敏捷BI
列存储、分布式计算、内存计算、分布式通信,都不是新的技术,已经日趋成熟。我们要做的,是更好地利用这些技术,并将它们完美地整合到一起,发挥1+1>2的效力。同时,要在原有技术水平上不断突破,持续优化每一种技术的内部逻辑和算法,加强每一点的能力,最终实现整体的质的飞跃。这些技术的组合,为敏捷BI实现可视化分析奠定了重要基础。
文 永洪科技合作总监 王桐
