使用SOA架构来搭建
ESB在SOA中的重要作用已经得到了人们的共同认可,Forrester Research公司发表的一份报告指出,持续采用SOA能很好的体现ESB的思想,并且把ESB称为“SOA的主要切入点”。 SOA厂商更是纷纷推出自己的ESB产品,并不断地向用户宣扬ESB可以帮助他们简化SOA的难题,降低SOA实施的成本。
但是,人们对ESB的追捧正在使SOA的实施走向“迷途”。利用ESB来辅助SOA实施变成了以ESB为中心来构建SOA应用,手段变成了目的,技术篡夺业务成为了SOA的重心,这严重地背叛了SOA的本原特性。
IBM WebSphere SOA与J2EE顾问Bobby Woolf最近写了一篇文章《以ESB为中心的架构是实施SOA错误的途径》来质疑这种把ESB当作SOA的实现基础的做法。Bobby Woolf在文章中提到,很多客户在开始建设SOA时要求先为他们建立一个ESB,他们抛弃了SOA的理念而只对ESB感兴趣。“这些客户在ESB和SOA之间划了一个等号,或者更
ESB不等于SOA,它更不能替代SOA。以ESB来启动SOA应用,然后以ESB为中心来构建SOA系统是不可取的。
Burton Group的分析师Anne Thomas Manes说道:“如果缺少我推荐启动SOA的基本组件,ESB将不会列在我的清单中。事实上,我并不鼓励人们由ESB开始。ESB并不会鼓励好的SOA行为。ESB本质上是集成系统,而非SOA系统。SOA是用于拆卸应用竖井(application silos),而集成系统则是修补这些竖井。”
而她提及的基本启动包括:
一个或多个服务平台(如.NET,Java EE应用服务器等)
SOA管理解决方案
注册表
如果服务要被暴露在防火墙之外,那么需要XML网关
她还指出,ESB非常有用,但是,在SOA项目的初始阶段可能不会发挥多大的用途。在SOA项目的后期,你还可能需要一个编制(orchestration)引擎,并且大多数的ESB都会提供一个。即便如此,ESB也绝对不是组织启动SOA的起点。所有这些能力你一开始并不需要。因此,ESB应该在后期购买。
Accenture首席技术官Don Rippert认为激活SOA的全部潜力需要通过四个阶段,而ESB则处于第三个阶段。他同时指出当前大多数的企业还只是处于第一个阶段,因此ESB实际上对于他们来说并不是迫切需要的。
而他所说的四个阶段如下所示:
1.使用XML,以更标准的方式使用应用程序接口。
2.捕获一些业务过程,并将它们转化成为Web服务。
3.引入并全面使用企业服务总线。
4.产生业务过程执行语言(Business Process Execution Language,BPEL),它可由业务过程建模工具完成。BPEL可以改变应用程序的行为,而无需修改软件。
另外,在IBM定义的实施SOA的五个切入点中——人员、流程、
Bobby在他的文章中也说道,仅仅建造一个总线的工程是不可取的。IT部门认为只要建造了一个总线,人们就会围绕着总线来构造SOA的应用了。但是问题在于,当人们开始构造SOA应用时,他们会发现那些已经建造好的ESB已经不能满足当前的需求了。
针对这种错误的倾向,他警告道“只有当你实际需要一样东西,才去实现它,决不要仅仅因为你预见到
“ESB就是道路,试想城市规划时是不是先把所有的道路都修好,然后再去修建筑呢?”毛新生这样形象地做了一个比喻。
正确认识SOA的真谛
以ESB为中心来构建SOA系统,这种错误的根源就是完全从技术角度考虑,而忘记了SOA的核心是业务价值。
“Bobby Woolf的这篇文章就是批判唯技术而技术的错误路线,这是一个不太好的建设企业IT的倾向。”毛新生这样解释Bobby那篇文章的真正目的,他进一步说道:“我们每天都在谈业务驱动,业务敏捷,把业务和IT对齐,所有这些其实都在强调SOA的核心是业务价值,它所解决的问题是业务问题,而不是关注技术的。而ESB是一个完全技术的东西。”
离开了SOA,ESB将失去它所连接的服务,而仅仅是一个总线,同时也将变得毫无价值。Bobby做了一个比喻:路是没有任何价值的,除非你利用它把一个东西从一个地方移到另外一个地方。而离开SOA,ESB就像一个没人使用的道路。
“做SOA的事情不要先上来建立一个大而全的ESB,相反是关注你的业务问题,找到用SOA的方法来解决业务上的需求,在解决这个问题的过程当中,你会看到一系列的业务服务。这些业务服务是会产生业务价值的。它可以灵活地组装,动态地解决你变化的业务需求。这是它的价值,只有这样才能使你的业务敏捷起来,随需应变起来。而在服务的组装过程中,你再去考虑利用ESB来把他们连接起来。”毛新生说道。
在认识到SOA的业务本性后,我们将重新回归ESB在SOA实施过程中的正确位置,而不是一切以ESB为中心。当然这种矫正并不是否认ESB的价值。ESB是好的,单纯的ESB项目是坏的。让架构围绕服务,而非总线。