在一家银行基于ESB产品做企业应用集成项目,自然要言必称SOA。客户对SOA也比较感兴趣,他们有EAI产品和项目经验。一日问SOA和EAI到底什么区别,SOA比EAI究竟多了哪些东西。当时就自己的理解和客户描述了一番,回来总结整理成文。这里不是给客户做PreSale, 尽可能从本质的层面来分析比较这两个技术解决方案和思想。花开两朵,各表一支,我们先概括一下EAI和SOA。
1. EAI的概述
先来概括一下EAI的解决方案的中心思想。EAI企业应用集成即基于已有系统应用开发新的业务应用系统。面对的现状是:
- 各个系统的不同接口,可能是不同程序语言的API,消息,或者访问数据库。
- 不同系统的接口有不同的调用规范,即调用顺序,上下文关系,Session等。
- 不同的数据。包含数据类型,数据格式,数据业务语义的不同。
- 新业务流程的编写。
那么如果自己写程序开发一个跨多个已有系统的新业务时,需要在新业务实现中调用这些系统的不同接口,需要做这些系统之间的数据转换。这是一个很大而且烦琐的工作。可能在程序中既要调用Java接口,又要调用C++接口;可能要在这些系统两两之间做数据转换,需要做C2n=n(n-1)/2次转换。显然这不是一个好的方式。
为了简化这些工作,EAI平台的解决方法是:
- 定义了中间层数据类型,数据格式,接口规范,接口通信方式和通信协议。
- 平台去做已有系统和中间层之间的数据格式转换。
- 对已有系统接口的封装,提供统一的接口。
- 使用图形工具进行流程编排,编写数据转换和映射规则。由EAI平台引擎来执行。
EAI中心的解决方案和思想是制定统一的数据和接口定义,使EAI应用的开发者能够使用一种数据和接口定义来实现新的业务,由平台来做统一的数据和接口与已有系统各种不同的数据和接口之间的适配。一般EAI软件平台都包含两类产品:流程编排和驱动工具+适配器。
- 适配器的主要功能是做已有系统和中间层之间的数据转换;已有系统接口调用的封装,统一接口和已有系统接口的适配。
- 流程工具的主要功能是基于调用适配器功能操作,编排自动的操作流程,编写各个操作之间的数据计算和映射,引擎来执行这些流程。
例如TIBCO的EAI平台包含两个产品流程工具Business Works, 适配器Adapter。简单的适配器包含在Business Works中,提供一些简单操作的封装,如文件操作,JMS消息收发等;复杂适配器封装复杂的技术,软件或者系统,如CORBA,MQ , SAP等,复杂适配器有独立于Business Works的引擎,两者通过消息中间件交互。Business Works提供这些操作的流程编排,操作之间基于XSLT的数据映射。
TIBCO EAI平台结构图
2. SOA概述
SOA不是一个产品,而是一个构建企业应用和集成企业已有系统的指导方法和思想。它将企业应用系统看作一个分布式系统,由很多独立的,提供一定业务功能的服务组成。服务彼此通过标准的接口协议相互调用,可以方便地将多个服务编排组成一个新的业务流程。当出现新的业务需求时, 不需要从零开始实现, 只需将已有的服务进行编排装配来实现新业务。快捷地实现新业务需求是企业保持竞争力,在未来高度竞争,服务专业化,定制化的环境下生存发展的关键所在。在设计上,SOA需要一个方法论来指导如何把一个系统划分为粒度合适,高可复用性的服务集合;在技术上,SOA同样要解决异构服务接口之间的互联互通问题,连兼容各种已有的数据和接口标准,来连接各种已有软件和系统。为此SOA需要做的工作有:
- 定义统一的服务接口描述,接口规范,接口访问策略。
- 支持多种服务接口通信方式和通信协议。
- 支持多种服务流程逻辑实现方式 ,BPEL , java, C++ 。
- 支持多种已有组件技术,Web Service, EJB, COM,CORBA等。可以通过服务接口调 用组件功能,也可以通过组件接口调用服务功能。
- 定义统一的数据类型和数据格式。定义数据对象模型。
- 提供统一的数据访问接口,支持多种类型的数据,关系数据库记录,EJB Entity Bean 。可以使用标准服务接口访问不同类型的数据。
- 提供业务建模工具,定义企业资源,组织结构,业务流程。
SOA技术提倡开放性的规范和标准,一系列属于SOA范畴的规范和标准完成了以上所列的工作。
- 服务组件架构规范-------SCA(Service Component Architecture) 定义了服务的元数据描述语法,包括服务接口(Interface),服务属性(Property),服务实现方式(Implementation),服务访问策略(Policy),服务通信方式和通信协议(Binding),服务之间的调用和被调用关系(Service and Reference)等。
- 服务数据访问对象规范---SDO (Service Data Object)定义了统一的数据类型,数据格式,统一的数据访问接口支持多种已有类型的数据,如关系数据库记录,EJB Entity Bean等。
- 服务流程编排运行规范---BPEL(Business Prosess Execution Language)定义了基于已有服务编排实现逻辑流程的语法。
- 服务实现规范-----------JBI (Java Business Integration) JBI是JAVA服务运行平台实现的设计规范,定义了一组平台提供商需要遵循的服务提供方接口。
- Web服务接口定义规范----WSDL(Web Service Definition Language)服务接口定义规范,描述了接口的输入,正常输出,异常输出。
SOA平台的主要组成是BPM+ESB。BPM,业务流程管理(Business Process Management )。业务流程对应于企业真正的业务实现,满足一定的业务需求。业务流程层面, 有以下的一些概念: 组织机构 (Organization), 业务角色(Role), 业务事件(Business Event),自动业务和人工业务,工作列表,执行规则等。 业务流程是由服务编排组合实现而成,服务提供确定的功能,不限制实现方式和接口访问方式。服务可以用来实现一定的业务功能,也可以封装已有系统的接口,调用已有系统的功能;企业服务总线(Enterprise Service Bus)是服务的开发,运行管理平台。支持服务的创建,注册,部署运行,监控治理。目前多数的BPM提供BPEL引擎,ESB支持SCA和SDO规范。
对比EAI平台可以看到,ESB做了标准数据和接口到各个技术和系统的数据和接口,两者之间的适配工作,BPM提供了基于基本操作或者服务的流程编排和驱动。SOA和EAI从技术角度来看,层次结构相同,解决方式一致。
例如TIBCO的SOA平台包括最新的ESB产品Active Matrix, 和BPM产品iProcess。Active Matrix支持SCA规范,同时和已有的Business Works 和Adapter产品兼容。Adapter可以封装为服务运行在Matrix,作为连接已有系统的基础服务;Business Works 支持BPEL,可以将运行在Matrix上的多个服务编排出新的流程,同时这个流程可以作为更高一级的组件服务或者业务服务运行在Matrix上。
TIBCO的SOA平台结构图
3. SOA和EAI的相同点
- 在技术层面有统一的数据和接口定义,可以方便连接各个异构系统。
- 都兼容各组件技术(CORBA,COM,EJB),远程调用技术(RMI)。
- 提供将简单服务或者操作编排组织成更复杂的服务或者操作。
从技术角度上讲,两者是很类似的。
4. SOA和EAI的区别
- SOA提供了开放的规范和标准:数据定义SDO,接口定义SCA,服务编排BPEL; EAI的规范和标准都是各个EAI平台厂商私有的。
- SOA服务调用时可以动态绑定服务。对于EAI来说,调用是设计时静态绑定的。
- SOA提供的服务接口是开放的,可以在SOA平台外以异构的接口调用SOA平台上的服务,如可以使用EJB接口调用SOA平台上的服务。EAI的接口是私有的,只能在EAI平台内部调用,EAI提供只一种标准的接口来调用异构系统的功能。
- 从设计思想角度,SOA旨在基于分布式的高可复用性服务集合来构建企业应用系统;EAI只提供连接手段,流程编排手段,在设计思想方式上不做任何限制。
- SOA的服务分业务服务,基础服务多个层次;EAI中的适配器相当于封装已有系统的基础服务。
EAI平台互联不同的组件技术和产品,它使用与SOA类似的技术方式实现,即制定统一的数据和接口定义;SOA提供了一种开放的标准的异构接口互联互通技术,应用这种技术,SOA平台可以提供连接已有组件技术和软件产品的适配性基础服务。
SOA强调服务的复用性,实现异构服务接口的互联互通。EAI强调集成异构系统,把各个已有系统的异构接口封装为统一的接口。EAI不强调服务复用,但也可以用SOA的思想配以EAI平台来设计开发企业应用。相当于用C语言也可以写面向对象的程序,虽然不如直接使用Java方便。
在设计层面,SOA将应用系统划分为高可复用的服务组成的集合。服务分业务服务,组件服务和基础服务几个层次。设计思路更强调从上到下,即从业务到技术;EAI提供接口封装技术,自动流程的编排。适配器相当于基础服务。设计思路一般是从下而上,即从技术到业务。技术层面,SOA是旧的组件技术和EAI技术的组合和升级。
所以实施SOA项目,最主要的还是在设计层面上如何把业务系统划分为粒度合适,高聚合低耦合,复用性好又兼顾性能的服务集合;于技术层面,SOA提供了开放的数据接口标准,方便异构系统的互通互连,和EAI功能相同,但更开放更灵活。
最后给SOA起一个技术层面的新名字“企业组件接口集成”。SOA=ECII (Enterprise Component Interface Integration) 。
原文链接:http://blog.csdn.net/zlushangnwpu