第8章基于服务的体系结构(SOA)第8章基于服务的体系结构W3C:SOA是一种应用程序体系结构,在该体系结构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。Service-architecture.com:服务是精确定义、封装完整、独立于其它服务所处环境和状态的函数。SOA本质上是服务的集合,服务之间彼此通信,这种通信可能是简单的数据传送,或是两个以上的服务协调工作。服务之间需某些方法进行连接。Gartner:SOA是一种C/S体系结构的软件设计方法,应用由服务和服务使用者组成,SOA与通用的C/S体系结构模型不同之处,是它着重强调构件的松散耦合,并使用独立的标准接口。SOA(Service-OrientedArchitecture)的概念第8章基于服务的体系结构SOA的目的:便于将业务系统能力分解为独立性高(或松散耦合),粗粒度的和可复用的服务;便于对服务进行组装和编排以满足业务和流程的变化需求。SOA(Service-OrientedArchitecture)的概念I/O处理流管理器应用配置服务1应用管理服务4服务3服务2服务5服务6历史遗留系统服务总线第8章基于服务的体系结构SOA的概念–SOA模型示例服务接口共同的封装共同的语言格式共同的安全和容错处理服务数据访问层逻辑层SQLDatabaseXMLFlatFile数据第8章基于服务的体系结构SOA的概念–单个服务的内部结构◎松散耦合◎粗粒度服务◎标准化接口第8章基于服务的体系结构SOA的概念–SOA的特征服务构件体系结构(SCA)是基于SOA的思想描述服务之间组合和协作的规范。它提供了构建粗粒度构件的机制。它将传统中间件编程从业务逻辑分离出来,使开发者专注于业务逻辑。从而简化了基于SOA的应用程序的开发工作。第8章基于服务的体系结构SOA的概念–服务构件与传统构件SCA服务构件与传统构件的主要区别:服务构件往往是粗粒度的,而传统构件以细粒度居多;服务构件的接口是标准的,主要是服务描述语言接口,而传统构件常以具体API形式出现;服务构件的实现与语言是无关的,而传统构件常绑定某种特定的语言;服务构件可以通过构件容器提供QoS的服务,而传统构件完全由程序代码直接控制。第8章基于服务的体系结构SOA的概念–服务构件与传统构件传统架构构件与SOA构件第8章基于服务的体系结构SOA的概念–服务构件与传统构件前图说明:第8章基于服务的体系结构SOA的概念–服务构件与传统构件应用系统涉及的跨系统边界的主数据抽象到主数据管理系统,提高数据服务能力。业务系统下层,业务模块分为界面和逻辑两部分内容,业务模块下层为提供业务服务能力的单元流程引擎+业务规则引擎可以对业务服务,数据服务进行编排展现层可以实现界面层的组装,可调用业务服务和数据服务SOA的目标为方便构建数据服务,业务服务,展现层构件,使用户容易借助界面建模,流程引擎和规则引擎实现灵活的应用组装。明确定义的接口自包含和模块化粗粒度松耦合互操作性、兼容和策略声明第8章基于服务的体系结构SOA的概念–SOA的设计原则业务组织体系结构底层设计分析设计开发业务流程建模企业体系结构面向对象分析与设计面向服务的分析与设计第8章基于服务的体系结构面向服务的分析与设计第8章基于服务的体系结构SOA的关键技术发现服务层UDDI、DISCO发布与发现。我是谁,在哪,能干啥描述服务层WSDL、XMLSchema我具体有哪些功能,怎么用消息格式层SOAP、REST用什么格式的内容和我交互编码格式层XML我需用XML语言描述交互信息传输协议层HTTP、TCP/IP、SMTP等底层通信协议是什么第8章基于服务的体系结构SOA的关键技术WebService及SOA关键技术里的术语可参考:://://://uddi.xml.org/第8章基于服务的体系结构SOA的实现方法–WebService服务注册中心服务提供者服务请求者绑定发布查找服务描述服务描述服务第8章基于服务的体系结构SOA的实现方法–服务注册表服务注册。服务注册是指服务提供者向服务注册表发布服务的功能(服务合约),包括服务身份、位置、方法、绑定、配置、方案和策略等描述性属性。服务位置。服务位置是指服务使用者,帮助它们查询已注册的服务,寻找符合自身要求的服务。服务绑定。服务使用者利用查找到的服务合约来开发代码,开发的代码将与注册的服务进行绑定,调用注册的服务,以及与它们实现互动。第8章基于服务的体系结构SOA的实现方法–企业服务总线(ESB)–模型Web应用MIS应用客户端单点登录权限控制用户交互服务服务注册服务管理业务流程编排业务支持服务企业服务总线数据转换消息传输动态路由数据接口应用程序接口应用服务连接基础架构服务核心集成服务企业数据企业应用第8章基于服务的体系结构SOA的实现方法–企业服务总线–功能提供位置透明性的消息路由和寻址服务提供服务注册和命名的管理功能支持多种的消息传递范型支持多种可以广泛使用的传输协议支持多种数据格式及其相互转换提供日志和监控功能第8章基于服务的体系结构SOA的实现方法–企业服务总线–优势扩展的、基于标准的连接。灵活的、服务导向的应用组合提高复用率,降低成本减少市场反应时间,提高生产率第8章基于服务的体系结构WSDL–基本服务描述(WebServicesDescriptionLanguage)服务接口定义服务实现定义类型服务端口消息端口类型绑定第8章基于服务的体系结构WSDL–使用WSDL文档开发工具调用Web服务的客户端代码WSDL文档Web Service客户应用程序调用方法返回结果生成利用生成调用方法返回结果客户应用程序客户端运行环境WSDL文档Web Service利用生成返回结果调用方法返回结果调用方法第8章基于服务的体系结构WSDL–文档结构types(类型):数据类型定义的容器,提供了用于描述正在交换的消息的数据类型定义,一般使用XMLSchema中的类型系统。message(消息):通信消息数据结构的抽象定义。message使用types所定义的类型来定义整个消息的数据结构。operation(操作):对服务中所支持的操作的抽象描述,一般单个operation描述了一对访问入口的请求/响应消息。porttype(端口类型):描述了一组操作,每个操作指向一个输入消息和多个输出消息规范。binding(绑定):为特定端口类型定义的操作和消息制定具体的协议和数据格式。port(端口):指定用于绑定的地址,定义服务访问点。service:相关服务访问点的集合。第8章基于服务的体系结构WSDL–文档结构第8章基于服务的体系结构UDDI–概述(通用描述、发现与集成服务)(UniversalDescription,DiscoveryandIntegration)UDDI数据模型。一个用于描述企业和服务的XMLSchemaUDDIAPI。一组用于查找或发布UDDI数据的方法,基于SOAPUDDI注册服务。一种基础设施,对应着服务注册中心的角色第8章基于服务的体系结构UDDI–数据模型businessEntitytModelbusinessServicebindingTemplate第8章基于服务的体系结构UDDI–注册Web服务确定Web服务的tModel(WSDL文档)。确定组织(企业、事业单位、各类机构等,下同)名称、简介以及所提供的Web服务的主要联系方法。确定组织正确的标识和分类。确定组织通过UDDI提供的Web服务。确定所提供的Web服务的正确分类第8章基于服务的体系结构UDDI–调用Web服务编写调用Web服务的程序时,程序员使用UDDI注册中心来定位并获得businessEntity。程序员可以进一步获得更详细的businessService信息,或是得到完整的businessEntity结构。因为businessEntity结构中包含了已发布的Web服务的全部信息,故程序员可从中选择一个bindingTemplate待用。Web服务在tModel中提供了相关规范的引用地址,程序员可以根据引用地址获得规范并编写程序。运行时,程序员可以按需要使用已经保存下来的bindingTemplate信息,调用WebService。第8章基于服务的体系结构SOAP–概述(简单对象访问协议)(SOAP:SimpleObjectAccessProtocol)SOAP封装。定义一个整体框架,用来表示消息中包含什么内容,谁来处理这些内容,以及这些内容是可选或是必需的SOAP编码规则。定义了一种序列化的机制,用于交换系统所定义的数据类型的实例SOAPRPC表示。定义一个用来表示远程过程调用和应答的协议SOAP绑定。定义一个使用底层传输协议来完成在节点间交换SOAP信封的约定第8章基于服务的体系结构SOAP–消息封装封装。封装的元素名是“Envelope”,在表示消息的XML文档中,封装是顶层元素,在SOAP消息中必须出现。SOAP头。SOAP头的元素名是“Header”,提供了向SOAP消息中添加关于这条SOAP消息的某些要素(feature)的机制。SOAP定义了少量的属性用来表明这项要素是否可选以及由谁来处理。SOAP头在SOAP消息中可能出现,也可能不出现。如果出现,必须是SOAP封装元素的第一个直接子元素。SOAP头可以包含多个条目,每个条目都是SOAP头元素的直接子元素。第8章基于服务的体系结构SOAP–消息封装SOAP体。SOAP体的元素名是“Body”,是包含消息的最终接收者想要的信息的容器。SOAP体在SOAP消息中必须出现且必须是SOAP封装元素的直接子元素。如果有头元素,则SOAP体必须直接跟在SOAP头元素之后;如果没有头元素,则SOAP体必须是SOAP封装元素的第一个直接子元素。SOAP体可以包括多个条目,每个条目必须是SOAP体元素的直接子元素。第8章基于服务的体系结构SOAP–编码规则值(value)。值是一个字符串、类型(数字、日期、枚举等)的名或是几个简单值的组合。所有的值都有特定的类型。简单值(simplevalue)。简单值没有名部分,例如,特定的字符串、整数、枚举值等。复合值(compoundvalue)。复合值是相关的值的组合,例如,定单、股票报表、街道地址等。在复合值中,每个相关的值都以名、序号或这两者来区分,这称为访问者(accessor)。在复合值中,多个访问者有相同的名是允许的。第8章基于服务的体系结构SOAP–编码规则数组(array)。数组是一个复合值,成员值按照在数组中的位置相互区分。结构(struct)。结构也是一个复合值,成员值之间的唯一区别是访问者的名字,访问者名互不相同。简单类型(simpletype)。简单类型是简单值的类,例如,字符串类、整数类、枚举类等。复合类型(compoundtype)。复合类型是复合值的类,它们有相同的访问者名,但可能会有不同的值。第8章基于服务的体系结构SOAP–在HTTP中使用SOAP把SOAP绑定到HTTP,无论使用或不用HTTP扩展框架,都有很大的好处:在利用SOAP的形式化和灵活性的同时,使用HTTP种种丰富的特性。在HTTP中携带SOAP消息,并不意味着SOAP改写了HTTP已有的语义,而是将构建在HTTP之上SOAP语义自然地对应到HTTP语义。SOAP自然地遵循HTTP的请求/应答消息模型,使得SO