1、SOA是什么
应该说从不同的角度可以有不同的理解和描述,首先SOA是面向服务体系结构的简称,如果从软件架构的角度来说SOA是一种用来整合不同应用服务的解决方案框架,从软件制作理念的角度来说,SOA的出现是软件厂商开始抛弃传
统“软件产品”思路转向“以客户需求”为核心理念的具体体现。从编程角度来说,有人说SOA的出现是继面向对象编程之后下一代编程方法最可能的候选,不过我个人不太同意,SOA是粗粒度的,应该说是基于面向对象编程的,这是开发企业应用的一个基础,SOA的出现是用来整合现有的应用的,是一种相对温和的整合现有应用的方案。
2、SOA的发展
1996年,Gartner最早提出SOA。2002年12月,Gartner提出SOA是"现代应用开发领域最重要的课题",SOA并不是一个新事物,IT组织已经成功建立并实施SOA应用软件很多年了,BEA、IBM等厂商看到了它的价值,纷纷跟进。SOA的目标在于让IT变得更有弹性,以更快地响应业务单位的需求,实现实时企业(Real-Time
Enterprise这是Gartner公司为SOA描述的愿景目标)。而BEA的CIO Rhonda早在2001年6月就提出要奖BEA的IT基础架构转变为SOA,并且从对整个企业架构的控制能力的提升效率、加快开发速度、降低在客户化和人员技能的投入方面取得了不错的成绩。
3、从技术角度认识SOA
SOA:面向服务的体系结构,他是一种体系结构风络,它将应用程序的不同功能单元-服务(service),通过服务间定义的良好的接口和契约联系起来。接口通过采用中立的方式定义,独立于具体实现服务的硬件平台,操作系统和编程语言,使得架构的系统中的服务可以使用同一和标准的方式进行通信。这种具有中立的接口定义的特征称之为服务间的松耦合。简言之:就是一切皆服务,服务可组合。
4、早期的SOA框架
WSIF(Web Services Invocation Framework)是早期的SOA框架,原理图如下:
如上图所示,SOA利用了类似于RMI的服务通信方式。服务的提供者通过UDDI协议来将自已的服务发布到一个可以进行公共查找的服务目录上去,而服务目录上利用WSDL来描述服务(应该会包含服务的调用方式和服务的定位地址),然后服务的使用者在需要使用服务的时候利用UDDI协议到服务目录上去查找相关的服务,一旦找到了就根据服务的描述通过SOAP来定位到实际的服务提供者上去,进行服务的调用,因为服务的调用定位全部都是利用XML文件来描述的,而XML文件是一个中立的语言,不涉及到任何具体的物理细节,因此各个调用者之间可以利用一种公共的方式进行服务通信。
名词解释:
RMI:(Remote Method Invoke)JAVA里的远程方法调用
UDDI:(Universal Description Discovery and Integration)统一描述、发现和集成协议
是一种目录服务,企业可以使用它对Web Services进行注册和搜索以便动态的发现和调用服务
WSDL:(Web Services Description Language) web服务描述语言,是基于XML的用来对web服务进行描述
SOAP:(Simple Object Access Protocal)简单对象访问协议,是一种基于XML的协议,用于服务间发送消息,并执行远种过程调用
5、SOA之基础设施ESB
为什么要提到ESB这个概念,前面的从技术角度认识SOA讲到SOA简言之就是一切皆服务,服务可组合,应该说做软件就是要达到像现在做硬件一样,是可拔插的,硬件有BUS的概念,软件自然也有。
ESB:(Enterprise Service Bus)企业服务总线,ESB是中间件技术与Web
Service等技术结合的产物,也是SOA系统中的核心基础设施。ESB就是服务的中介,形成服务使用者->ESB服务Proxy->服务提供者的生物链。
ESB的三大核心功能是:数据传输、消息协议转化、路由
介绍了这么多,ESB倒底是什么?我想说其实ESB就是一个概念、可以有不同的实现如SUN公司的JBI,而Tuscany
SCA实现了ESB的数据传输、消息协议转化,再加上消息路由的话也就可以算是ESB的一种实现了。
下图是ESB在企业服务中的作用
6、SOA常见实现介绍
Tuscany SCA是SOA规范的一个开源实现,由Open SOA组织起草给OASIS(结构化信息标准促进组织)发布
SCA包括以下几个部分:
1、SCA(Service Component Architecture )的开源实现,实现服务Service的整合
2、SDO( Service Data Object)的开源实现,实现不同结构数据的整合
3、DAS(Date Access Service)的开源实现,提供SDO到数据库的接口服务
这三部分分别提供java和C++两种实现
SOA常见的实现还有SUN公司的JBI,也是ESB的一种实现。
7、Tuscany SCA几项技术介绍
SCA(Service Component Architecture ),服务组件架构,用于定义服务,是构建SOA的基础元素,是一种服务整合技术。
SDO( Service Data Object)服务数据对象,用于表示服务中心流转的数据,是业务操作的核心。
BPEL(Business Process Excution Language)
业务流程执行语言,用于编排服务,是业务流程的体现(用XML来编写)
1、SCA介绍之SCA组件
上图左边services是组件对外提供的服务,右边references是组件对外的依赖,即需要调用其它的服务,外界可以通过设置properties来改变Component的行为。中间的实现对外是不透明的,可以是java实现,可以是BPEL描述的业务流程(即根据BPEL描述调用相应的一串services),也可以是构件(Composite)。
2、SCA介绍之SCA构件
上图是Component通过wire连接形成SCA构件,上图左边的Service是两个组件连接起来后经过提升后对外提供的服务,右边的Reference是提升后对外的依赖,外界可以通过设置properties来改变构件的行为。上图左上角Service,对外提供的服务可以是java
interface,也可以是WSDL PortType(基于XML的描述,是语言无关的),上图左下角Binding是服务提供的方式,是与实现相关的。不同的Service提供方式会对应不同的Binding(绑定方式),在SCA里java接口是可以发布为webservice接口的(通过WSDL来描述,对应的绑定方式会是Web
Service 的SOAP协议),上图右边构件对外的reference是同样的。
3、SCA介绍之SCA域
如上图,构件相互连接起来就构成了SCA里的域,构件可以作为Component的实现。实际应用环境中的域会是这样子的:一般一个公司某个部门选择了一个特定的SCA供应商的产品,一般就是一种SCA运行时环境(如java环境),这个部门里SCA产品就构成一个域。
4、实际环境中SCA域、构件、组件、进程、机器之间的关系
如上图,域能包含一个或多个构件,每个构件都包含了多个运行在一台或多台机器上的一个或多个进程中的组件。
5、构件可以通过Web Service与域外应用程序通信
虽然一组SCA构件一般运行在单一的环境中,它还是可以与它自已域外部的应用程序进行通信的。SCA构件能通过使用交互性协议比如Web
Service来开放自已的可访问性接口。
由以上SCA组件、构件、域等分析可以看出 SCA的以下几个特点
松耦合:服务的定义、实现和使用相分离。组件和构件以接口方式提供服务
异 构:服务实现支持众多编程语言,服务连接支持常见的通信和服务访问技术如web服务、消息系统、RPC等
重 用:可以用不同的组合方式构成不同的应用,非SCA系统可以作为SCA实现加入SCA系统,重用这一点在
BPEL就已经体现得很明显了。
6、SDO(Service Data Object)简介
SDO为异构数据源提供了一个统一的数据模型,是一种离线型数据访问结构,有以下一些主要部分:
数据图(Data Graph)
数据对象(Data Object)
属性(Property)和类型(Type)
序列(Sequence)
变更摘要(ChangeSummary)
下图是SDO离线型数据访问结构图解
7、BPEL :(Business Process Execution)业务流程执行语言简介
BPEL是基于XML的
BPEL是用来描述多个服务交互的协作与协调,从而对外提供流程服务。与wire连接的区别是,BPEL是因业务逻辑而对SCA组件的编排。
BPEL流程本身由WSDL声明为web服务,对外界提供服务调用。
提供了可定制的错误处理与补偿机制。
BPEL关注于流程逻辑,实例关联,错误处理,事件处理,变量定义等。
8、大家也许会关心的,SCA与常用框架Spring、Hibernate是什么关系
Spring应用说也是一个服务整合技术,SCA也是一种服务整合技术,Spring可以作为SCA的构件的实现,或者是组件的实现整合进SCA。
Hibernate我们知道是一种ORM框架,解决了对象与关系之间的不匹配问题。在SCA里Hibernate相当于SDO部分,当数据源是关系形数据库的时候,可以尝试用Hibernate扮演SDO的角色。
9、SCA应用图解
上图的WCF(Windows Communication Foundation)是微软技术创建的应用
SCDL Configuration SCA构件的配制文件
上图左上角的Component的实现是BPEL(即根据业务逻辑需要对Service调用关系的描述),JavaServer
Page调用BPEL提供的服务时,会按照BPEL的描述调用一组Service。
左下角的Component的实现是Spring。
右上角和右下角分别是java实现的Component和微软技术实创建的应用。
以上是我参考电子工业大学出版的SOA核心技术 王紫瑶 等编著及众多网上博客按自已的理解整理写成,理解不当之处望各位看到博客的朋友指正。 |