1、中间件技术,课 程 介 绍,课程设置目标了解中间件 中间件的开发原理,如何开发中间件 在中间件上进行开发 相关的工业标准例如 CORBA、EJB、Web Service 等,参考,张云勇,中间件技术原理与应用,清华大学出版社,2004 李华飚, Java中间件技术及其应用开发,水利水电出版社,2007 S. Tanenbaum and M. V. Steen, 分布式系统: Principles and Paradigms,第一版, Prentice Hall, 2002, ISBN: 0130888931. Reference Books: G. Coulouris, J. Dollimor
2、e, 和 T. Kindberg, 分布式系统: Concepts and Design, 3rd Edition, Addison-Wesley, 2000, ISBN: 0201619180.,初步知识,开放系统 互操作性 中间件 远地过程调用 分布式计算环境,开放系统及互操作性,开放系统概述: 网络技术发展使得用户的应用环境变得异常复杂 繁多的硬件系统 不同的操作系统和应用软件 用户环境的复杂性和多样性导致了开放系统技术的出现 信息处理系统互连的需求不断的增长,出现了分布式系统,系统分布面临的问题,远程性 : 组件在空间上分散 并发性: 组件间并发的执行 无全局状态: 分布系统的全局状态
3、不定 部分失败: 任一组件失败与其他组件无关 异步性: 通信和处理活动异步发生 异质性:多种技术的集合 自主性:自主管理,若干控制当局,系统分布面临的问题 (续),联合性:跨越多个自主实体 伸缩性:在规模上是可伸缩的 发展性:开放环境面对很多变化 移动性:信息源,用户在物理位置上移动,开放环境具备的属性,开放的:可移植性和协同工作 集成的: 灵活 模块化 可联合的 可管理 满足服务质量 安全 提供透明性,中间件概述,定义 中间件是一种软件,他能使处于应用层中的各应用成分之间实现跨网络的协同工作(也就是互操作),可协同工作,中件服务并不能独立构造分布式系统,它只是在原有的操作系统和语言基础之上为
4、分布应用提供互操作能力,在最终实现时,仍需要传统程序设计语言和操作系统的支持。,开发模式的变化,中间件定义(IDG ),中间件是基础软件,处于操作系统(或网络协议)与分布式应用之间,从而屏蔽操作系统(或网络协议)的差异,实现分布式异构系统之间的互操作。目前,对中间件还没有形成一个统一的定义,比较公认的IDC的定义是:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。,中间件技术,最早具有中间件技术思想及功能的软件是IBM在60年代开发的CICS(Customer Information Con
5、trol System)。80年代初期,Sun Microsystems开发了一种最早的中间件,作为其开放网络体系结构的一部分,这种中间件是基于RPC协议的。但由于CICS不是分布式环境的产物,而Sun Microsystems开发的不是完整的中间件产品,因此人们一般把Tuxedo作为第一个严格意义上的中间件产品,Tuxedo是在1984年由AT&T的贝尔实验室开发完成的。到90年代,中间件技术得到了巨大的发展和广泛的应用,出现了大量具有广泛影响的中间件产品,如OMG的Corba、Microsoft的DCOM/COM+、IBM的MQS等。,组成部分,执行环境(Execution Environ
6、ment)软件 简称EE软件 应用开发(Application Development)工具 简称AD工具,中间件的分类,中间件的平台 由于中间件需要屏蔽分布环境中异构的操作系统和网络协议,它必须能够提供分布环境下的通讯服务,我们将这种通讯服务称之为平台。基于目的和实现机制的不同,我们将平台分为以下主要几类: 远程过程调用(Remote Procedure Call)面向消息的中间件(Message-Oriented Middleware) 对象请求代理(Object Request Brokers),中间件的分类,事务处理中间件 (TP Monitor: Transaction Proces
7、s Monitor) 消息中间件 (MOM: Message-Oriented Middleware) 远程过程调用 分布对象请求代理,事务处理中间件,事物务理中间件又叫“事务处理监控程序”,最初是作为联机事务处理应用的支撑环境。事务处理中间件提供联机事务处理所需要的通信、并发访问控制、事务控制、资源管理、安全管理和其它必要的服务。 事务处理中间件几乎所有的功能与服务都被借用到Web应用服务器之中并被标准化的固定下来。,事务处理中间件的功能,进程管理,包括启动server进程、为其分配任务、监控其执行并对负载进行平衡。事务管理,即保证在其监控下的事务处理的原子性、一致性、独立性和持久性。 通讯
8、管理,为client和server之间提供了多种通讯机制,包括请求响应、会话、排队、订阅发布和广播等。,面向消息的中间件,MOM指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可在分布环境下扩展进程间的通信,并支持多通讯协议、语言、应用程序、硬件和软件平台。目前流行的MOM中间件产品有IBM的MQSeries、BEA的MessageQ等,面向消息的中间件的功能特点,通讯程序可在不同的时间运行对应用程序的结构没有约束,通讯程序之间不仅可以是一对一的关系,还可以进行一对多和多对一方式,甚至是上述多种方式的组合。多种通讯
9、方式的构造并没有增加应用程序的复杂性。 程序与网络复杂性相隔离: 程序将消息放入消息队列或从消息队列中取出消息来进行通讯,与此关联的全部活动,比如维护消息队列、维护程序和队列之间的关系、处理网络的重新启动和在网络中移动消息等是MOM的任务,程序不直接与其它程序通话,并且它们不涉及网络通讯的复杂性。,远程过程调用,远程过程调用是一种广泛使用的分布式应用程序处理方法 RPC应用分为两个部分:server和client。server提供一个或多个远程过程;client向server发出远程调用。,分布对象,为满足分布式计算对多对象、跨平台和系统异构性等的需求,80年代后期至90年代初期,逐渐形成了分
10、布对象模型(Distributed Object Model, DOM)的概念,它以对象技术为基石,将OT融入分布环境中,支持在分布环境下对象之间的互操作和协作,最终建立开放的分布式系统。DOM的概念非常适合于分布式异构系统,以DOM的观点,分布式环境中的一个自治系统或一个应用都可视为对象或一组对象。对象对外提供操作界面,操作由消息激活,在协调机制参与下,对象之间通过传递消息完成共同的任务。DOM中的一个重要概念是组件(component)。组件是一块独立可重用的二进制代码,它具有特定功能,支持灵活的即插即用,可以被方便地插入到网络、语言、应用、工具、操作系统中工作。,几种主要的分布对象中间件
11、,1.ORB基于对象的技术最重要的用途之一是系统集成,这种集成可以通过对象请求代理(Object Request Broker, ORB)来进行。根据对象管理组织(OMG)的公共对象请求代理体系结构(Common Object Request Broker Architecture, CORBA)的定义,对象请求代理提供了在异构分布环境下不同系统的应用之间互操作的能力,并且能无缝连接多重对象系统,它负责搜寻客户请求的对象实现,使对象实现准备接受请求并传输构造请求数据的所有成份。,ORB提供了如下方法:,抽象地定义应用程序(或者计算机上运行的任何软件)的接口,以便其它应用程序也能使用这些接口。
12、找出位于网络另一地方的应用程序以及有关的接口。 让应用程序相互通信并且相互响应。 使用接口定义语言(Interface Definition Language, IDL)和应用程序接口(Application Programming Interface, API)。,2.COM/DCOM组件对象模型(Component Object Model, COM)是Microsoft的组件软件方案。COM中定义并提供了应用程序(客户)和服务对象(software object)的连接机制,连接建立后客户和对象可直接通讯而不需COM介入。DCOM(Distributed COM)使用DCE的RPC机制在
13、网络环境下为它们提供了场地透明性和安全性等机制。,3.SOM/DSOM系统对象模型(System Object Model, SOM)是IBM提出的组件解决方案,其主要目的是建立一个语言中立(language-neutral)的二进制对象标准,从而实现对象的重用,它包括面向对象的模型及其实现。DSOM是SOM中实现分布对象访问的一组类库,它符合CORBA标准并做了扩充。,中间件的优点 企业应用,缩短应用开发周期 Standish Group 分析 业务逻辑 30 基础程序 70 减少项目开发的风险 没有使用标准商业中间件的关键应用系统开发项目的失败率高达90 自行开发中间件得不偿失 应用系统质
14、量及可维护性 Standish Group 发现一个企业的应用系统有17000多个模块接口 标准中间件在接口方面都是清晰和规范的 使用中间件企业只是维护业务逻辑 增加产品吸引力,中间件的优点 应用程序,透明的与其它应用程序交互 与运行平台提供的网络通信服务无关 具有良好的可靠性和可用性 良好的可扩展性,流行分布中间件技术的比较,1) 消息/队列 支持同步和异步处理不需要预编译程序事件驱动的编程范例标准仍在出现,2)RPC基本上为同步处理需要预编译程序熟悉的编程范例以DCE的标准为基础,3)ORB同步处理需要预编译程序面向对象的编程范例以OMG的标准为基础,分布计算体系结构,1.DCE OSF
15、DCE的体系结构是由远程过程调用、线程、命名服务、分布文件系统、安全和数据类型编码标准等子系统组成 。,DCE 的分布,目录服务提供网络中资源的位置透明性,允许通过逻辑名访问资源而不需指定资源所驻留的节点; 安全服务提供了安全地管理网络中安全信息的分布服务,如支持单用户定义,用户以此名字作为一个实体登录到网络中而不是必须依次等登到每个独立的服务器上; 时间服务确保DCE环境中的所有成员都有一个统一的时间观点,这对于网络中事件的有序化、缓存信息的超时管理及其一致性维护等都具有重要作用; 线程位于操作系统与其它所有DCE子系统之间,可以由本地操作系统或者专门的线程软件包实现。,2.CORBA 成立
16、于1989年的对象管理组织是由一个拥有660个成员的国际性组织,它致力于推动面向对象技术理论及实践在软件开发中的应用。CORBA是对象管理组织在其对象管理结构(OMA)框架之下,以对象请求代理ORB为核心制定的分布对象标准,它定义了对象之间通过ORB透明地发送请求和接收响应的机制,保证了在分布异构环境下对象之间的互操作性。,CORBA依据以下的设计原则:,接口与实现分离,客户方依赖于接口,而不是依赖与实现。 对象引用通过接口实现类型化,能更好的隐藏实现细节。 支持接口的多重继承性,充分支持面向对象特色。 使用子类扩展功能。 保持服务的简单化和正交性,提供满足需要的最基本服务。,DCE与CORB
17、A的比较,在实现方面,OSF DCE提供参考实现并被多数厂商采用;OMG CORBA仅给出规范,不提供参考实现。 在基础设施方面,OSF DCE提供支持分布应用的分布服务基础设施;OMG CORBA仅定义分布服务基础设施的接口。 在基础服务方面,OSF DCE没有定义事务服务等基础服务;OMG CORBA在对象服务部件中定义了许多基础服务,均支持标准接口。 在模型方面,OSF DCE采用的是基于RPC的过程模型;OMG CORBA采用的是基于对象技术的对象模型。,在引用方式方面,OSF DCE仅支持静态引用;OMG CORBA支持、静态引用客户方DII和服务方DSI。 在语义方面,OSF DC
18、E提供at-most-once、independent、broadcast和maybe等多种语义;OMG CORBA提供at-most-once和best-effort两种执行语义,支持同步、延迟同步和异步交互模型。 在线程并发性方面,OSF DCE将线程作为它的一个集成部件;OMG CORBA通过并发对象服务提供并发支持。,DCE和CORBA的差异主要源于二者核心技术的不同,DCE基于面向过程的RPC 机制,而CORBA是纯正的面向对象技术,支持继承、多态和封装等面向对象特征,这正是二者本质的区别。,内 容,一、背景 二、远程过程调用(RPC) 三、基于RPC的程序开发过程 四、互操作体系,
19、一、背景,1、TCP/IP 2、基于TCP/IP的通信过程 3、软件互操作,面向连接:,负责,另一,客户,请求,的套,接字,负责,客户,请求,的套,接字,等待请求,等待连接,(,9,),read(),(,11,),close(),(,5,),socket(),(,2,),bind(),(,3,),listen(),(,4,),accept(),close(),(,1,),socket(),(,7,),read(),(,10,),write(),客户端流程,服务器端流程,等待返回结果,处理请求,处理结果,(,6,),connect(),(,8,),write(),负责,客户,连接,的套,接字,套
20、接字的出现 促进了软件从单机环境向网络环境的发展扩展了软件的应用范围但随着这种范围的扩展人们很快就不满足于直接基于套接字的开发过程原因:基于套接字的开发方式较为繁琐软件排错十分困难当服务器端需要根据用户的不同请求内容区分不同的处理过程时这些问题表现得尤其突出必须提供高层开发环境!,3、软件互操作,InteroperabilityPeter Wegner 96: Interoperability is the ability of two or more software components to cooperate despite differences in language, inter
21、face, and execution platform.Heiler 95: Interoperability among components of large-scale, distributed system is the ability to exchange services and data with one another.,软件互操作是网络环境中应用层的某一实体使用另一实体所提供功能的直接使用,网络应用发展三步曲:,消息传递,互操作,协同工作,消息传递是指具有一定结构的信息从一个结点传输到另外一个结点的过程。消息传递突破了单机环境中通过共享内存(变量)进行信息交换的模式。通过
22、消息的发送、消息的接收等环节,消息传递实现了不同运行实体间的信息交流。消息传递使计算机从封闭、独立的模式向开放、交流的模式转变,这一转变极大地丰富了计算机学科的研究内容与应用范围。消息传递的目的性不强,只要正确地将信息从一结点传给另一结点即认为成功,因此对语法的要求较高。例如:TCP/IP,消息传递,互操作是一个结点上的成员对另一个结点上资源的使用。互操作过程中,发送方将操作的方法与参数打包,作为一条消息进行发送,接收方则对消息头进行解释,并根据所载信息的含义、参数执行相应的操作。互操作的目标在于实现操作发出方的功能调用,并提供一定的透明性支持(Transparent utility),实现不
23、同操作空间之间的无缝连接(seamless connection),强调消息的语义,即消息所包含的意义。例如:RPC、ORB、RMI,互操作,协同工作是协作范围的进一步扩展,也是消息传递、互操作的目标与结果。协同工作的主体既可以是人,也可以是其他的计算机资源。协同工作的目标在于完成由许多人共同承担的大型任务。消息被传递后,不仅要求语法、语义正确,还要求接收方根据消息的含义进行反应,使消息体现出一定的效用,而不是被简单的传送。例如:CSCW(Computer Supported Cooperative Work),协同工作,1、动因与实例 2、工作原理 3、编排/还原 4、请求分派,RPC,1、
24、动因与实例,开发基于SOCKET的网络软件非常复杂FTPTELNET 位于不同机器上的软件互操作困难连接管理异构 导致RPC(Remote Procedure Calling )的产生主要实例:SUN公司等提出的ONC(Open Network Computing)RPC主要由SUN予以实现OSF(Open Software Foundation)RPC影响最大主要由DCE(Distributed Computing Environment)实现DCE是OSF提出的分布计算体系结构,2、 工作原理,Deposit(,1000,),继续运行,启动服务器上的存款过程,int Deposit(num
25、ber),return total + number;,客户端程序,服务器端程序,以对某银行帐户的一个存款过程为例:,Network,Local Call,send,receive,send,receive,( 1)调用过程,客户端程序,服务器端程序,过程描述:,1)客户按本地调用的方式 直接调用本地的客户指代(Stub)客户指代具有与服务器相同的过程接口2)客户指代 将客户的调用请求进行加工、打包向底层通信机制(如套接字)发出请求消息客户指代 不进行任何逻辑处理只是一个中介 3)客户端通过底层的通信机制将消息传送给服务器端的底层通信机制,4)服务器 需要部分地解析消息找出客户希望调用的服务器
26、程序 5)服务器指代对消息进行解析从中获得调用者的参数然后调用服务器程序 6)服务器程序执行相应的过程 7)服务器程序将结果返回给服务器指代 8)服务器指代将结果打包向底层通信机制发出应答消息 9)服务器端通信机制将消息传送给客户端通信机制,10)客户端节点上也可能有多个调出点通信机制需要部分地解析返回的消息找出消息应该返回给哪个客户程序并将消息发送给对应的客户指代 11)客户指代从消息中解析结果返回给客户程序,(2)编排/还原,客户端 指代(Stub)的主要工作包括: 1)建立客户与服务器之间的连接 2)将客户的高层调用语句打包为一条底层的请求消息这一过程在RPC中被称为编排(marshal
27、) 3)等待服务器返回应答消息 4)将来自服务器底层的应答消息解析为可以返回的数据这一过程在RPC中被称为还原(unmarshal) 5)将返回值传送给客户程序 需要特别处理:编码、字节序 等问题,(3) 请求分派,服务器端的指代:除了需要进行编排、还原外还需要 区分客户所请求的过程名然后将客户的请求分派(dispatch)给正确的过程“指代” 目前主要被用于专门代表客户端的代理程序而服务器端则由新的机制予以支持在CORBA中专门分离出了对象适配器(OA:Object Adaptor)在EJB中发展出了构件容器用于在运行过程中专门管理构件的各种状态此时的服务器端不仅负责请求分派还负责向底层机制
28、的注册(以方便请求的定位)以及过程的激活(以加强系统的灵活性)等等功能,三、基于RPC的开发过程,1、定义并编译接口 2、编写实现具体服务功能的代码 3、编译、连接,产生可执行的服务器程序 4、编写客户端代码 5、编译、连接,产生客户程序 6、运行服务器端程序 7、运行客户端程序,客户端开发过程,服务器端开发过程,服务器端程序,IDL编译器 (rpcgen),客户端程序,IDL,account.h,account_clnt.c,account _svc.c,server.c,client.c,rpclib.o,1、定义并编译接口,仍然结合银行帐号的例子接口定义文件account.x :,pro
29、gram ACCOUNTversion ACCOUNT_VERint deposit(int) = 2;int withdraw(int) = 1;=1; =0x20010929;,编译后生成三个主要文件:account.h account_clnt.c account_svc.c,互操作体系,为支持应用层的某一实体使用另一实体,而制定的一套技术规范,1、底层协议 2、互操作消息 3、互操作接口定义 4、互操作查找方式 5、现有体系比较,内 容,互操作消息,客户端指代,互操作接口定义语言,互操作协议,网络基础设施,网络基础设施,互操作消息,服务器端框架,客户端程序,服务器端程序,互操作实现,互
30、操作查找,互操作规范,底层协议,决定,软件互操作体系与人类交互过程的比较底层协议提供了基本的通信基础互操作消息是软件之间进行交互时所表述的语言互操作协议是对这些语言的语法说明互操作接口定义是软件之间的一种约定接口定义语言是合约的撰写规则 互操作查找是交互双方建立联系的途径包括白页、黄页、绿页等多种途径,1、 底层协议底层协议是互操作协议所依赖的底层通信机制目前最受重视的协议 是前面讲过的 TCP/IP协议也可以是 ATM等其它协议,2、互操作协议RPC中关于字节序、数据表示等问题的解决方法体现了通信双方之间关于消息的 数据格式消息的类型 等的约定 类似的约定还有 服务器的管理 等等所有这些约定
31、 共同构成了互操作的高层协议互操作协议一般独立于底层协议即互操作协议可以向不同的底层协议进行映射从而由不同的底层协议进行支持 互操作协议一般都比较烦琐其实现由应用服务器开发者承担应用系统的开发者在开发具体系统时不必关心协议的实现问题,3、互操作接口定义语言客户指代主要完成上层代码(客户程序、服务器程序)与底层代码(RPC API等)之间的“映射”其参数传递、编排、服务器定位等功能完全与应用系统具体的业务逻辑实现细节无关 因此只要系统明确定义了服务器的接口即可以产生与该接口对应的指代接口定义语言(Interface Definition Language)描述了 客户与服务器之间的接口,4、互操作查找互操作查找方式主要是指服务器的定位根据自己掌握的信息客户如何才能查找到具体服务器这实际上涉及 服务器端服务信息的发布服务信息的管理等问题,5、现有体系比较,思 考 题,1、直接建立在TCP/IP之上的通信过程是怎样的? 2、什么是互操作? 3、RPC的基本原理是什么? 4、不同互操作体系的异同点是什么?,