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需要SOAP传输协议,JMS需求JMS传输协议等,要解决不同传输协议的透明化、集中处理,其实现在也有相应的解决方案,在后面会逐一介绍当前流行的一些解决方案。

2.       粗粒度

“粗粒度”是指SOA中服务的接口应该比具体语言(java,C#)上的接口要更大一些,但这个“粗粒度”也不要“太粗”,“太粗”则表明抽象程度太高,以至于远离了用户的实际操作,这就反而不好了。因为一切以现实的情况来衡量、设计、实现这才是最真实的、准确的(这一点不单是在SOA上,在javaC#等具体计算机语言上也是如此)。

3.       位置和传输协议透明

位置和传输协议是SOA最根本区别于目前面向组件编程的地方。目前的服务组件如EJBWebServiceJMS或相应的组件包(如javabeandll等)的发布都是和特定应用服务器(如apache http server,iis,weblogic,tomcat,websphere,jboss等)客户端必须知道具体的应用服务器的URL才能调用相应的组件。在全球经济一体化的浪潮下,各企业的服务集成以便提供更多丰富的功能服务,这是必然的趋势。

位置透明,就是不论服务组件的实际位置URL如何变化,客户端的调用程序的URL都不需求改变。

传输协议透明,是指不管服务组件使用的是何种传输协议,客户端的调用程序的传输协议都不需求改变,这对于客户端来说是透明的。

目前组件的调用方式如下图:

(一般系统架构)

二、SOA目标

随着全球经济一体化的深入发展,敏捷的、多渠道的、安全的、松散耦合的系统集成已经成为越来越多企业业务的需要。

技术构架:

(SOA技术架构)

业务架构:

(SOA业务架构)

三、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”,翻译为中文“服务组件架构”,是IBMBEA等公司提出来的一套SOA架构。

SCA的目的就是为组件接口和传输协议解耦而出现实,SCA组件将可以自由绑定各种传输协议,这为系统的集成打下了良好的基础。

JBISCA的异同:

相同点:

l  都是为了集成

l  都提供传输协议的解耦

不同点:

SCA是以接口作为切入点,从组件接口层将传输协议和接口实现解耦,是从编程的角度出发的,一种全新的编程模型。

JBI是以请求消息和响应消息作为切入点,在集成时将消息和传输协议解耦,形成一种和传输协议无关的标准消息服务,这样形成一种全新的区别于面有的应用服务器的集成容器,是从容器的角度出发,一种全新的容器模型。

3.         SDO编程思想

SDO的英文全称是“Service Data Object”,翻译为中文“服务数据对象”。SDO要实现的是一个全新的数据结构,是一个“独立于具体技术”的数据对象。

如果说SCA根本目标是要实现业务组件接口和传输协议的解耦,那么SDO的根本就是是要实现数据与业务代码的解耦。

4.         BPEL编程思想

随着WebService技术日益成熟和流行,许多企业的很多部门相应地创建了基于WebService的业务。如何在不改变这些WebService正常运行的情况下,将这些WebService集成起来创造出新的业务计算模型、业务流程就成为一个比较突出的业务需求。BPEL就是为将WebService业务流程串起来而出现的,简单地说BPEL就是通过流程编程将各种WebService集成起来,提供了一个“集成了种WebService接口”的接口。

四、SOA技术方案

1.         JBIServiceMix服务总线

ServiceMix是一个完全实现JBI标准的开源项目,通过理解ServiceMix,也可以更容易理解JBI思想。

a)        主要功能

ServiceMix是一个轻量级的JBI容器,Spring目前已经提供以支持。它可以成为一个独立的服务总线提供者,也可作为另外一服务总路线的提供者。

ServiceMix所支持的服务引擎

Quartz:定时任务服务

Cache:缓存服务

JCA:J2C Connector Architecture

Groovy:运行于JVM的脚本语言,用来创建服务

Scripting:满足JSR223脚本创建服务

XSLT:通过XSLTXML格式的消息进行转换

Xpath Routing:实现基于Xpath的路由

Validation:验证消息

PXE:BPEL集成服务

Servicemix-bpe:BPEL集成服务

Servicemix-scaSCA集成服务

Servicemixlwcontainer:ServiceMix提供的轻量级容器,主要针对(POJO)能够在运行时发布

ServiceMix所支持的绑定组件

Email:Java mail绑定

File:对文件的收发绑定

FTP:FTP协议绑定

HTTP:HTTP协议(包括POST/GET)绑定

Jabber:Linux即时通信器绑定

XSQL:一种XMLSQL的混合体,支持数据库查询,然后将查询结合放在XML文件中

VFS:不同类型文件系统访问封统一接口

WSIF:ApacheWebService调用框架

JAX WS:Java API for XML WebService,计划将用JAX-RPC代替

JMS:ActiveMQJAVA消息服务

RSS:访问并处理RSS种子

SAAJ:支持Apache AXIS

Servicemix-jsr181:基于JSR181开发的WebService

b)        体系架构

ServiceMix由三大部件组成:

l  服务引擎组件:负责格式转换、路由及相关服务(如BPEL,XSLT,脚本调用等)

l  绑定组件:主要用来接收外部的服务请求,以及向外部服务提供者发出请求

ServiceMixJBI容器:实现了JBI标准的功能服务总路线

ServiceMix架构)

2.         CXF(Celtix/Xfire)服务总线

CXFApache的一个开源项目,是原来开源项目CeltixXfire的结合产物。它能够支持多种绑定,由于和Xfire集成,因而其性能比较高。

l  支持多种绑定:如SOAPRESTCORBA

l  支持的WEB服务:WS-AddressingWS-SecurityWS-ReliableMessageingWS-Policy

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服务总线是一个易用的、轻量级的基于XMLWebService的集成代码。不需要重写任何程序,就可以直接将现胡的系统转化为SOA系统。

l  代理服务:支持传输、接口(WSDL/Schema/Policy)、消息格式(SOAP/POX)WEB服务安全和优化转换(MTOM/SWA)

l  基于Apache HttpCore的无阻塞的Http/Https传输,高性能地执行数千个连接

l  内建注册、存储支持动态更新、重载配置和相关资源(XSD,JS,XSLT等)

l  支持负责均衡,故障转移和流量调节功能

WEB服务安全:WEB服务可靠性消息和基于WEB服务策略的可配置性的流量。

JMS消息支持二进制、文本、XMLSOAP

l  轻量级的XMLWEB服务为中心的消息驱动模型

l  支持配置序列化层文件系统用于版本备份和更新

l  支持错误处理、超时和恢复

(Apache Synapse架构)

4.         Apache TuscanyJAVA SCA

Apache TuscanyJava SCA实现方式为支持SCA组件对过JAVA类来实现。

支持的绑定协议:

AJAX绑定:支持与AJAX客户端通信

JMS绑定:支持异步的JMS消息

JSON-RPC绑定:支持JSON-RPC传输

RMI绑定:支持RMI传输协议

WS绑定:支持SOAP/HTTP WebService

支持的数据绑定:

l  支持AXIOM

l  支持JAXB

l  支持SDO

l  支持优化的SDOAXIOM转换

Tuscany SCA架构)

5.         Apache TuscanyJAVA SDO

SDO服务数据对象不同于以往任何的数据对象,它实现了数据和业务的分离。

Apache TuscanySDOIBMBEA联合起来贡献给Apache的一个开源项目,它主要完成了以下功能:

SDO架构实现了对异构系统的数据源(如XMLPOJORDB等)的统一调用;

SDO架构同时支持静态编程模型和动态编程模型,在不牺牲动态编程模型的前提下实现了一种简单的编程模型;

l  提供元数据(Meta-Data)的简便方法实现数据类型;

l  支持连接断开的模型(离线模型),使客户端能够在连接断开的情况下进行数据修改,并在客户端保存数据修改的历史记录,这样可以利用修改的历史记录更新数据源;

SDO是编程语言中立的,TuscanySDO实现了JAVAC++,以及PHP的版本。

Tuscany SDO架构)

五、结论

综上所述,其实SOA的概念算不上新颖技术,新颖之处在于它能够混合搭配各种执行环境、令服务接口与服务实现、传输协议的明确分离。使企业中各个系统(无论新的还是旧的)能够松散的集成运作,达到共同完成业务的要求。

现在我们可以看到,目的并不是SOA自身,而只是起点它是通向更优的IT计算的一套思想、规划与指导;它是一种基础设施的规划,这种基础设施不但可以确保IT与业务的一致,还可以通过资产的重用、快速应用开发及多渠道服务应用,从而为企业带来更灵活、敏捷的计算需求。

从面向过程的计算机到面向对象的计算是一个意义重大的转变和提升,从现在层出不穷的技术方案到SOA也有着更具重大意义转变和提升,因为SOA是一种思想,不是指具体技术,但也同样包含具体技术的面向服务的构架----思想与技术的统一。这为企业快速应用集成、自动化业务流程、支持多渠道服务打下了基础,同时也指明了IT领域计算的一种方向和趋势异构系统环境下的系统集成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值