SOA
SOA期末总结
标准化的封装,可以复用,松耦合可编排
问答题可能的问题
实验一
如何开发自己的Web服务(Java平台为例)?
以Axis,在Eclipse中开发为例。首先建好一个java工程,然后写java类。然后打包成webService,在项目选中想要做为 Webservice 发布的内容,点击 Axis2 Service Archiver 将会生成webService的axis发布包(.arr文件)。接着在Axis2 上发布webService,直接把上一步生成的.arr文件拷贝到axis2 的发布目录即可。主要自己的Web服务就发布完成,可以浏览器查看相应的WSDL文档。
如何访问调用已有的Web服务(URL直连,代理)要掌握清楚关键步骤。
URL直连的方式:
我们只需知道 asmx 文件的 URL 路径和公开的方法名即可调用相应的方法。注意返回的是XML文件格式,我们只需要进行相应的解析(DOM或者SAX)就可以得到我们想要的数据了。
代理方式:
以Axis,Eclipse为例。选中想要调用那WebService的工程,然后选中(Axis2 Code Generator),可以通过URL也可以通过文件的方式来指定wsdl的位置,生成代理文件。生成后要添加相应的jar包。客户端可以通过代理类来远程调用相应的web服务。
实验二
结合实验2,掌握如何绘制BPEL流程及关键配置
流程:
第一步:列出相关Web服务的清单
第二步:为BPEL流程定义WSDL
第三步:定义合作伙伴链接类型
<plnk:partnerLinkType name="travelLT">
<plnk:role name="travelService">
<plnk:portType name="tns:TravelApprovalPT" />
</plnk:role>
<plnk:role name="travelServiceCustomer">
<plnk:portType name="tns:ClientCallbackPT" />
</plnk:role>
</plnk:partnerLinkType>
如果在流程的活动中需要指定与特定伙伴的交互,只需要引用partnerLink名称即可。
在<partnerLink>元素中,属性myRole指出了业务流程本身的角色,而属性partnerRole指出了伙伴的角色。
第四步:创建业务流程
变量
在BPEL中,可以使用变量来保存和传递流程的状态信息。
它们通常是从合作伙伴那里接收到消息,或者是被发送给合作伙伴的消。同时,它们还有可能是与流程有关的状态消息,这些消息并不与合作伙伴进行交换。
BPEL支持的变量类型包括三种:
由WSDL文件所定义的消息类型(message type)
由XML Schema所定义的简单类型(simple type)
由XML Schema所定义的元素(element)
活动
BPEL是由一系列步骤组成,这些步骤称为活动
活动分两类
基本活动:描述了流程内的一个具体步骤,如接受请求,调用伙伴服务,变量赋值等
基本活动是与外界进行交互最简单的形式,活动内不会嵌套其他活动。它们是无序的个别步骤,与服务进行交互、操作、传输数据或者处理异常等。
结构化活动:描述了如何组织和管理流程的控制流
基本活动包括如下:
流程用于和外界进行交互的基本活动:、invoke、reply;
流程用于传输数据的基本活动:assign;
通过throw活动发出故障信号;
通过exit活动放弃所有流程实例的执行;
通过wait活动使流程等待一段时间或到达某个截止期限后再执行;
通过empty活动不执行任何的动作;
结构活动:
结构化的活动规定了一组活动发生的顺序。他们描述了业务流程是怎么通过把它执行的基本活动组成结构而被创建的,这些结构表达了涉及业务协议的流程实例间的控制形式、数据流程、故障和外部事件的处理以及消息交换的协调。
结构化的活动可以被任意的嵌套和组合
主要结构活动包括如下:
sequence------按照一个序列处理一系列活动。
while------------在一个条件满足的情况下处理一个活动。
switch----------按照不同条件处理不同活动。
flow-------------平行或者按照随意顺序处理活动。
pick-------------按照外部事件从过程的角度不定值地选择。
条件语句 的条件<![CDATA[$input.payload/tns:type='add']]>
invoke语句:<bpel:invoke name="Invoke" partnerLink="addPL" operation="add" portType="ns1:AddService" inputVariable="addRequest" outputVariable="addResponse"></bpel:invoke>
第五步:部署和测试
deploy.xml
结合实验3中的MuleESB,理解ESB的核心功能,掌握使用组件快速实现目标的方法 【实验3,配套视频】
核心功能:服务接入,消息传递,消息中介,配置管理
flow组件:
Http组件:客户端访问的接口
setPayload组件:一个赋值的组件
java组件:
ESB的主要功能
核心功能:服务接入,消息传递,消息中介,配置管理
扩展功能:服务库,图形化开发工具,流程引擎,规则引擎,分布式架构,复杂事件处理
实验二:画一个BPEL流程,关键节点怎么配置。
实验三:助教的几个视频,用到什么组件,每个组件怎么配置,体现了ESB的什么功能。
SOA的技术概述
为什么要引入SOA(需求拉动和技术推动)
需求拉动
分布式企业间业务的协同
通过Internet链接在一起的异构企业应用软件系统的集成、交互与互操作。
当业务(Business)发生变化时,IT系统能够快速响应。
技术推动有3个方面
一方面多年的软件工程发展和实践所积累的经验、方法和各种设计/架构模式,包括OO/CBD/MDD/MDA/EAI和中间件;
另一方面是互联网的多年发展带来前所未有的分布式系统的交互能力和标准化基础。
与此同时,企业越来越重视业务模本身的组件化,以支持高度灵活的业务战略。
SOA的三个核心要素
通过印刷术理解SOA
SOA的典型优势(看看大标题就可以,其他的帮助你理解)
(1)分布式异构系统的集成与互操作
虽然目前已经存在成熟的远程方法调用机制来实现异构系统的集成与互操作,但在Internet这样的分布式环境下,SOA才能实现这一目标。
(2)紧密耦合与松散耦合
SOA实现了完全的松散耦合:位置透明,与具体的实现细节无关(通过接口调用),标准化的通讯协议(XML-based)
(3)大数据量低频访问
SOA采用大数据量的方式一次性进行数据交换。
(4)基于文本的消息传递
由于基于文本的消息本身不包含任何处理逻辑和数据类型,因此服务间只传递文本,双方不存在兼容性问题。
(5)上下文相关与上下文无关
在SOA中,在设计阶段,服务不需要了解它们将来可能被复用的环境,即独立于服务使用者的上下文。
(6)小粒度复用与大粒度复用
SOA中的服务是大粒度复用体,它更多的关注诸如业务过程/业务活动级别的复用,复用效率更高。
SOA适合应用的场景
协同-交互-异构-分布式环境-可能频繁变化。只要满足了这些条件之一,就可以应用SOA
异构系统的集成,不适合处理实时性要求的请求,不适合海量数据。
点对点的服务发布与调用体系结构模式
"发布-查询-绑定"模式
该模式中的操作
发布(Publish):为了使服务可访问,需要发布服务描述以使服务使用者可以发现它。
发现(Find):服务请求者定位服务,方法是查询服务注册中心找到满足其标准的服务。
绑定(Bind)和调用(invoke):在检索到服务描述之后,服务使用者继续根据服务描述中的信息来调用服务。
该模式实现机制:Web Service
WSDL:Web服务描述语言
用于服务接口的描述
UDDI:统一描述,发现和集成协议
服务使用者通过UDDI发现相应的服务并据此将服务集成到自身的系统中
SOAP:简单对象访问协议
通过服务客户端与服务提供者之间传递信息
通过HTTP或JMS等各类基于文本的消息传递协议来运输。
SOA参考架构
IBM层次模型
此模型把SOA的主要元素分为功能和服务质量两类。在功能方面,形成由下至上的层次结构,而服务质量则贯穿了功能性的各个层次。在此基础上提出的SOA分层体系结构,功能部分由下至上分为可操作系统层、企业组件层、服务层、业务流程编排层和表示层,体现了生成和调用一个服务的流程,描述了SOA解决方案运行时的概念视图,可操作性较强。
SOA平台模型包含的组件和作用
IBM提出的SOA Foundation参考模型,是以企业服务总线ESB为核心的全面企业解决方案,包括建模和组装、部署和服务管理。参考架构呈扁平结构,其中的服务经过模块化集成,通过ESB完成交互。
基础设施服务
为整个SOA组件和框架提供一个可靠的运行环境,以及服务组件容器,它的核心组件是应用服务器等基础软件支撑设施,提供运行期完整,可靠的软件支撑。
企业服务总线
企业服务总线是指中间基础设施产品技术实现的、通过实践驱动和基于XML消息引擎,为SOA提供的软件架构的构造物。企业服务总线ESB提供消息传递,消息中介,服务接入,配置管理。从而在实现服务或异构系统间可靠交互的同时,保持它们的松散耦合关系。
关键服务:是SOA在各种业务服务组件的分类。一般来说,一个企业级的SOA架构通常包括:交互服务、流程服务、信息服务、伙伴服务、企业应用服务和接入服务。这些服务可能是一些服务组件,也可能是企业应用系统(如ERP)所暴露的服务接口等等。这些服务都可以接入ESB进行集中统一管理。
接入服务(Access Services)提供访问已有应用或遗留系统的能力,同时提供已有应用、打包应用程序与ESB之间的桥接能力,将已有系统中的功能和信息转化为服务。
业务应用服务(Business App Services)指那些通过新的计算平台JavaEE来实现的新应用,它们所实现的功能和信息也都转化为服务提供出来。
在业务流程需要与外部的合作伙伴、供应商交互的情况下,伙伴服务(Partner Services)提供文档、协议以及伙伴管理的能力,比如说,可以提供企业边界处不同安全级别差异的转换。
信息服务(Information Services)是那些跟信息(而不是活动)有关系的服务,比如将多个系统中异构的数据,聚合、转换为业务需要的统一整齐的业务数据对象来访问。信息服务通过联合、复制和转换来解决基于不同实现方式的不同数据源之间的数据共享难题。
流程服务(Process Services)是指把多个服务聚合成为一个服务流程对应业务过程的服务,这种复合服务通常是长时间运行的过程。流程服务提供服务控制能力,将多个服务串起来实现一个业务流程。
交互服务(Interaction Service)一方面将人的活动,通过人机交互以服务的方式出现在整个业务过程中,作为流程服务)中的一部分;另一方面将IT的功能和数据传递给最终用户,并满足用户特定的使用习惯。
面向服务的分析和设计SOMA
SOMA:通过面向服务的建模、分析和设计技术与活动,构造SOA应用。
定义SOA各层中包含的元素;
在每一层次做出关键的体系结构设计决策
SOMA的途径:混合式
自顶向下:从业务需求出发,通过模型驱动,构造SOA蓝图。
自底向上:充分利用遗留系统的投资,封装可被服务所使用的功能;
SOMA的各个阶段
SOMA的核心是:识别、设计和实现服务(Service)、用来支持服务的构件(components)、以及服务之间形成的协同(choreography)。
web服务基础
web服务概念
web服务的定义:Web Service是一种新的Web应用程序分支,它们是自包含,自描述、模块化的应用,可以在网络(通常为web)中被描述、发布、查找以及通过web来调用。
使用标准的互联网协议,像超文本传输协议HTTP和XML。
Web service平台是一套标准,它定义了应用程序如和在web上实现互操作。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web Service。
简单来说,Web Service就是一个向外暴露出接口的能够通过网络进行远程调用的应用程序。
web服务的标准
XML
SOAP
WSDL
UDDI
WSDL
WSDL,web Service描述语言。是一种基于XML的,用于描述Web Service及其操作,参数和返回值的语言。
SOAP
SOAP是一个跟平台无关的,跟编程语言无关的,和应用程序之间发送消息的格式。
一条SOAP消息就是一个普通的XML文档,包含下列元素:
必须的Envelope元素,可把此XML文档标识为一条SOAP消息。
可选的Header元素,包含头部信息
必须的Body元素,包含所有的调用和响应信息
可选的Fault元素,提供有关在处理此消息所发生错误的信息。
SOAP HTTP Binding
SOAP方法指的是遵守SOAP编码规则的HTTP请求/响应。
HTTP+XML=SOAP
WSDL
WSDL定义了一套基于XML的语法,将Web服务描述为能够进行消息交换的服务访问点的集合
What:Web服务能够做什么-----所提供的操作。
Where:Web服务位于哪里-------协议相关的地址,如URL。
How:怎么调用--------和服务交互的数据格式以及必要协议。
文档
UDDI
UDDI是统一描述,发现和集成的缩写。
服务的服务的注册库,允许服务的提供商去注册服务,允许服务的消费者去发现服务。
它是一个基于XML的跨平台的描述规范,可以使世界范围内的企业在网络上发布自己所提供的服务。
Web服务实现
【实验1】
1. 如何开发自己的Web服务(Java平台为例)
2. 如何访问调用已有的Web服务(URL直连,代理)要掌握清楚关键步骤。
服务组合技术
什么是服务编排,什么是服务协同,以及它们之间的区别是什么。
SOA中提出了两个概念:orchestration(服务编排)和choreography(服务协同)
前者定义了如何将小粒度的服务安排特定的流程聚合为大粒度的服务;
后者则定义了如何在多方的业务流程之间通过服务实现协同的动作编排。
二者的本质上都是用来规划服务之间的协同。
SOA中的Orchestration:服务编排/服务组合
Orchestration:将多个小粒度的Web服务按照特定的业务逻辑规则构造为一个可执行的业务过程,同时又可以看作是一个大粒度的服务Web服务。
侧重点:如何使用已有的服务来构造新的服务。
服务编排的描述方法:BPEL(4WS)
针对orchestration,出现了大量的服务协同建模标准,最典型的莫过于BPEL和BPEL4WS,在实践中得到了广泛的应用
BPEL:Business Process Execution language
BPEL4WS: BPEL for Web Services
BPEL能够实现基于WSDL和Web Services之间的流程编排和服务协同。它提供了一种XML注释和语义,用于指定对Web Services进行编排并确定Web服务之间的业务流程,实现Web Services之间的协同。
BPEL的基本结构
过程中的基本功能单元:活动<activity>
活动之间的次序关系
先后次序<sequence>
多分支<switch>
循环<while>
并发与同步<flow>
非确定性选择<pick>
过程的相关数据:容器<container>
错误处理机制:<catching>、<handling faults>
补偿机制:<compensation handler>
服务协同
将多个零散的,分别由多方提供的服务/业务流程按照彼此之间的协同关系组织起来,支持多方的交互行文。
侧重于不同服务之间的消息传递的次序与规则,以保证期望的协同行为。
无需中心控制。
无需完全有一个组织所拥有。
服务协同的描述语言:WS-CDL
BPEL4WS vs. WS-CDL
BPEL
需要集中式的控制机制
递归式的服务组合;
可执行的过程建模语言
需要调用Web服务
WS-CDL
无需集中式的控制机制(分布在各个参与方)。
描述性语言,不可执行
无需调用Web服务。
业务流程
BPEL规范
业务流程执行语言(Business Process Execution Language)BPEL,也叫业务过程执行语言,是一种基于XML的,用来描述业务流程的编程语言,被描写的业务流程的每个单一步骤则有Web服务来实现。
BPEL能够实现基于WSDL和Web Services之间的流程编排和服务协同。它提供了一种XML注释和语义,用于指定对Web Services进行编排并确定Web服务之间的业务流程,实现Web Services之间的协同。
BPEL的功能是什么?BPEL与WSDL的联系关联是什么?
BPEL是基于Web服务的,并且依赖于WSDL,一个BPEL流程可以发布为一个WSDL定义的服务,并像其他Web服务一样被调用。而且,BPEL希望一个Web服务合成所包含的全部外部Web服务,都是用WSDL服务锲约定义的,这令BPEL流程可以调用其它BPEL流程
BPEL协议基础
WS-BPEL是基于XML定义的流程描述语言,它位于几个XML规范之上:WSDL1.1、XML Schemal1.0和Xpath1.0
其中WSDL消息和XML Schema类型定义提供了BPEL流程所用的数据模型;XPath为数据处理提供支持;所有的外部资源和伙伴被表示成WSDL服务。
包含什么范围
处理活动的顺序,特别是网络服务互操作
消息和处理实例之间的关系
在发生错误和例外情况下的恢复行为
处理角色之间的基于网络服务关系的双面性
BPEL的核心元素
伙伴链接
变量
活动
关联集合
时间处理程序
BPEL事务与补偿机制
BPEL异常管理
伙伴
一个流程可以调用其它服务,也可以响应来自客户端的请求
一个流程可以作为服务的请求者,也可以扮演服务的提供者
BPEL把与流程交互的其他服务称为伙伴
伙伴链接
伙伴链接用于实现Web服务长期稳定的交互,描述伙伴之间的关联
这种关联是通过<partnerLink>元素来定义的。
如果在流程的活动中需要指定与特定伙伴的交互,只需要引用partnerLink名称即可。
在<partnerLink>元素中,属性myRole指出了业务流程本身的角色,而属性partnerRole指出了伙伴的角色。
变量
在BPEL中,可以使用变量来保存和传递流程的状态信息。
它们通常是从合作伙伴那里接收到消息,或者是被发送给合作伙伴的消。同时,它们还有可能是与流程有关的状态消息,这些消息并不与合作伙伴进行交换。
BPEL支持的变量类型包括三种:
由WSDL文件所定义的消息类型(message type)
由XML Schema所定义的简单类型(simple type)
由XML Schema所定义的元素(element)
活动
BPEL是由一系列步骤组成,这些步骤称为活动
活动分两类
基本活动:描述了流程内的一个具体步骤,如接受请求,调用伙伴服务,变量赋值等
基本活动是与外界进行交互最简单的形式,活动内不会嵌套其他活动。它们是无序的个别步骤,与服务进行交互、操作、传输数据或者处理异常等。
结构化活动:描述了如何组织和管理流程的控制流
基本活动包括如下:
流程用于和外界进行交互的基本活动:、invoke、reply;
流程用于传输数据的基本活动:assign;
通过throw活动发出故障信号;
通过exit活动放弃所有流程实例的执行;
通过wait活动使流程等待一段时间或到达某个截止期限后再执行;
通过empty活动不执行任何的动作;
结构活动:
结构化的活动规定了一组活动发生的顺序。他们描述了业务流程是怎么通过把它执行的基本活动组成结构而被创建的,这些结构表达了涉及业务协议的流程实例间的控制形式、数据流程、故障和外部事件的处理以及消息交换的协调。
结构化的活动可以被任意的嵌套和组合
主要结构活动包括如下:
sequence------按照一个序列处理一系列活动。
while------------在一个条件满足的情况下处理一个活动。
switch----------按照不同条件处理不同活动。
flow-------------平行或者按照随意顺序处理活动。
pick-------------按照外部事件从过程的角度不定值地选择。
结合实验2,掌握如何绘制BPEL流程及关键配置
BPEL引擎
目前主流的WS-BPEL引擎
BPEL核心组件有三部分组成
BPEL设计工具
业务流模板
BPEL引擎
BPEL引擎
执行任何与BPEL标准相符的业务流程模板,主要功能包括调用Web服务,数据内容映射,错误处理,事务支持,安全等等。通常BPEL引擎与应用服务器集成在一起。
引擎是什么?
只有流程的文件没有什么用,这时就需要一个"东西"来处理这个文件了,它读取这个文件的内容,根据文件设定的流程走向来控制这个流程。这个关键性的"东西"就是引擎。
引擎就好像流程的指南针一样,指导着流程走向不同的地方。它是整个系统的核心。
企业服务总线ESB
ESB的定义
企业服务总线(Enterprise Service Bus,ESB)是构建面向服务体系架构的中枢神经系统,它主要提供服务或应用的接入,服务或应用间消息的路由,消息的转换,以及保障消息安全可靠地传递等功能,从而在实现服务或异构系统间可靠交互的同时,保持它们的松散耦合关系。
ESB与BPM区别
ESB:以数据为中心,海量消息处理,协议转换
BMP:以流程为中心,复杂业务逻辑,保持处理状态
ESB的主要功能
核心功能:服务接入,消息传递,消息中介,配置管理
扩展功能:服务库,图形化开发工具,流程引擎,规则引擎,分布式架构,复杂事件处理