快捷搜索:

搭建沟通BI与SOA的桥梁

简介

我们都知道商业智能(Business Intelligence,BI)能给组织带来许多上风。经由过程收拾、凑集和阐发数据,BI能赞助我们洞悉组织内正在发生的工作,以及将要发生的工作。BI让我们识别出组织提高的偏向或者应该提高的偏向。BI的历程平日从提取、转换和加载数据(Extract、Transform、Load,ETL)开始。一样平常来说,ETL是数据仓库(Data Warehouse)中的一个历程,此中包括:

从外部和内部数据源提取数据。

转换数据以相符营业的必要。

将转换后的数据加载到数据仓库(或者数据集市,Data Mart)

基础上,我们要达到BI的完满境界,“只”必要一样器械:数据。BI必要暗藏在组织系统中的数据。

走进SOA

在以前的数年间,我们已经看到了面向办事架构(Service-Oriented Architecture,SOA)在IT架构前沿的进步。跟着夸大年夜的鼓吹垂垂平息,而各个组织徐徐完成向SOA的过渡,忽然之间人们发明BI所需的数据被分散到了各个办事之中,被暗藏到了各类接口左券之后。

请看图1所示的SOA组件(来自我的论文《到底什么是SOA?》),我们可以看到除了最主要的组件——办事——之外,SOA还有多少与办事接口相关的其它组件:

左券,办事所实现的左券

端点,与办事建立联系的所在

消息,在办事与其用户之间往返通报的消息

策略,办事遵照的策略

用户,与办事交互的用户

这些组件,以及SOA的“共享数据定义(Scheme)而非数据”和“办事该当是自治的”等信条,都奉告我们SOA对其接口的注重。恰是经由过程这种对缜密定义的接口通信的强调,给SOA在松耦合、机动性和敏捷性等方面带来了技巧和营业上的上风。

图1:SOA组件及其关系

一方面BI出力在对数据的深入理解,另一方面SOA出力在将内部数据隔离到接口之后,目标冲突是真实存在的。正如Pat Helland在《外部数据vs.内部数据》中所说,办事的内部数据毫不应该裸露到办事的外部,而这些数据恰是BI所必要的。恰是出于这个缘故原由,根据近来Ventana Research 进行的一项查询造访(由Dan Everett在Dr. Dobb's Journal上颁发),只有1/3的调核工具觉得他们的内部IT职员有常识和能力去实现BI办事,这个结果并不令我们认为惊疑。

我们彷佛面对两个选项:要么直接得到数据而疏忽某些SOA原则(比如“共享数据定义而非数据”),要么遵照目下的接口左券而盲目地期望BI能得到足够的数据。(第三个选项则跟第一个选项等效,我稍后会评论争论到,即创建特定于BI必要的左券。)

直接获取数据,或者……

第一个选项是直接获取BI所需的数据,其历程则按照以前已经充分证实有效的ETL。

SOA给ETL带来了一点寻衅,你必须从许多分散的位置(办事)将数据集中起来。不过,从多个资本中搜集数据对BI或者ETL来说都不是什么新问题。大年夜企业中已经存在许多半据源:ERP、CRM、分散在各个部门的数据竖井(data silos),诸如斯类。有了SOA,ETL反而可能更轻易,假如斟酌到SOA允诺把企业数据编织成高内聚的组织布局,而不是意大年夜利面条式的点对点集成。(请留意“允诺”这个词,事实上要达到高内聚的办事组织布局不是一件轻易的事。不过这是题外话了,这个问题要用另一篇文章以致一本书才能解释清楚。)

好吧,应用ETL可能并不是最好的规划。让我们试试第二个选项,看按照SOA的原则运用左券来集成BI和SOA结果若何。

抽取SOA数据(哀求/相应)

集成SOA和BI的最简单的规划是不为BI历程做任何特殊的调剂。假如我们采纳左券,那些按照SOA的基础精神而拟就的左券,结果又会若何呢?为了满意BI的需求,我们必要周期性地轮询办事的接口,以便能够得到趋势性的和有历史意义的数据。

这种措施大年夜致有两个问题。其一是收集带宽的问题。轮询我们必要的每个接口会孕育发生异常大年夜的数据流量。要办理这个问题,我们可能要增大年夜轮询的光阴距离。然而,这样做会导致我们碰到第二个问题:我们面临着错掉在轮询距离时代发生的紧张事故的风险。就似乎我们在凌晨和黄昏察看天空,而完全错过了在正午发生的日食。是以,不幸地,这种措施虽然聊胜于无,但看起来并不是分外有出路。

采纳SOA左券的另一种要领是为BI的必要定制特殊的左券;也便是说,让左券容许从办事的内部布局中获取数据,以供BI应用。不过,这跟应用标准的ETL基础上是一回事;你仍旧建立了一个点对点的集成,并为特殊用途的特殊左券树立了一个先例。

现在的环境看起来不太乐不雅。我们发明自己陷进了前有狼后有虎的一个处境;要么我们放弃一些SOA的原则和优点,要么我们屈就一个不好的BI规划。

嘿,等一下:可能还有第三条路……

转变SOA思路:转向“推”模型(Push Model)

第三个选项的根基是将SOA向前推进,逾越我们习气的简单的哀求/相应模型,将SOA与另一种架构风格——事故驱动的架构(Event-Driven Architecture,EDA)相结合。

简而言之,EDA跟SOA类似,是一种建立在“推”模型上的架构风格。EDA组件向外宣布事故。从逻辑上说,事故是宣布该事故的组件中发生的任何值得留意的变更。该变更可所以正常行径的结果,比如一份订单已被处置惩罚;也可所以一个差错,比如数据库宕机;也可所以系统跨越了一个阈值,比如第一百万名顾客做出购买行径;或者任何你觉得紧张的工作。从物理上来说,事故是带有描述该事故的元数据的头部和包孕事故内容的正文的一个消息。

EDA加上SOA办理了BI的问题;只要你在收集中筹备好了事故流,BI组件就可以抓取数据,按照它们的必要操纵数据,将数据塞进它们的数据集市或者数据仓库。而且,数据流还可以让BI更上一层楼,数据流让BI得以对实时事故和实时的趋向性数据进行更繁杂更故意义的阐发,并运用繁杂事故处置惩罚(CEP)对象取得实时的营业活动监控(Business-Activity Monitoring,BAM)。事故处置惩罚到底是什么样子的呢?想象你有一个订单办事,它宣布的事故以XML的形式描述了她所处置惩罚的每个订单,如列表1所示:

列表1:订单汇总的XML片断

我们可以用ESP或CEP对象来监控这个事故流,并持续从中抽取感兴趣的事故供进一步阐发和行动。例如,列表2展示了一个查询,该查询用来在订单流中查找跨越$100,000的订单。请留意,虽然这个查询看起来异常像是SQL(确凿是从SQL成长而来),它仍旧有相称不一样的地方;该查询不间断地对一个非持久化(non-persistent)的事故流进行操作。

INSERT INTO LargeOrders

SELECT

orderid as orderid,

SUM(Ords.price * Ords.qty) AS TotalValue,

FROM

OrdersStream AS Ords XMLTable (val

ROWS '//OrderLine'

COLUMNS

Orderid as orderid,

TO_FLOAT (XMLExtractValue ('@Price')) AS price,

TO_FLOAT (XMLExtractValue ('@Quantity')) AS qty );

WHERE

TotalCost>100000

列表2:Coral8的持续谋略说话(Continuous Computation Language)查询,用来从订单流中查找跨越$100,000的订单,并将其插入LargeOrders数据表

你的办事可以用feed的要领来宣布事故流,就跟你的博客一样,同时还得到了一些架构上的好处。比如说,办事不必要再治理订阅者。第二,当事故发生时破费者不必在场也可以破费该事故。而且,治理和设置设置设备摆设摆设比起行列步队引擎或者任何我能想到的技巧都要简单轻易。

结论

结合运用EDA和SOA给了我们一个不必突破SOA原则同时又能满意BI需求的办理规划。不过,结合EDA和SOA的措施面临两个艰苦。其一是用EDA和SOA来办理BI问题还没有很多实践履历(跟久经磨练的ETL比拟)。其二是这种要领必要做更多的事情以致重做,由于第一波的SOA实现是建立在更简单的同步消息要领的根基上。在现有的SOA规划上加入EDA不是一件简单的事情。不过,在SOA中采纳ETL也同样不简单,由于我们必要从许多滥觞抽取数据,而每个办事都有自己的内部数据,并且对任何通俗大年夜小的SOA规划来说,办事的数目都不会少。

我的不雅点是,险些从任何方面看,EDA和SOA都要赛过采纳ETL。

从SOA的角度来看,在SOA中加入EDA对全部SOA规划都有好处。EDA对付建立加倍自治的办事来说是一件有代价的对象。例如,办事可以缓存从其他办事中得到的相关数据,并在数据变化时获得看护。是以,作为破费者的办事可以从光阴上与它所依附的办事解耦,它不再依附其它办事的可用性——当采纳同步的哀求/相应模型时就要面临这个问题。

从BI的角度来看,好处就更多了。使用EDA可以让我们得到传统BI机制难以达到的目标——实时的洞察力。运用EDA孕育发生的事故流,我们现在可以实时地得到数据,并且经由过程CEP对象,我们可以实时地处置惩罚数据,并在趋势浮现时实时地采取行动。

总而言之,采纳EDA和SOA来实现BI赛过采纳传统的ETL。我们不但能获得基础的BI,我们还可以做得更好——实时BI,更不用说对SOA整体质量的前进了。

您可能还会对下面的文章感兴趣: