您的位置:首页 > 其它

SOA思想、技术

2009-12-06 18:51 393 查看
SOA思想与技术
Gartner Group 于1996 年最早提出了面向服务构架(Service Oriented Architecture ,SOA),而该公司预计2008年至2010年,采用SOA体系构架的企业将分别达到70%和80%。
那SOA究竟是什么呢?可以说他是一种信息系统集成思想。理解SOA关键是理解这个“S”,即Service。服务可以说是一种即超越具体技术,又包容具体技术的一种业务功能(SOA是一种较系统应用层面的,通常是分布式多系统应用层面上,而非独立的单个系统上的)。怎么才算是SOA呢,或者说SOA包括哪些基本要素和目标呢?目前有哪些技术可以来实现SOA呢?接下来将一一说明。
一、SOA基本要素:
1. 松散耦合
a) 服务之间的松散耦合
这里所说的服务之间的松散耦合,是指不同服务的功能不要互相依赖,一个服务应该能够自己实现所提供的接口功能(所谓内聚),不要依赖其它的服务。以ATM取款机为例,它提供了余额查询、取款、存款等功能。这些功能应该能够独立的工作,比如取款功能不能工作了,应该要不能影响余额查询功能和存款功能的运行。甚至ATM机出错了,其它业务办理方式应该要能继续服务(如银行柜台、WEB终端、电话银行等)。



(ATM系统架构)
这个需求通过一个比较好的架构设计就可以实现,用传统的技术也可以实现,主要是要有这种独立、不互相依赖、内聚的思想。
b) 接口和实现之间的松散耦合
其实WebService已经实现了这一点,它以WSDL来描述WebService的功能、调用访问等,以UUID来统一发布管理WSDL地址,用J2EE或.NET或其它技术都可以实现。
c) 业务组件和传输协议之间的松散耦合
EJB需求RMI传输协议,WebService需要SOA传输协议,JMS需求JMS传输协议等,要解决不同传输协议的透明化、集中处理,其实现在也有相应的解决方案,在后面会逐一介绍当前流行的一些解决方案。
2. 粗粒度
“粗粒度”是指SOA中服务的接口应该比具体语言(如java,C#)上的接口要更大一些,但这个“粗粒度”也不要“太粗”,“太粗”则表明抽象程度太高,以至于远离了用户的实际操作,这就反而不好了。因为一切以现实的情况来衡量、设计、实现这才是最真实的、准确的(这一点不单是在SOA上,在java或C#等具体计算机语言上也是如此)。
3. 位置和传输协议透明
位置和传输协议是SOA最根本区别于目前面向组件编程的地方。目前的服务组件如EJB、WebService、JMS或相应的组件包(如javabean,dll等)的发布都是和特定应用服务器(如apache http server,iis,weblogic,tomcat,websphere,jboss等)客户端必须知道具体的应用服务器的URL才能调用相应的组件。在全球经济一体化的浪潮下,各企业的服务集成以便提供更多丰富的功能服务,这是必然的趋势。
位置透明,就是不论服务组件的实际位置URL如何变化,客户端的调用程序的URL都不需求改变。
传输协议透明,是指不管服务组件使用的是何种传输协议,客户端的调用程序的传输协议都不需求改变,这对于客户端来说是透明的。
目前组件的调用方式如下图:

(一般系统架构)
二、SOA目标
随着全球经济一体化的深入发展,敏捷的、多渠道的、安全的、松散耦合的系统集成已经成为越来越多企业业务的需要。
技术构架:



(SOA技术架构)
业务架构:



(SAO业务架构)
三、SOA思想方案
1. JBI架构思想
JBI的英文全称为“Java business integration”,翻译为中文“Java业务集成”。是SUN公司发布的一套基于JAVA应用组件进行集成的标准,针对目前各个JAVA容器不能统一并满足要求而提出的SOA架构。其中最核心的部分包括以下几个方面:
l 规格化消息路由器(Normalized Message Router)
l 绑定组件(Binding Components)
l 服务引擎(Service Engines)
2. SCA架构思想
SCA的英文全称是“Service Component Architecture”,翻译为中文“服务组件架构”,是IBM和BEA等公司提出来的一套SOA架构。
SCA的目的就是为组件接口和传输协议解耦而出现实,SCA组件将可以自由绑定各种传输协议,这为系统的集成打下了良好的基础。
JBI与SCA的异同:
相同点:
l 都是为了集成
l 都提供传输协议的解耦
不同点:
l SCA是以接口作为切入点,从组件接口层将传输协议和接口实现解耦,是从编程的角度出发的,一种全新的编程模型。
l JBI是以请求消息和响应消息作为切入点,在集成时将消息和传输协议解耦,形成一种和传输协议无关的标准消息服务,这样形成一种全新的区别于面有的应用服务器的集成容器,是从容器的角度出发,一种全新的容器模型。
3. SDO编程思想
SDO的英文全称是“Service Data Object”,翻译为中文“服务数据对象”。SDO要实现的是一个全新的数据结构,是一个“独立于具体技术”的数据对象。
如果说SCA根本目标是要实现业务组件接口和传输协议的解耦,那么SDO的根本就是是要实现数据与业务代码的解耦。
4. BPEL编程思想
随着WebService技术日益成熟和流行,许多企业的很多部门相应地创建了基于WebService的业务。如何在不改变这些WebService正常运行的情况下,将这些WebService集成起来创造出新的业务计算模型、业务流程就成为一个比较突出的业务需求。BPEL就是为将WebService业务流程串起来而出现的,简单地说BPEL就是通过流程编程将各种WebService集成起来,提供了一个“集成了种WebService接口”的接口。
四、SOA技术方案
1. JBI之ServiceMix服务总线
ServiceMix是一个完全实现JBI标准的开源项目,通过理解ServiceMix,也可以更容易理解JBI思想。
a) 主要功能
ServiceMix是一个轻量级的JBI容器,Spring目前已经提供以支持。它可以成为一个独立的服务总线提供者,也可作为另外一服务总路线的提供者。
l ServiceMix所支持的服务引擎
l Quartz:定时任务服务
l Cache:缓存服务
l JCA:J2C Connector Architecture
l Groovy:运行于JVM的脚本语言,用来创建服务
l Scripting:满足JSR223脚本创建服务
l XSLT:通过XSLT对XML格式的消息进行转换
l Xpath Routing:实现基于Xpath的路由
l Validation:验证消息
l PXE:BPEL集成服务
l Servicemix-bpe:BPEL集成服务
l Servicemix-sca:SCA集成服务
l Servicemixlwcontainer:ServiceMix提供的轻量级容器,主要针对(POJO)能够在运行时发布
l ServiceMix所支持的绑定组件
l Email:Java mail绑定
l File:对文件的收发绑定
l FTP:FTP协议绑定
l HTTP:HTTP协议(包括POST/GET)绑定
l Jabber:Linux即时通信器绑定
l XSQL:一种XML和SQL的混合体,支持数据库查询,然后将查询结合放在XML文件中
l VFS:不同类型文件系统访问封统一接口
l WSIF:Apache的WebService调用框架
l JAX WS:Java API for XML WebService,计划将用JAX-RPC代替
l JMS:ActiveMQ的JAVA消息服务
l RSS:访问并处理RSS种子
l SAAJ:支持Apache AXIS
l Servicemix-jsr181:基于JSR181开发的WebService
b) 体系架构
ServiceMix由三大部件组成:
l 服务引擎组件:负责格式转换、路由及相关服务(如BPEL,XSLT,脚本调用等)
l 绑定组件:主要用来接收外部的服务请求,以及向外部服务提供者发出请求
l ServiceMix的JBI容器:实现了JBI标准的功能服务总路线



(ServiceMix架构)
2. CXF(Celtix/Xfire)服务总线
CXF是Apache的一个开源项目,是原来开源项目Celtix与Xfire的结合产物。它能够支持多种绑定,由于和Xfire集成,因而其性能比较高。
l 支持多种绑定:如SOAP、REST、CORBA
l 支持的WEB服务:WS-Addressing、WS-Security、WS-ReliableMessageing、WS-Policy
l 支持多种传输协议
l 支持插入数据绑定
l 前端与核心程序分离清晰
l 高性能
l CXF总路线:CXF的骨干,提供CXF运行环境的共享资源。例如:WSDL管理器、绑定工厂管理器
l 消息和拦截器:对系统安全性、数据合法性拦截验证。
l 前端:通过JAX-WS创建服务,可以从不同的源头创建服务
l 传输层:将传输细节进行封,使CXF能够在传输消息时不需求考虑传输的技术细节,包括导管(Conduits)和目的(Destinations)的功能。导管负责传输消息,目的负责接收消息。
l 服务模型:服务模型在CXF内代表服务,包括两部分,第一部分是服务信息(ServiceInfo),包括类似与WSDL的服务模型及它的操作、绑定、端口。第二部分是服务本身,包括服务信息(ServiceInfo)、绑定、服务拦截器、服务属性等。
l 绑定:绑定提供在传输层的顶部映射具体的格式和传输协议。它包括两部分,第一部分是绑定工厂,它从服务模型的绑定信息创建一个绑定。第二部分是绑定,它包括一个特别的拦截器,同时也实现了createMessage()方法,它是一个消息的实现。



(CXF架构)
3. Apache Synapse服务总路线
Apache Synapse服务总线是一个易用的、轻量级的基于XML和WebService的集成代码。不需要重写任何程序,就可以直接将现胡的系统转化为SOA系统。
l 代理服务:支持传输、接口(WSDL/Schema/Policy)、消息格式(SOAP/POX)、WEB服务安全和优化转换(MTOM/SWA)
l 基于Apache HttpCore的无阻塞的Http/Https传输,高性能地执行数千个连接
l 内建注册、存储支持动态更新、重载配置和相关资源(XSD,JS,XSLT等)
l 支持负责均衡,故障转移和流量调节功能
l WEB服务安全:WEB服务可靠性消息和基于WEB服务策略的可配置性的流量。
l JMS消息支持二进制、文本、XML和SOAP
l 轻量级的XML和WEB服务为中心的消息驱动模型
l 支持配置序列化层文件系统用于版本备份和更新
l 支持错误处理、超时和恢复



(Apache Synapse架构)
4. Apache Tuscany的JAVA SCA
Apache Tuscany的Java SCA实现方式为支持SCA组件对过JAVA类来实现。
支持的绑定协议:
l AJAX绑定:支持与AJAX客户端通信
l JMS绑定:支持异步的JMS消息
l JSON-RPC绑定:支持JSON-RPC传输
l RMI绑定:支持RMI传输协议
l WS绑定:支持SOAP/HTTP WebService
支持的数据绑定:
l 支持AXIOM
l 支持JAXB
l 支持SDO
l 支持优化的SDO到AXIOM转换



(Tuscany SCA架构)
5. Apache Tuscany的JAVA SDO
SDO服务数据对象不同于以往任何的数据对象,它实现了数据和业务的分离。
Apache Tuscany的SDO是IBM和BEA联合起来贡献给Apache的一个开源项目,它主要完成了以下功能:
l SDO架构实现了对异构系统的数据源(如XML、POJO、RDB等)的统一调用;
l SDO架构同时支持静态编程模型和动态编程模型,在不牺牲动态编程模型的前提下实现了一种简单的编程模型;
l 提供元数据(Meta-Data)的简便方法实现数据类型;
l 支持连接断开的模型(离线模型),使客户端能够在连接断开的情况下进行数据修改,并在客户端保存数据修改的历史记录,这样可以利用修改的历史记录更新数据源;
l SDO是编程语言中立的,Tuscany的SDO实现了JAVA和C++,以及PHP的版本。



(Tuscany SDO架构)
五、结论
综上所述,其实SOA的概念算不上新颖技术,新颖之处在于它能够混合搭配各种执行环境、令服务接口与服务实现、传输协议的明确分离。使企业中各个系统(无论新的还是旧的)能够松散的集成运作,达到共同完成业务的要求。
现在我们可以看到,目的并不是SOA自身,而只是起点—它是通向更优的IT计算的一套思想、规划与指导;它是一种基础设施的规划,这种基础设施不但可以确保IT与业务的一致,还可以通过资产的重用、快速应用开发及多渠道服务应用,从而为企业带来更灵活、敏捷的计算需求。
从面向过程的计算机到面向对象的计算是一个意义重大的转变和提升,从现在层出不穷的技术方案到SOA也有着更具重大意义转变和提升,因为SOA是一种思想,不是指具体技术,但也同样包含具体技术的面向服务的构架----思想与技术的统一。这为企业快速应用集成、自动化业务流程、支持多渠道服务打下了基础,同时也指明了IT领域计算的一种方向和趋势—异构系统环境下的系统集成。

参照资料:
[1] 卢致杰, 覃 正, 韩景倜, 王立.SOA体系设计方案研究 2004
[2]梁爱虎.SOA思想、技术与系统集成 [M]北京:电子工业出版社2007.12
[3]Understanding SOA with WebService中文版
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: