您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
深入浅出 SOA 思想
 
作者: 陶邦仁 来源:ImportNew微信公众号 发布于;2016-7-28
   次浏览      
 

1 SOA是什么

SOA的全称是Service-Oriented Architecture,面向服务架构。是一种架构,不是一种具体的开发技术。

SOA的出现,预示着一个以服务为导向的新IT(Information Technology)时代的到来。

SOA服务的理念思想,本质上是一种业务和技术完全分离,业务又能和技术自由组合的思想,它达到了软件设计的最高境界。

SOA是为软件集成而服务的,它实现了技术和架构的完全分离,消除了软件服务集成的所有障碍。

SOA超越了所有的具体技术(如WebService),也超越了所有具体的架构(ESB),同时,SOA也包含这些具体的技术和架构。

SOA在Java领域有两套标准:一个是SUN推出的JBI(没有得到BEA和IBM的承认),另外一个是:IBM和BEA等公司推出的SCA和SDO标准。

要真正理解什么是SOA需要从软件开发的技术发展史谈起。真正的软件开发从开始到现在经历了四个阶段,也可以说成是四代:

汇编语言开发;

面向过程的软件;

面向对象的组件开发;

面向服务的架构开发,也是今天要谈论的SOA架构;

SOA与前面三代的软件开发技术对比,不同点是SOA超越了软件开发语言本身。是一种面向服务的架构,与软件开发语言无关。

但就软件开发本身来说,SOA是一种技术,又超越了所有具体的技术。

IT的中文翻译为信息技术,是为企业的需要出现的。IT的本质上包括两种信息的使用方式:创建信息、调用信息。

IT的进一步发展:信息集成。使信息的应用价值提高。

IT语言的发展史:面向过程--》面向对象--》面向组件--》标准的WS--》面向服务。

IT语言的发展过程:逐步的解耦与封装。

2 SOA的技术革命

SOA既然能成为第四代软件开发技术,究竟带来什么革命。

首先,SOA是一种开发思想。是一种松耦合的框架。可以让软件超越开发语言。

其次,SOA的开发需要SOA体系的支撑,就像J2EE应用一样,离不开应用服务器。SOA也一样,也有一个类似J2EE服务器的东西支持着整个SOA体系架构----ESB( Enterprise Service Bus),企业服务总线。通过这个总线,将多个系统连接起来。

其次,SOA是基于消息请求响应的一个系统,对请求类型有高度的兼容性。与一个Web应用容器相比,web应用容器只能处理HTTP请求,而SOA的ESB可以接受HTTP、FTP、WebService、JMS...等请求。这就使得SOA架构具有高度的兼容性,可以将不同的平台集成到一起,从而相互协调工作。

3 SOA火起来的真正原因

软件开发技术的不断提高。

硬件性能的提升,价格下降,投出SOA所消耗的成本为企业所能忍受。

SOA受到了IMB、Oracle、Sun、Microsoft等大公司的热力追捧,被捧红了,实际上,一直以来都是这些公司在引领软件应用的潮流。

SOA技术革命每年有上千亿美元的市场价值。软件要升级,这些服务提供商才可以买出更多的中间件服务器,卖出更多的硬件,赚取更多利润。

很多企业的软件应用系统已经满足不了信息高度集成化的要求,为了提高企业的核心竞争力,企业不惜重金,上SOA。

SOA的招牌很响亮,超越了一切,兼容了一切。它不摒弃旧系统,而是将很多旧系统继承起来,就可以实现。—–实际上,我个人认为这是一个骗局。

4 SOA最有前景的舞台

基于SOA是的思想和技术,SOA最适合最擅长的就是系统集成。而系统集成的关键就是提取公共的有价值的服务。各个系统通过暴露服务,经过ESB这条总线连接后,就将几个系统集成起来了。这在新一代软件开发中也许会得到应用。

SOA的架构注定SOA在中小企业内部没有多大价值。中小企业的摊子还不够大。

SOA系统集成难点在于抽取公共的服务。对于老的系统来说,抽取服务就是抽筋。很难很难,意味着要修改软件,要适合SOA的胃口。因此,对一些不同语言开发的系统来说,使用SOA进行系统实际上是扯淡。

5 SOA发展现状

对SOA口号叫的最响的是IBM,出书最多的也是IBM,成功的案例还没看到。所有的大公司都在忽悠,希望拿到第一笔大单。

SOA以来ESB,ESB本身也是一种中间件,或者说是一个增强了的企业应用服务器。目前开源的有几个,也没见过成功的案例。估计SOA技术从起步到成熟还有很长一段路要走。ESB的实现还需要一个发展过程。

相反与SOA有紧密联系WebService技术已经深入人心。现在用的比较多。

6 WebService与SOA的区别

SOA是在WebService的基础上发展起来的。

WebService实现了松耦合和粗粒度的服务。

7 SOA基本要素

松散耦合:服务之间、接口与实现之间、业务组件和传输协议之间。

粗粒度:SOA中服务的接口更接近实际中的用户操作。

位置和传输协议透明:不论服务组件的传输协议如何改变,客户端的调用程序传输协议不需要改变。

8 SOA目标

敏捷的、不受限制的业务集成。

9 JBI架构思想

SOA在Java领域有两套标准:一个是SUN推出的JBI(没有得到BEA和IBM的承认),另外一个是:IBM和BEA等公司推出的SCA和SDO标准。

JBI之关注Java组件只处理Java组件的集成。

SCA实现了业务组件和传输协议的分离,可以处理各种平台组件的集成。

SDO可以的自由读取各种不同数据源的数据。

另外,BPEL本质上是一种集成WebService服务的语言,也可以算作为SOA的一部分。

9.1 认识JBI

JBI(Java Business Integration)中文翻译为“Java业务集成”,是SUN发布的一个用于Java组件进行集成的一个标准。

JBI的本质是一种服务总线思想。

JBI的目标是创建一个用于各种Java组件服务集成的运行环境。

9.2 认识JBI容器

JBI是一种思想,JBI思想的实现就是JBI容器。

JBI容器是为弥补现有J2EE容器的不足而出现的。

现有应用服务器的容器类型:Servlet容器、EJB容器、JMS容器。

现有应用服务器的容器不足:

a) 每种容器都有自己特殊的传输协议,相互之间不能直接通信。比如:Servlet容器只能接受HTTP/SOAP的传输协议,EJB容器只能处理RMI的传输协议,JMS只能处理JMS的传输协议。

b) 一个纯粹的服务提供者,不是一个服务的集成者。也就是说,容器之间不能继承服务。

c) 容器间服务的调用需要编写客户端代码。

JBI容器以一种可插拔的方式集成不同类型的服务,而不是通过编写客户端代码来实现服务的集成。

9.3 JBI容器的组成与架构

1. JBI容器的架构图

2. JBI容器的组成的三大部分

绑定组件(BC:Binding Components):专门用来接收各种不同传输协议的请求,原理是JBI实现了各种不同协议的绑定组件,绑定组件可以细分为接收BC和发送BC。接收BC主要负责发送请求和接收响应,发送BC主要用来调用外部的服务。

服务引擎(SE:Service Engines):这类组件只处理JBI容器内部的消息。JBI容器通常在接收到消息后,需要对请求的消息做一些“处理”,然后再调用外部服务的提供者。根据功能的不同,将SE组件分为以下三种类型:

Transform SE:专门处理各种传输协议和格式变化。

BPEL SE:专门负责将Web Service进行流程编排。

Rules SE:专门负责通过规则将各种服务进行集成。

JBI的规格化消息路由器(Normalized Message Router):是JBI内部消息系统的核心,所有的组件之间不能交换消息,只能通过NMR来传递。

在JBI容器内部,只有一种标准的规格化消息(Normalized Message)。任务服务组件进入JBI环境之前,通过BC转换为规格消息NM。在JBI环境里,所有的服务都不能相互调用,不论是请求还是回答消息,都要先转给NMR,再由NMR分发。JBI运行环境里面的组件(SE、BC)和NMR都是通过NM来进行信息交换的。

9.4 JBI容器工作的概念图

如上图:

外部请求者将一个HTTP请求发送给JBI容器,容器的HTTP BC接收请求,并将请求的消息格式化为NM发送给消息接收转换引擎,然后再将NM发送给NMR,由NMR再将NM发送给SOAP BC,SOAP BC将NM转换为SOAP消息发送到外部的WS组件。执行后,消息按照原路返回。

10 SCA架构思想

10.1 认识SCA

SCA(Service Component Architecture)中文翻译为“服务组件架构”,是一种全新的软件架构思想。

SCA中,最重要的一个概念是Service----服务,它的内涵是独立于具体的技术。因此,SCA不会称之为 Java组件架构,或Web Service 组件架构。所谓的具体技术,主要有两层含义:一是程序语言,而是传输协议。

现有的组件是和传输协议紧密耦合的。比如EJB组件采用的是RMI传输协议,Web Service组件采用的是SOAP传输协议。SCA组件则能自由地绑定各种传输协议。

SCA是对目前组件编程的进一步升华,其目标是让服务组件能自由绑定各种传输协议,集成其他的组建与服务。

SCA与传统的业务组件最大区别在于SCA实现了两个功能:一是组件和传输协议的分离,二是接口和实现语言的分离。

SCA的本质是一种软件架构思想,SCA架构是独立于程序语言的SOA架构。

SCA的目标是创建一个可集成服务组件的运行环境。

为什么需要SCA?答案:集成的需要。

先看没有使用SOA技术的系统的集成的情况,需要相互约定和暴露接口。需要编写集成的客户端调用代码。调用方和被调用方要“知彼知己”才能很好的集成,而这又都带来高昂的代价和复杂度。

使用SCA的好处:组件之间处于一种松耦合的状态,不需要在自己的代码中加入对方组件的接口代码。

10.2 认识SCA容器

SCA是一种思想,SCA思想的具体实现是SCA标准和SCA的容器环境。

SOA容器也分JBI容器、SCA容器等。SCA容器也是SOA容器总称的一种,通常都单独称SCA容器,而直接泛称SOA容器。这里为了区别与别的SOA容器开来,而称之为SCA容器。

SCA容器实现了将复杂的服务组件集成过程隐藏在容器内部,开发者之需要按照SCA的标准去开发和集成服务,最终部署到SCA的容器里面即可。

SCA容器的实现很复杂,有关其容器的组成与架构也是一种商业秘密。开发人员只需要关系如何遵循SCA标准去开发和集成服务组件即可。

为了更好去实现SCA架构,理解SCA服务组件概念的内涵和外延对开发者来说是非常重要的。

10.3 服务组件

概念服务组件准确讲没有确切的概念,它更贴近于一件实实在在的物品,只能从他的形状、组成、结构、功能、状态、属性等侧面来描述它。

服务组件是SCA里面最基本的功能单元,它主要包括接口、实现、引用、属性等部分。可以从一下侧面来描述服务组件。

a) 是在一个模块(Composit)内的通过配置生成的一个实现的实例。

b) 多个组件可以用同一个实现(思考:一个Java的对象可以同时实现多个接口)。

c) 提供服务和消费服务(组件可以调用别的组件的服务)。

d) 通过配置来实现对象的属性值(配置节点为property)。

e) 组件通过连线(Wire)来设置服务引用。连线可以连接到别的组件的服务,也可以连接到模块的引用(模块的概念后面会详细讲述)。

服务组件的组成部分服务组件的组成包含四个部分:服务、组件实现、引用、创建属性。

下面给出服务组件的结构图如下:

[在这里输入图片标题]

a) 服务(Service),用来让其他组件调用。是一个接口。如果是基于Java的SCA,它就是Java的接口;也可以是WSDL的ProtType接口,目前只有这两种形式。

b) 组件实现(Implementation),实现所创建的服务,对Java来说,就是接口的实现类。

c) 引用(Reference),一个组件可能需要调用其他组件,需要创建于igeqita组件的引用。对Java来说,就是其他组件的Java接口。

d) 属性(Property),对组件实现的一种属性参数注入。

对一个服务组件来说,服务和实现时必须的,引用和属性是非必需的。例如,对上面Hello World的例子来说,组件的结构图如下:

10.4 服务模块

SCA是通过模块(Composite)将SCA组件集成在一起的。

SCA的模块是实际上是将SCA组件(做为零件)重新组合集成度更高的组建,从整体看来SCA模块和SCA组件的结构式一致的。从构成组件的“零件”角度看,SCA模块是用了组件作为零部件重新组装为新的组件(模块)。

其实道理也非常简单,下面是SCA模块的基本原理图:

如上图,可以看到,模块从整体上也是个组件。

模块是通过SCA的配置文件配置组装形成的,不需要程序的硬编码。

提升(Promote):就是将组件的接口、属性、或引用装配为模块的对应的接口、属性或引用。

连线(Wire):就是在模块内部,组件之间的调用关系。比如组件A的实现调用了组件B,那么组件AB间就存在一个连线。

当组件之间需要调用的时候,由于目前组件(如EJB、WS、JMS)传输协议的多样化,这样在相互的调用的时候,需要将绑定不同的协议去调用。这里尽可能避免让人迷惑而又没有价值的绑定(Binding)一词的概念。

在一个大的项目里面,可能会有很多服务模块,多个服务模块之间如果需要相互调用,那么就可以将多个服务模块通过WS或者JMS等技术绑定在一起,形成服务子系统。

理解了模块的概念,就不难理解服务子系统了。

11 SCA与JBI的异同

相同点目的是一样的:都是为了集成。

大致方向一样:都是为了将服务和传输协议解耦。

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

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

12 SOA、ESB、SCA之间的联系

SOA是一种服务集成的架构思想,超越具体的技术和架构,又涵盖具体的技术和架构。SOA的最常见的解决方案是SCA,其次还有JBI,BPEL、SDO也勉强可以算做SOA的解决方案之一,因为后两者也是为了系统解耦和集成提供了支持。

SCA是服务组件架构,是SOA思想的最流行的一种实现方式,SOA思想的实现除了SCA外,还要JBI等。

ESB是SCA思想实现的基础设施。ESB主要作用是集中注册发布服务,为服务与传输协议之间解耦。并不是所有的SOA架构都需要ESB,ESB是SCA特有的。当然任何符合ESB特征的解决方式都可以称之为ESB,也不仅仅是SCA内部的。

综上所述,以上概念都是一个理念、一种思想,并非特指代某个现有的实现或解决方案,这是起初接触SOA 容易犯的概念上的错误。

12.1 ESB与SOA的关系

这两个词包含的内涵太丰富了,无法用一两句话说清楚,并且,这个词在不同的地方含义也有所不同。

SOA—-面向服务架构,实际上强调的是软件的一种架构,一种支撑软件运行的相对稳定的结构,表面含义如此,其实SOA是一种通过服务整合来解决系统集成的一种思想。不是具体的技术,本质上是一种策略、思想。

ESB—-企业服务总线,像一根“聪明”的管道,用来连接各个“愚笨”的节点。为了集成不同系统,不同协议的服务,ESB做了消息的转换解释与路由等工作,让不同的服务互联互通。

目前ESB与SOA的确切概念依然没有。但可以明确的说SOA就是一种服务集成思想,它的不同实现方式可能差别很大,目前SOA最常见的实现方式是SCA和JBI。

12.2 ESB究竟是什么

这个问题在个大厂商之间,认识和观点也存在很大差异。

IBM、Oracle等认为ESB是连接服务的一种模式,但一些开源组织和其他厂商认为ESB是一种产品,并且提供了ESB连接解决方案的实现,这种实现可以认为是中间件,也可以认为是组件工具。

对此,我个人的观点更偏向前者,ESB是一种模式,ESB的实现方式也很多,可以称之为ESB产品。当然在不同场合ESB的含义也不同,需要鉴别。

12.3 为什么ESB总和SOA黏在一块

通常,这两个名词总不分家,谈论的话题中“你中有我,我中有你”。

为什么是这样的呢?

ESB是SOA吗?

两者之间究竟有什么微妙的关系呢?

带着疑问,继续往下看:

首先,ESB不是SOA。SOA的最常见的实现方式方式是SCA和JBI,而SCA的实现需要ESB,相反JBI则不需要ESB,可以参看本人对JBI和SCA分析解读的文章。

其次,因为IBM和Oracle(收购了BEA和SUN的牛X公司)都推崇SCA模式的SOA,因此SCA实际上已经成为SOA的事实标准,说道SOA,最先想到的就是SCA模式了。

最后,ESB是SCA架构实现不可缺少的一部分,ESB产品脱离了具体的应用外,没有任何意义。ESB的作用在于实现服务间智能化集成与管理的中介。通过ESB可以访问所集成系统的所有已注册服务。

12.4 ESB的特点

ESB是一种在松散耦合的服务和应用之间标准的集成方式。它可以作用于:

面向服务的架构 – 分布式的应用由可重用的服务组成;

面向消息的架构 – 应用之间通过ESB发送和接受消息;

事件驱动的架构 – 应用之间异步地产生和接收消息;

ESB就是在SOA架构中实现服务间智能化集成与管理的中介。

   
次浏览       
相关文章

多维方法来开发有机的业务流程架构
SCA 应用程序开发
BPM 和 SOA 性能最佳实践
实现企业服务总线模式
相关文档

SCA介绍及应用实例
基于SOA架构的ESB平台:Infomagic
SCA架构
SOA的基本概念
相关课程

面向应用的架构设计实践
单元测试+重构+设计模式
软件架构师—高级实践
软件架构设计方法、案例与实践
最新活动计划
软件架构设计方法、案例与实践 8-23[特惠]
Linux内核编程及设备驱动 8-15[北京]
Python、数据分析与机器学习 8-23[特惠]
嵌入式软件架构设计 8-22[线上]
QT应用开发 9-5[北京]

基于SOA的工作流(WF)整合
SOA 100问 - 问与答
SOAP 应用模式:处理与性能
ESB架构之企业实施案例
基于SOA架构的企业集成系统
基于SOA的体系架构设计
更多...   


面向应用的架构设计实践
单元测试+重构+设计模式
软件架构师—高级实践
软件架构设计方法、案例与实践
嵌入式软件架构设计—高级实践
SOA体系结构实践


某第三方电子支付企业 SOA架构设计
某电子企业 SOA应用
中国移动 SOA培训
北京大学 SOA架构设计实践
友邦保险 SOA架构设计
上海 SOA架构实践
山东移动通信 SOA体系结构实践
更多...