ESB企业服务总线解决方案剖析_第1页
ESB企业服务总线解决方案剖析_第2页
ESB企业服务总线解决方案剖析_第3页
ESB企业服务总线解决方案剖析_第4页
ESB企业服务总线解决方案剖析_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关于soa关于 soa 的概念,你可以找到很多的文章从不同的角度来描述它,不同的软件提供商也有不同的定义方式。bea 有流体计算,微软有indigo和 soa-building, sap 有 esa 。 每个人都可以从不同的视角来理解soa ,从程序员的角度,soa 是一种全新的开发技术,新的组件模型,比如说 web service;从架构设计师的角度,soa 就是一种新的设计模式,方法学;从业务分析人员的角度, soa 就是基于标准的业务应用服务。从概念的角度, ibm 对 soa 的定义是最为全面的,既 soa 是一种构造分布式系统的方法,它将业务应用功能以服务的形式提供给最终用户应用或其

2、他服务。 soa 包括如下要素 :一个体系架构,用开放的标准将软件资产(asset) 化为服务提供标准的方法来表示软件资产及其交互单独的软件资产作为构造单元,被重复使用来开发其他应用将关注点从细节实现转移到应用(application) 组装整合企业外部的应用(b2b )的方式开发(现在)和整合(未来)的统一本文针对的读者是软件开发人员, 站在开发人员的角度, 往往希望软件开发能够满足对于开发效率、可靠性、易维护性、易管理等多方面的更高要求。让我们通过回顾软件开发的演化过程来看一看 soa 出现的必然性:面向机器语言 (monolithic) 的开发模式:需要根据不同平台的机器语言来开发代码。

3、面向过程 (procedure) 的开发模式:独立于机器的程序语言(c, pascal等 )使开发过程变得简单了,用过程来代表一个抽象的代码集合,包装重用现成的代码。面向对象(object)的开发模式:用更接近现实的对象来表述一个相对完整的事物。面向对象的语言 (smalltalk ,java 等 ),提供了更抽象的封装和重用模式。域到软件程序的直接映射,更接近人类的自然思维方式。面向对象的开发强调从现实世界问题面向组件 (component)的模式:随着软件开发规模的扩大,在涉及分布式、异构等复杂特征的环境中,代码级别的重用性差,可维护性差,效率低的弱点是不可逾越的,因此人们以架构运行环境(

4、如 .net ,j2ee 等 )来提供完善的支撑平台,从而把开发者解放出来,更专注于业务核心的开发。而这些业务功能 (business function)以组件的形式 (dcom , ejb 等 )发布运行在架构运行环境中。软件开发的重用模式也上升到业务组件的级别。面向服务 (soa) 的模式:当软件的使用范围扩展到更广阔的范围,往往会面对更加复杂的it环境和更加灵活多变的需求。服务(service) 的概念出现了,人们将应用(application) 以业务服务(business service)的形式公布出来供别人使用,而完全不需要去考虑这些业务服务运行在哪一个架构体系上,因为所有的服务都

5、讲着同样的语言。soa 考虑了业务发展的长期性,体现了"变化就是永恒 "的思想。 soa 的核心体现在企业应用或者业务功能上的"重用 "和 "互操作 ",而不再把 it 与业务对立起来,这可以被视为在it 驱动业务的方向上迈出的重要一步。我们注意到, soa 同样也强调重用 (reuse) , 但是相对于传统的代码重用,对象重用,和部件重用, soa 的重用粒度更粗。soa 的重用在于业务级的应用,即服务的重用,这与软件的发展规律是相一致的。在软件发展的过程中,软件重用的对象越来越接近我们的现实生活。通过部件的重用,软件的开发更具效率

6、,并且开始试图用组件表达业务模式。但是, it 人员仍很难对业务人员解释清楚 it 结构怎样映射到业务模型上。然而,it 架构与业务模型的弥合是不可避免的方向。现代企业的业务环境所面临的最大挑战就是变化,规则在变,需求在变,而对变化做出最快的反应,尽快地适应变化,成为企业占得先机,成功运作的关键。很多企业的业务环境依赖于他们的it 架构,因此, it 部门往往直接承载了业务变化带来的压力。每一个具体的业务变化,都直接反应到对现有的 it 平台的要求:要么企业it 架构本身对变化自适应,要么it 架构能够在短时间内根据新的业务规则做出调整。这就是soa 架构提出的根本原因,我们需要一种更加贴近业

7、务的it 架构,能够直接描绘业务,对那些不懂it 技术的业务领域专家来说,业务服务却是他们最熟悉的,也就是说是 soa 把软件重用的对象从it 人员上升到了业务人员。因此,我们可以说soa 与其它的模式相比,最大的进步在于它与业务的关联性," 服务 " 对应到实际业务。it 通过 " 服务 "与业务发生了密切的关系,业务人员和it 人员都可以专注于业务逻辑的实现,而共同的语言就是"服务 "。但不是什么场合都适用soa 。通常来讲, soa 适用于较为复杂的it 架构,经常需要与外部复杂的 it 环境交互,并且需要快速地应对频繁发生的业

8、务变化。就像你不可能在控制洗衣机的芯片上使用 ejb 开发一样,如果你的it 环境规模很小,足以灵活地应对变化,不需要与其他的异构it环境频繁交互,那么 soa 带来的好处就不足以抵消它给你带来的系统复杂性。但是,即令如此,你也并没有被完全排除在soa 的大趋势之外。 soa 是如此地倍受瞩目,我们可以预见到它的迅猛发展,因此即使你的内部it 架构本身并不是基于 soa 的,你也还有机会参与到未来的soa 架构中去。例如,将你的某个业务以服务的形式发布到某个外部soa 平台上供别人使用,作为第三方soa 平台的一个服务提供者(service provider)存在。在选择 soa 的实施方案时

9、,要记住,软件的具体实现技术诸如web服务与 soa 是两回事,soa 是一个概念,方法学,或者用一个更时髦的词:一种模型。而web 服务呢?它是一种具体的实现技术,就像 ejb 一样。 soa web 服务。不过公平地讲,web 服务倒确实是目前最适合实现 soa 的技术之一,用web服务来封装业务服务是个不错的选择。因为web 服务是标准的,ws-i 协议保证了来自不同厂商的web 服务即使运行在不同的平台上,底层的实现机理不同也可以顺利交互,这是以前的任何一种技术如corba , ejb ,或 dcom 都不能做到的。而且,web 服务的定义与实现是分开描述的,即松散耦合, 因此,可以很

10、方便地替换服务的内在实现而不会对现有的系统造成任何冲击,这也极大地促进了it 架构的灵活性。对于 soa 更进一步的了解,可以参考ibm developerworks上其他 soa 相关的文章 (请参见参考资料 ),我们的系列文章将主要讨论esb ,因此不再此过多地论述soa 了。为了使我们下面的论述更顺畅,请先牢记典型的soa 架构有哪些基本的要求:soa 在相对较粗的粒度上对应用服务或业务模块进行封装与重用;服务间保持松散耦合,基于开放的标准,服务的接口描述与具体实现无关;灵活的架构- 服务的实现细节,服务的位置乃至服务请求的底层协议都应该透明;esb让我们暂时回到网络技术不普及的时代,你

11、怎样在两台机器之间传递文件?我还记得为了给实验室的每台机器安装 borland c+的环境,猜猜我动用了什么:一根"串口线 "。不过,我仍然觉得庆幸,好在每台机器都运行同样的操作系统- dos( 很少有人还记得dos 中有 interlnk 这样一个命令吧 ), 用来通过串口线在两台机器间传递流文件。否则我将不得不用软盘来拷贝所有的安装文件。我那个时候的梦想就是,哪一天有这么一个叫做"网络 " 的东西能够把实验室里面所有机器都连接起来,而不用我在各机器之间跑来跑去。让我们回归主题, 你现在已经基本明白了什么是soa 。假定你已经按照soa 的思想提炼出了

12、各种业务服务,公布出来,同样,你发现其他很多人也做了同样的事情。大家都很振奋,开始踊跃的尝试,我调用你的一个服务,你调我的一个服务。啊哈!大家都soa 了。且慢,那么这个soa给你们带来了什么好处呢?ok ,现在我可以在 j2ee 环境里调用 .net 的组件了,但是原来没有 soa的时候也可以做到的呀。只要两个节点之间互相认可对方的方式,即使不存在公开/统一的服务界面也可以实现点到点的互联。因此我们不得不承认,如果我们只有服务,而服务的请求者和服务的提供者之间仍然需要这种显式的点到点的调用,那么这就不是一个典型的soa 架构。请看图二,服务的参与双方都必须建立1 对 1的联系。这样一个结构与

13、我十几年前的那种互联的方式何其相似!但是,还记得我们上面提到的soa 三个基本要素吗?显然第三点没有做到。因此,在 soa 中,我们还需要这样一个中间层,能够帮助实现在soa 架构中不同服务之间的智能化管理。最容易想到的是这样一个hub-spoke结构,在 soa 架构中的各服务之间设置一个类似于 hub 的中间件,由它充当整个soa 架构的中央管理器的作用。请看图三,现在服务的请求者和提供者之间有了一个智能的中转站,服务的请求者不再需要了解服务提供者的细节。不错!看上去是一个好的 soa 结构。事实上,传统的eai 就是通过这样一种方式来试图解决企业内部的应用整合问题。eai 的目标是支持对

14、现有it 系统的重新利用,通过eai 技术能够将不同的软件和系统串联起来,延长这些应用系统的生命周期。传统的eai ,往往使用如 corba 和 com 等的消息中间件进行分布式,跨平台的程序交互,修改企业资源规划以达到新的目标,使用中间件、xml 等方法来进行数据分配。 因此,实际上传统的eai 是部件级的重用。很不幸的是,基于部件的架构没有统一的标准,因此,各个厂商都有各自不同的eai 解决方案,你会看到各种各样的中间件平台。如果eai 碰到了异构的it 环境,就必须分别考虑怎样在各个不同的中间件之间周旋,来实现合理的互联方式,你不得不考虑各种复杂的可能性。因此,你所见过的大多数传统eai

15、 解决方案都比较笨重。再回顾一下我们上面介绍过的 soa 的应用场景: 复杂的企业级架构。 如果我们选择 hub 的模式来构建 soa 基础架构,从纯粹逻辑的角度,可能会出现哪些问题呢?首先,整个 soa 架构的性能,如果每个服务的请求都经过中央 hub 的中转,那么 hub 的负担会很重,速度会随着参与者的增多而愈来愈慢; 其次,这样的系统会很脆弱, 一旦 hub 出错,整个 soa 架构都会瘫痪; 最后,这样的架构会破坏 soa 的开放性原则, 参与者运行在一个相对封闭的环境中, 扩展起来十分麻烦。因此,这也不是理想的 soa 架构。好了,现在该esb 登场了,请看我们的正解:它与前面的h

16、ub 结构有什么不同呢?首先,它比单一hub 的形式更开放,总线结构有无限扩展的可能; 其次,真正体现了soa 的理念, 一切皆为服务, 服务在总线 (bus) 中处于平等的地位。即使我们需要一些 hub ,那么它们也是以某种服务的形式部署在总线上, 相比上面的结构要灵活的多。这就是 esb ,我们需要给它一个明确的定义: esb 是一种在松散耦合的服务和应用之间标准的集成方式。它可以作用于:面向服务的架构-分布式的应用由可重用的服务组成面向消息的架构- 应用之间通过esb 发送和接受消息事件驱动的架构- 应用之间异步地产生和接收消息很不幸,上面的定义看上去很拗口,我们暂且用一句较通俗的话来描

17、述它:esb 就是在 soa架构中实现服务间智能化集成与管理的中介。而它与soa 的关系要相对好理解一些: esb 是逻辑上与 soa 所遵循的基本原则保持一致的服务集成基础架构,它提供了服务管理的方法和在分布式异构环境中进行服务交互的功能。可以这样说, esb 是特定环境下 (soa 架构中 )实施 eai 的方式:首先,在 esb 系统中,被集成的对象被明确定义为服务,而不是传统eai 中各种各样的中间件平台,这样就极大简化了在集成异构性上的考虑,因为不管有怎样的应用底层实现,只要是soa 架构中的服务,它就一定是基于标准的。其次, esb 明确强调消息 (message) 处理在集成过程

18、中的作用, 这里的消息指的是应用环境中被集成对象之间的沟通。以往传统的eai 实施中碰到的最大的问题就是被集成者都有自己的方言,即各自的消息格式。作为基础架构的eai 系统,必须能够对系统范畴内的任何一种消息进行解析。传统的 eai 系统中的消息处理大多是被动的,消息的处理需要各自中间件的私有方式支持,例如api 的方式。因此尽管消息处理本身很重要,但消息的直接处理不会是传统eai 系统的核心。 esb系统由于集成对象统一到服务,消息在应用服务之间传递时格式是标准的,直接面向消息的处理方式成为可能。如果esb 能够在底层支持现有的各种通讯协议,那么对消息的处理就完全不考虑底层的传输细节,而直接

19、通过消息的标准格式定义来进行。这样,在esb 中,对消息的处理就会成为 esb 的核心,因为通过消息处理来集成服务是最简单可行的方式。这也是esb 中总线 (bus) 功能的体现。其实,总线的概念并不新鲜,传统的eai 系统中,也曾经提出过信息总线的概念,通过某种中间件平台,如corba来连接企业信息孤岛,但是,esb 的概念不仅仅是提供消息交互的通道,更重要的是提供服务的智能化集成基础架构。最后,事件驱动成为 esb 的重要特征。通常服务之间传递的消息有两种形式,一种是调用 (call) ,即请求 /回应方式,这是常见的同步模式。还有一种我们称之为单路消息(one-way) ,它的目的往往是

20、触发异步的事件,发送者不需要马上得到回复。考虑到有些应用服务是长时间运行的,因此,这种异步服务之间的消息交互也是esb 必须支持的。除此之外,esb 的很多功能都可以利用这种机制来实现,例如,soa 中服务的性能监控等基础架构功能,需要通过esb 来提供数据,当服务的请求通过 esb 中转的时候, esb 很容易通过事件驱动机制向soa 的基础架构服务传递信息。esb 的适用场景及要素首先,我们来看一看 esb 有哪些基本的功能。 既然 esb 会以中介的身份出现,它就必须有两方面的考虑,首先它必须了解被它中介的两个端点:1) 服务的请求者以及请求者对服务的要求,2)服务的提供者和它所提供服务

21、的描述;其次,它必须具有某种机制能够完成中介的任务。我们把这两类考虑归纳为 esb 的两个基本功能: 面向服务的原数据 (metadata) 管理功能 和中介 (mediation) 功能。 作为 soa 的重要构成部分, esb 承担的重任还包括怎样将企业架构中已存在的业务服务连接到总线上来,我们称之为适配器(adapter) 功能。尽管服务本身已经用公开的接口来描述,但具体的实现还是运行在不同的环境中,因此, esb 还应该提供对服务底层协议的支持,譬如应用协议 j2ee ,.net , 通讯协议如 http ,jms 等等。除此之外,还需要对具体应用中涉及到的服务加以管理,如性能,可靠性

22、,安全性等等。esb提供了最基本的功能来保障soa系统的运行,这些功能应该包含下列内容:在总线范畴内对服务的注册命名及寻址管理功能- 服务的meta-data管理面向服务的中介功能提供位置透明性的服务路由和定位服务多种消息传递型式(请求 /响应,单路请求,发布/ 订阅等等 )支持广泛使用的传输协议(http , jms , mq 等等 )支持多种服务集成方式,比如jca 、 web服务、 messaging 、 adaptor对服务管理的支持,如服务调用的记录、测量和监控数据的提供很多时候, 很难界定哪些功能是应该由soa 的基础架构 (infrastructure)提供的, 而哪些应该放在

23、esb 的范畴内来解决。笔者认为,放大或突出esb 在 soa 架构中的地位并不很恰当。比较合理的解释是: esb 应该构筑在完善的soa 架构上,做它应该做的事-服务集成。至于怎样集成,应该根据你的上下文环境,考虑有哪些soa 的基础设施可供你使用,然后再基于soa 的基础架构来实现你的esb 设计。在更高的层次,esb还提供诸如服务代理,协议转换等等功能,我们称之为esb的应用模式(esb usage pattern) 。作为 soa 架构的服务集成功能提供者,我们可以总结出的一些比较常用的应用模式,例如:1)协议转换模型,用于当服务的请求者与服务提供者基于不同协议时的消息转换情形2)消息

24、广播模式,用于事件驱动多个动作或者消息广播的情形3)服务匹配模式,用于需要动态选择服务提供者的情形,例如可以根据消息的内容,或负载情况,或服务级别约定 (sla) ,来为服务请求者选择合适的服务。这里我们只列举了 3 个典型的模式, 而这样的例子实在太多了, 发挥你的创造性, 你还会想出来更多的,这也是 esb 的魅力所在。但是,在 esb 的设计上,注意不能喧宾夺主, esb 的功能在于帮助服务的集成,而不是参与业务逻辑。 业务逻辑应该封装在业务服务中,或通过业务编排服务 (process service) 来组织。实战关于 esb ,目前还没有被一致接受的标准。我们可以通过选择成熟的eai

25、 中间件来实现服务的集成与互操作性。这样做的好处是你的开发过程会很顺畅,因为它已经足够稳定且有丰富的工具支持。通常这样的eai 产品在目前阶段都还不是基于开放的标准,例如 ibm 的 websphere mq5.3,作为 ibm eai 实现 esb 的消息平台,就不是开放的标准。如果一定要选择开放标准的esb 实现方式, web 服务加上 ws-*协议几乎是我们唯一的选择,但毕竟 soa 、esb 仍处于起步的阶段,一方面我们还没有很成熟的产品支持所有的ws-* 协议,另一方面这些ws-* 协议本身还处在频繁变化的阶段。因此当你选择esb 实施方案的时候,最好考虑平衡esb 实施、开发的工作

26、量。这里你可能会有疑问, 既然 soa 架构追求开放性, 为什么我们要容忍用私有的esb 产品如 ibmwbi/mq 来构建 soa 架构的集成环境?这是一个好问题。soa 始终是我们追求的大目标, 开放是必然的趋势,这是毋庸置疑的。但是,请注意esb 的定义,至少到目前为止,还没有明确的要求它的实现一定是开放的, 每一个软件供应商对它都可能有不同的理解和实现的策略。我们不用怀疑esb 将来的开放之路,但至少在目前阶段,我们不能坐下来等待它的到来。其实, esb 充当的是soa 中的中介角色,因此,即使将来esb 变化了,对服务的请求者和服务的提供者都不会造成很大的冲击,因为它本来就是对用户透明的。举个例子,j2ee ,它的标准一直在变化中,但是大家通常都能接受

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论