1、1,现代应用系统的基本特征 分布 任务已不只是在单机上运行,而是由网络中多台计算机上的相关应用共同协作完成,需考虑网络传输、数据安全、数据一致性、同步等诸多问题; 异构 计算机硬件、操作系统、网络协议、数据库系统以及开发工具种类繁多,需考虑数据表示、调用接口、处理方式等诸多问题; 动态协作 参与协作的应用允许位置透明性、迁移透明性、负载平衡性等需求。,2,应用1,应用2,应用3,服务器1,服务器2,服务器3,3,应用1,应用2,应用3,服务器1,服务器2,服务器3,中间件,4,5,中间件(Middleware)是一种软件,处于系统软件(操作系统和网络软件)与应用软件之间,它能使应用软件之间进行
2、跨网络的协同工作(也就是互操作),这时允许各应用软件之下所涉及的“系统结构、操作系统、通信协议、数据库和其它应用服务”各不相同。,6,执行环境(Execution Environment)软件 如果一个网络的各个节点上安装了EE软件,各节点上的应用软件之间就可以实现相互合作。这时允许各节点可为不同的机器和操作系统。也即EE软件使各节点下层的设备对应用软件来说变成了透明的。所以EE软件是实现可互操作功能的关键,是中间件中的主体部分。,7,应用开发(Application Development)工具应用软件要能透明地动用远方合作者的资源,该软件中应有作出此种透明动用的相应指示。为此必定要有一组工
3、具,它可以用来开发含“透明动用对方”成分的应用软件,或改造原有的无透明动用能力的应用软件。这组AD工具含有一些专用语言(如界面描述语言和界面调整语言等)和有关的编译器。有了它,用户(特别是应用软件开发人员)将得到极大的方便,所以AD工具是一个完善的中间件所必备的部分。,8,9,提供了合作对象透明设施T1:有了它,合作一方不必知道合作的另一方为谁和它在何处,只要说明自己需要怎样的服务,T1就能为其物色到一个合适的合作方。提供了下层设备透明设施T2:有了它,合作一方不必关心合作的另一方所用的节点设备(机器和操作系统)与本节点的差异。,10,按照IDC的分类方法,中间件分为: 远程过程调用中间件 分
4、布式对象中间件 数据库访问中间件 事务处理中间件 消息中间件,11,远程过程调用中间件,12,本地过程调用的扩展,可透明地调用远地提供的服务 数据表示、可靠传递、服务定位等 分布式计算环境,DCE,13,分布式对象中间件,14,简单地说,对象中间件就是用面向对象技术实现的、支持面向对象开发和集成应用的中间件。 ?对象技术的封装、继承及多态性提供了良好的代码重用功能,并且对象的对外透明性也符合中间件技术的要求。 面向对象的中间件技术基本思想是提供一种统一的接口使对象之间的调用和数据共享不再关心对象的位置、实现语言及所驻留的软硬件系统。 OMG组织的CORBA、Microsoft的COM/DCOM
5、、SUN的J2EE等,15,数据库访问中间件,16,连接应用程序和数据库的软件,允许通过单一的、定义良好的接口访问网络中来自不同厂商的数据库产品 (1)通用网关接口CGI(驻留在WebServer上) (2)专用API:DLL形式NSAPI(Netscape)ISAPI(Microsoft) (3)通用数据库接口JDBC(SUN)ODBC(Microsoft),17,(4)数据库引擎Borland公司开发,类似于ODBC,支持与数据库的直接连接,效率较ODBC高 (5)数据库网关用于分布式应用环境,无需在客户机进行各种配置,如安装各种ODBC驱动、设置ODBC 数据源等,使用网关来统一管理不同
6、数据库的访问相关产品:EDA/SQL、RDA、DRDA,18,事务处理中间件 (Transaction Processing Middleware,TPM),19,又称分布式事务处理中间件。专门针对联机交易处理系统而设计。 事务是对共享的系统资源所完成的一件工作,它通常是由一些列操作所组成。事务必须具有ACID(Atomicity,Consistency,Isolation和Durability)属性。,20,原子性(Atomicity)指的是:事务要么完整地执行(即做完上述系列操作中的每一个),要么根本不执行,而绝不会出现只执行一部分操作的情况。 一致性(Consistency)指的是:一个
7、事务执行完成,必定进入某个稳定状态;若进入的是另一个不一致的状态,则这一事务将被丢弃而不予执行。 (隔离(Isolation)指的是:一个事务与其它事务并行作用于一共享资源上时,前者的进行是与后者之间完全隔离开的。 耐用性(Durability)指的是:当一个事务完成时,即使系统或者共享资源发生故障,该事务的执行结果也不会因此而丢失。,21,本地事务的管理由数据库系统来完成。 联机交易处理系统需要处理大量的分布式事务。 分布式事务涉及到多个数据库,且允许这些数据库异构,如在不同的银行间进行资金转账。 分布式事务需要处理大量并发进程,涉及到操作系统、文件系统、编程语言、数据通讯、数据库系统、系统
8、管理及应用软件,是一个相当艰巨的任务。 通过事务处理中间件简化应用开发。由它来负责处理联机交易过程中分布式交易的完整性、并发控制、负载均衡以及出错恢复等。,22,X/Open DTP模型包括3个组成部分: 应用程序(Application Program,简称AP)是事务的使用者,它是开始(Begin)、提交(Commit)和回滚(Rollback)事务的发出者。它规定一个事务的界限,并给出事务所包含的操作。 资源管理器(Resource Manager,简称RM):提供对共享资源的访问,数据库管理系统(DBMS)或文件访问系统都可以成为RM。 事务管理器(Transaction Manage
9、r,简称TM):是AP与RM之间的协调员,它给每个事务分配标示符,监视其进展,保证事务处理的顺利进行,并负责事务在失败情况下的恢复。,23,24,分布式事务涉及到多个结点的数据的更新,任何一个结点或结点间通信的失效都可能导致分布式事务的失败。因此,为了保证事务的完整性,分布式事务通常采用两阶段提交协议(Two Phase Commitment Protocol,简称2PC)来提交。 两阶段提交协议的思路是TM向所有RM发出正式提交请求之前,先询问所有RM是否已准备好提交,仅当所有的RM都给出肯定的回答时,TM才发出提交的请求;如果其中有一个RM给出否定地回答,TM就指示所有的RM进行回卷。,2
10、5,阶段1(准备阶段)TM询问所有的RM是否已准备提交。 阶段2(提交阶段) TM检查所有RM的回答,只要有一个RM给出否定的回答,TM指示所有的RM进行回滚。否则, TM指示所有的RM进行提交。,26,在两阶段提交中,一个主节点被指派为事务协调者(Coordiantor),其他节点称为事务参与者(Participants)。协调者掌握提交或撤消事务的决定权,而其它参与者则各自负责本地数据的更新,并向协调者提出撤消或提交子事务的意向。一般一个结点对应一个子事务。,27,28,事务协调者,调用接口,交易监控器,客户,转出帐户对象,转入帐户对象,1.begin(),2.调用方法debit(),3.
11、登记资源,4.credit(),5.登记资源,mit(),7.prepare(),mit(),29,应用服务,交易监控器,资源管理1,数据库1,数据库2,客户,begin,Call services,sql,sql,Commit,prepare1,Xa_prepare,prepare2,Xa_prepare,Xa_commit,commit2,Xa_commit,commit1,资源管理2,30,常见的TPM产品有 BEA的Tuxedo Microsoft的MTS SUN的JTS OMG的OTS 东方通的TongLINK/TongEasy,31,消息中间件 (Message-Oriented
12、Middleware,MOM),32,动机:RPC调用的缺点 (1)客户端与服务器端需要同时在线; (2)客户端需要知道服务器端的调用接口,若调用接口发生改变,客户端需要做相应变化,如通过ODBC连接访问数据库,客户端需要知道远程数据库的类型,若类型发生改变,还需要重新装载相应的驱动程序。,33,(3)操作过程中需要一直保持与服务器端的连接,直到操作结束。因而,(a)一旦连接中断,就意味着操作失败或数据丢失;(b)通常判断连接中断的时间较长,若信道的可靠性较差,容易造成连接中断,那么应用效率将严重低下;(c)服务器端在执行操作的过程中,并不涉及网上数据传输,但连接的保持占用信道,容易造成网络堵
13、塞。,34,这个问题可用消息中间件来解决,应用间通过传递消息来进行协作,是一种异步通信模式 主要功能是在不同的网络协议、不同的操作系统和不同的应用程序之间提供可靠的和可恢复的(若发生意外)消息传送。这时应用并不需要消息即时即刻传递到达对方。,35,工作原理: 应用之间以一系列消息的方式进行通信。 在消息传递过程中,为了避免消息被丢失,消息被保存在消息队列中。 应用把消息发送到与接收者有关的队列中。消息传递机制保证将消息传送到目的地且只传送一次。 在消息传递过程中,应用之间不必建立联系,发送者仅需将消息放入到与接收者有关的队列中,而不必关心接收者是否在线。 接收者仅需从自己的队列中提取消息即可。
14、,36,队列 缓存消息并负责消息的传递,允许程序无需建立连接即可发送和接受消息。 队列具有名字。队列名队列管理器名 队列具有属性。属性包含消息的发送次序(先进先出或带优先级的先进先出)、消息访问方式(共享或独占)、队列的长度和队列触发机制等。 队列的属性由队列管理器进行管理,37,消息 由消息头和消息体组成。 消息头是对消息结构的描述,对整条消息起控制作用,含有消息的属性及与消息相关的系统信息,如消息标志、消息类型、目的队列名、日期时间等。 消息体对应消息的应用数据,具体语义由通信双方事先约定。,38,消息类型分为3种: 请求消息(Request):除了发送数据,该消息要求对方一定要应答。 应
15、答消息(Reply):用于请求消息的回应。 通知消息(Report):单向而不需要应答的消息。,39,有两种基本的MOM工作模型,分别是消息队列(message queuing)以及发表和预定(publish-and-subscribe)。 一对一方式,消息发送到一个目的队列里,接收方可以在任何时候查看该队列提取消息。 一对多方式,应用对其感兴趣的主题进行登记,一旦一个主题被一个应用登记,那么该应用将会收到与该主题有关的任何消息。发送程序只需将消息以主题的形式发送出去,由中间件来负责将消息传递给所有订阅该主题的应用。实质是:消息发送到一个特定队列,客户机可以随时预定该队列,并从中取得消息。,4
16、0,本地应用程序,消息队列接口,消息路由和排队,消息通道代理,网络,系统管理,队列管理器,中间件,消息中间件的结构,41,队列管理器 负责创建和删除队列并控制队列的属性。 由消息路由和排队模块、消息通道代理模块和系统管理模块组成,42,消息路由和排队模块 负责消息传递的方向,算法如下 (1)通过消息队列接口接受消息; (2)检查消息目的队列名中的队列管理器名是否是本地的。如果是,则将该消息放入对应队列名的本地应用队列中,然后转到(5)。否则,将该消息放入对应队列管理器名的传输队列中; (3)消息通道代理模块负责将该消息传递给远程中间件系统的队列管理器; (4)远程中间件系统的队列管理器将该消息
17、放入对应队列名的应用队列中; (5)应用程序通过消息队列接口从应用队列中获取该消息,43,消息通道代理(MCA)模块 负责消息的底层传递和网络通道的故障恢复 前者使用底层网络协议(如TCP或UDP等),并采用握手方式来传送消息,即接收方的MCA收到消息后向发送方的MCA发应答消息进行确认 后者通过对网络通道的探测来获得网络中发生的故障,并负责故障的恢复,即发送消息失败时,MCA暂时代为存储此消息。当网络连接再次建立后,MCA自动重发这条消息,无需应用程序干涉。,44,系统管理模块 管理和维护中间件系统,包括: 建立和删除队列通道 生成和维护队列路由表 查询通道的状态和处理 处理各种异常情况 日
18、志所有重要事件,45,触发机制 用于当消息的到达后激发处于休眠状态的应用程序 工作过程,46,消息队列,启动队列,队列管理器,触发监控器,应用程序,1,2,3,4,5,6,(1)一条消息到达需被触发的应用消息队列,47,消息队列,启动队列,队列管理器,触发监控器,应用程序,1,2,3,4,5,6,(2)队列管理器根据触发类型决定是否构成一次事件触发条件,48,消息队列,启动队列,队列管理器,触发监控器,应用程序,1,2,3,4,5,6,(3)当触发条件满足时,队列管理器创建一条触发消息,并将它发送到启动队列,49,消息队列,启动队列,队列管理器,触发监控器,应用程序,1,2,3,4,5,6,(
19、4)触发监控器从启动队列中读出触发消息,50,消息队列,启动队列,队列管理器,触发监控器,应用程序,1,2,3,4,5,6,(5)发一条激活命令给触发队列相关的应用程序,51,消息队列,启动队列,队列管理器,触发监控器,应用程序,1,2,3,4,5,6,(6)当应用程序程序被启动后,从消息队列取走消息并执行相应的操作,52,触发类型 分为每条消息触发、多条消息触发和有特定优先级的消息触发 每条消息触发适合于很少到达但十分重要、需要立即处理的消息 多条消息触发适合于能够批处理的消息 有特定优先级的消息触发适合于处理含有不同类型、不同层次、不同级别的多种消息的消息队列,53,接口函数 ConnectQM/DisconnectQM OpenQueue/CloseQueue PropertSet/PropertQuery SendRequest/ReceiveRequest SendReply/ReceiveReply SendReport/ReceiveReport,54,常见的MOM产品有 IBM的MQSeries Microsoft的MSMQ 东方通的TongLink/Q BEA的MessageQ,