(计算机系统结构专业论文)消息中间件tonglinkq及其事件管理子系统的设计与实现.pdf_第1页
(计算机系统结构专业论文)消息中间件tonglinkq及其事件管理子系统的设计与实现.pdf_第2页
(计算机系统结构专业论文)消息中间件tonglinkq及其事件管理子系统的设计与实现.pdf_第3页
(计算机系统结构专业论文)消息中间件tonglinkq及其事件管理子系统的设计与实现.pdf_第4页
(计算机系统结构专业论文)消息中间件tonglinkq及其事件管理子系统的设计与实现.pdf_第5页
已阅读5页,还剩57页未读 继续免费阅读

(计算机系统结构专业论文)消息中间件tonglinkq及其事件管理子系统的设计与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一1 堂业! 型塑型丝墅燮塑曼塑量趣 论文摘要 学科专业: 论文题目: 硕士生: 导师: 计算机系统结构 消息中间件t o n g l i n k q 及其事件管理子系统设计与实现 陈宁 王忠仁教授 中间件是开发大型分布式应用中一个重要的组成部分;随着i n t e r n e t 的持 续发展以及对越来越复杂的分布式应用的需求,中间件势必将成为这些应用最具 竞争力的解决方案。按中间件的目的和实现机制的不同可将中间件大致分为远过 程调用中间件、面向消息中间件( m o m ) 和对象请求代理中间件。本论文在基 于北京东方通科技消息中间件产品t o n g l i n k q 的基础上,对面向消息中间件进 行讨论,其重点将放在消息中间件的一个重要组成模块:事件管理模块上。 本论文首先对中间件概念及其分类作了一个简要的介绍,然后详细介绍了分 布式事件规范、事件订阅与发布模型,并引入了分布式系统全局状态的建立算法: g s r a :最后本文对t o n g l i n k q 的事件管理子系统及其实现进行了讨论。 关键词t i n t e r n e t 、分布式应用、中间件、消息中间件、事祥汰、 分布式系统、全局状态 第0 页共“贞 兰! 生型! ! 塑璺! 塑竺皇竺竺些! 墨竺堕里兰! 生墅生一 a b s t r a c t s p e c i a l i t y t r r l e : d e g r e ea p p l i c a n t : d e g r e e a d v i s o r : c o m p u t e rs y s t e mo r g a n i z a t i o n a r c h i t e c t u r e m e s s a g i n g m i d d l e w a r et o n g l i n k q a n dd e s i g na n d i m p l e m e n t a t i o n o fi t se v e n tm a n a g e m e n ts u b s y s t e m c h e n ,n i n g w a n g ,z b o n g r e n ,p r o f e s s o r m i d d l e w a r ei sa ne s s e n t i a lc o m p o n e n tf o rd e v e l o p i n ga n yl a r g e - s c a l e d i s t r i b u t e d a p p l i c a t i o n s w i t h t h ee o n t i n u i n gg r o w i n go ft h ei n t e r n e ta n dt h eg r o w i n g d e m a n df o rm o r ea n dl a r g e rs c a i e dd i s t r i b u t e da p p l i c a t i o n s ,m i d d l e w a r e w i1 1s u r et ob et h em o s t c o m p e t i t i v ea p p r o a c h t o i m p l e m e n t t h o s e a p p l i c a t i o n s a c c o r d i n g t h ea i m sa n d i m p l e m e n t i n gm e c h a n i s m s , m i d d l e w a r e sc o u l db e c a t e g o r i z e da p p r o x i m a t e l y i n t ot h r e ec l a s s e s : r p c b a s e dm i d d l e w a r e m e s s a g i n g o r i e n t e dm i d d l e w a r e ( m o m ) a n do b j e c t r e q u e s tb r o k e rm i d d l e w a r e t h i st h e s i s ,b a s e do n t h em o mp r o d u c to f b e ij i n gt o n g t e c h ,c o l t d ,c a l l e dt o n g l i n k q ,w i l lg i v eng e n e r a ld is c u s s o fm o m t h et h e s i s f o c u sw i l lb eo no n eo ft h ei m p o r t a n tc o m p o n e n t so f m o m t h ee v e n tm a n a g e m e n ts u b s y s t e m ( e m s ) t h et h e s i sb e g i n si t sd i s c u s s i o nb yi n t r o d u c i n gt h ec o n c e p to fm i d d l e w a r e a n dt h ec l a s s i f i c a t i o no fm i d d l e w a r e ,t h e ni ta t t e m p t st og i v ed e t a i l e d d is c u s s i o n so nd i s t r i b u t e de v e n ts p e c i f i c a t i o n ,p u b l i s h i n g s u b s c r i b i n g m o d e la n dt h ec o n s t r u c t i o no fg l o b a ls t a t eo fad i s t r i b u t e ds y s t e m t h e t h e s ise n d sw i t ht h ed i s c u s s i o no nt h ed e s i n na n di m p l e m e n t a t i o no ft h e e v e n tm a n a g e m e n ts u b s y s t e mo ft o n g l i n k q k e y w o r d s i n t e r n e t ,d i s t r i b u t e da p p l i c a t i o n ,m i d d l e w a r e ,m e s s a g e o r i e n t e d e v e n t ,d is t r i b u t e ds y s t e m ,g l o b a ls t a t e 第1 页共6 4 页 ! ! ! ! 型型! 堂璺! 坚竺! 竺竺型三墨竺堕生兰竺兰里一 第一章绪论 随着计算机网络在社会生活中的广泛应用,人们越来越依赖网络系统来支持 大量的分布式应用。这些分布式应用或者是与所在的局域网上的计算机交互,或 者是与因特网上任意计算机交互,因而其中涉及了各种庞杂的资源、信息。为了 提高性能,简化用户程序逻辑并提供可靠、安全的功能强大的服务,越来越多的 用户对开放系统提出了更高的要求。为解决传统二层模式与应用需求日益突出的 矛盾,为用开放技术实现大规模的关键业务处理,以中间件为代表的三层客户机 服务器模式应运而生。 本论文基于东方通科技的消息中间件产品,将试图对中间件中的一类中间 件:面向消息中间件( m e s s a g e o r i e n t e dm i d d l e w a r e ,m o m ) ,进行讨论。在对 m o m 进行讨论时,本文的讨论重点将放在m o m 的一个重要组成模块,事件管 理子系统上。事件在消息中间件中是一个重要的概念;事件管理子系统将负责对 消息中间件中的各种事件进行管理、监控,此外,它还需监控整个系统的状态、 提供全局状态以及对系统和( 基于消息中间件的) 应用程序提供事件服务。本文 将围绕对东方通科技消息中间件产品的事件管理模块的设计与实现进行讨论。 本论文分为五章。第一章是绪论,简要介绍本文的目的、任务及结构。第二 章将概要介绍与中间件相关技术背景,然后对中间件进行定义和分类。第三章将 讨论消息中间件的体系结构以及它的分类,它的讨论重点将放在基于消息队列的 一类中间件上。第四章将详细讨论事件管理子系统的设计与实现;在讨论 t o n g l i n k q 的事件管理子系统设计与实现前,第四章还将对所用到的相关规范、 模型、算法进行介绍。最后,在第五章中将对本文进行总结并展望中间件技术发 展的趋势。 第4 页共6 4 页 ! ! ! ! 型! ! ! ! 璺! 塑竺兰竺堡竺三至竺生竺生竺塑竺一 第二章技术背景 本章将对中间件概念的形成及相关技术背景做一个简要的介绍。本章的目的 是讨论中间件技术及其相关技术的产生和发展;此外,本章还将试图对中间件进 行定义和分类。 2 1 引言 中间件概念早在二十世纪七十年代末、八十年代初就产生了;然而中间件概 念得到重视并得到迅速发展却是在客户服务器模型被提出之后,随着计算机网 络,特别是i n t e m e t ,的发展而发展的。中间件是一个概念范畴,目前中间件的 含义已经远远超出它刚刚出现时的含义。 为了了解中间件的概念,我们需要首先对在中间件发展过程中起到重要作用 的客户i l l 务器模型进行介绍。客户服务器模型是随着计算机技术发展,为取代 以巨型机为主的、集中式计算方式而发展起来的一种技术:本章首先简略介绍客 户h i 务器模型,在指出客户服务器模型的优缺点之后将对中间件概念及其分类 进行较为详细的讨论。 2 2 客户服务器模型 客户,服务器这一称呼最早出现于二十世纪八十年代;它被用来描述在一个 网络上的个人计算机同服务器所构成的一种模型。然而真正的客户,服务器模型 获得广泛认可则是在二十世纪八十年代末期,客户,服务器模型是一种试图改善 可用性( u s a b i l i t y ) ,交互性( i n t e r o p e m b i l i t y ) ,伸缩性( f l e x i b i l i t y ) 和可扩展性 ( s c a l a b i l i t y ) 的基于消息的多用途的模块化结构;它的产生是为了取代那种集 中化的基于大型主机并采用集中式运算的模型。 可以说,客户j l l i 务器模型是针对客户,服务器计算( c l i e n t s e r v e rc o m p u t i n g ) 而提出的;什么是客户服务器计算昵? 一种较为标准化的定义是:所谓客户服 务器计算就是指那种将一个应用分割为若干个子任务并将每个子任务放到能最 有效处理该子任务的平台上进行处理:这通常意味着将数据处理和表示放在用户 端( 客户) 而将数据管理、存储放在服务器上。根据应用和所使用软件的不同, 所有的数据处理任务可能完全在客户端完成或由客户端与服务器端协同完成;服 务器与客户机通过计算机网络相连;服务器接收来自客户机的请求并在处理完这 个请求后将结果返回客户机;客户端软件负责对这些数据进行操作并将结果提供 给用户( 即所渭“表示”,p r e s e n t a t i o n ) 。 第5 舡共6 4 摄 ! ! 型竺坚塑竺竺! ! ! :竺墅型些塑罂一 图2 - 1 很好的描述了上述概念。 图2 1 客户服务器模 上述模型中,每一个服务器都向客户提供一组可以被共享的服务;目前最常 见服务器包括提供数据库服务的数据库服务器。客户服务器模型中两个重要的 概念是客户和服务器;一个客户可定义为服务的请求者,而服务器则可定义为服 务的提供者。随着软件配置的不同,客户和服务器可以同时存在于一个主机上, 也可以在不同的主机上运行。 除了客户和服务器这两个对客户服务器模型十分重要的概念外,客户服务 器模型中另一个重要的概念成分是连接客户端和服务器端所使用的计算机网络。 客户服务器计算是一种分布式计算,用户、应用以及资源按义务的需求分布并 通过一个l a n 或者w a n 或者i n t e m e t 进行连接。 与普通的分布式处理相比,客户,服务器有如下显著特征: 为了给用户提供友好的应用界面,对用户所使用的系统有极大的依赖性。 这样做的好处是给用户带来了对应用更大的控制能力并能更好满足他们 对系统的需求。 尽管应用是分布的,这种模型强调一个集中化的数据库( 服务) 以及各 种网络管理和实用功能。这样做的结果是方便了对整个系统的管理并同 时减轻了对服务器性能的要求。 这种模型更好的满足了模块化设计的要求:这可能意味着客户能自由的 从不同的供应商选择所使用的产品。 网络连接在这个模型中是一个基本的、重要的操作,这样在这种模型中 第6 页共“页 ! ! ! ! 翌! ! 塑些! 塑竺兰竺塑些至竺塑兰旦! 翌墅! 一 对网络的管理和安全性的要求在整个系统组织中有着极为重要的影响。 在客户朋务器模型的发展过程中,客户,服务器模型经历了如图2 - 2 所示的 变化( 从a 到c ) : 客户端服务器端 c ) 基于客户端处理 圈2 2 客户服务器模型的演变 a 所示的是最初也是最简单的一种的客户服务器模型,该形式的客户服务 器模型只是简单的将对数据的表示部分放到客户端。b 、c 两种模型是在客户端 机器性能不断提升的基础上,为适应应用的需求而逐步将应用的其它相关逻辑如 数据处理等放到客户端:其中b 对应了所谓的“瘦客户”模型,而c 对应了所 谓的“胖客户”模型。 尽管客户h i 务器模型在计算机技术中曾经起到过重要的作用,但随着 i n t e r n e t 发展以及应用对一致性、可靠性、安全性等要求的逐步提高,以及大型 分布式应用的迅速出现和发展,要想实施集成的、有多供应商的企业级客户服 务器模型更加困难。 为了解决上述困难,开发者需要有一套固定的能提供统一的访问系统资源的 工具,从而能使编程人员开发出那些不仅看上去能在各种个人计算机和工作站上 正确运行,并能在不同的位置使用同样的方式对数据进行存取的应用。晟能满足 这种要求的方法是使用一套统一的、位于操作系统及上层应用程序之间的编程接 口和协议。这种标准化的接口和协议就是所说的中间件。 2 3 中间件及其分类 进入二十世纪九十年代以后,随着i n t e r n e t 的发展以及应川对分布处理: i 求 第7 贝兵6 4 虹 ! ! 生型! ! 鲨璺! 塑竺! ! 堕! 竺三墨竺塑竺生旦兰竺l 一 的上升,客户服务器模型逐步演化成为多层体系结构。中间件技术是这种多层 体系结构中的一个重要代表。目前中间件技术仍在不断演变和发展中;本小节将 对其概念、分类和所采用的技术进行概要的介绍。 2 3 1中间件概念 如前文所述,中间件的概念引起人们广泛的关注是在客户机且务器模型被 提出之后。其实在客户机服务器环境下也存在着中间件:在这种环境下,一般 将中间件放在位于客户机和服务器之间的中间层,负责应用逻辑的处理,从而使 客户端变得精干( 参见图2 3 ,a 部分) :另一种更为常见的是将中间件放在客户 机和服务器之间构成一种多层应用结构( 参见图2 - 3 ,b 部分) 。但不管如何,客 户且务器模型中的中间件是“集成”在客户服务器模型中的。而现阶段的分布 式应用中,中间件已经独立于客户服务器模型并成为了联结分布式计算环境中 各个相对独立的系统的胶合剂。 客户端 服务器端 a ) 中间件包含在应用逻辑中 客户端服务器端 b ) 中间件位于客户和服务器中间 图2 - 3 客户,服务器模型中的中 什么是中间件? 虽然“中间件”这个名词早在二十世纪七十年代末就出现了, 但到目前为止它并没有一个规范的定义。为了方便下文的讨论,本论文将试图对 中间件进行一个粗略的定义。可以简单的认为,中间件是指位于操作系统及下层 通讯系统和应用程序之间的,为上层应用提供了一套统一编程接口的,并具有同 下层软件相比更强大的功能的系统。 需要指出的是,上述定义并没有完全表达出中间件概念的含义。如前所述, 中问件的概念是随着客户服务器的演化而逐步完善的:客户服务器模式成功的 提出一种解决不同主机上运行程序之间拂同工作的方案,但它无法解决不同软、 硬件平台怕j 应用协调工作的问题,而这恰恰是当今分布式系统所需解决的问题之 一,既所谓“交互性”( i n t e r o p e m b i l i t y ) l 题。 第8 页共“页 t o n g l i n k q 消乜中l 可件事件菅耻 系统的垃| 十和实耻 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ - _ _ - - - _ _ _ - - _ _ _ _ h _ _ - _ _ _ _ _ _ - _ 中间件的发展在很大程度上是为了解决了交互性问题,它向上层应用屏蔽了 下层系统的复杂性( c o m p l e x i t y ) 和不同性( d i f f e r e n c e ) ,为应用提供了一套统一 的开发接口和一致的数据访问能力,使上层应用不必考虑应用运行的下层系统的 特征。 从其所属软件范畴而言,中间件是一种应用级的软件,是一种应用集成的关 键构件,一个好的中间件产品应该能解决应用互连带来的各种问题,如支持各种 通讯协议、各种通讯服务模式、传输各种数据内容、数据格式翻译、流量控制、 数据加密、数据压缩等、提供名字服务、安全控制、并发控制、可靠性保证、效 率保证等、提供基于不同平台的丰富的应用开发接口、支持流行的开发工具、支 持流行的异构互连接口标准( 或协议,如t c p i p ) 等等。 既然中间件是为向上层应用提供统一方便的服务的,那么它是通过什么方式 提供这种服务方式的呢? 一般而言,中间件系统是由存在于应用软件和操作系统 及存在于网络中的节点系统提供的网络服务之闻的一组分布式软件组成的,它所 能提供的服务也就是这一组分布式软件所能提供的服务。 图2 - 4 扼要的表示了中间件是如何向上层提供服务。 图2 - 4 中间件服务示意图 这儿要指出的是,不同的应用领域对中间件有各种不同的要求。由于实际的 应用环境千差万别,不能指望中问件技术提供一种包罗万象的解决方案。 2 3 2 中间件的分类 由于缺乏一个统一的定义,对中间件的分类也存在着讷:多标准。一利- 被广泛 第9 兵共6 4 ! ! ! ! 型兰墨塑璺! 塑竺兰竺堕竺王至竺塑兰! 竺兰些 。 _ _ _ _ _ _ _ - _ 一 认可的分类方式是按其目的和实现机制的不同,将中间件粗略的分为三大类: 基于r p c 的中间件 面向消息的中间件( m e s s a g e - o r i e n t e dm i d d l e w a r e ,m o m ) 基于对象请求代理( o b j e c t r e q u e s t b r o k e r , o r b ) 的中间件 下面将分别对这三类中间件进行简要的介绍。 2 3 2 1基于r p c 的中间件 远程过程调用( r e m o t ep r o c e d u r ec a l l ,r p c ) 是一种广泛使用的分布式应用 程序处理方法。一个应用程序使用r p c 来“远程”执行一个位于不同地址空间里 的过程,并且从效果上看和执行本地调用相同。 一个r p c 应用可以被分为两个部分:s e w e r 和c l i e n t :s e r v e r 提供一个或多 个远程过程;c l i e n t 向s e w e r 发出远程调用。s e w e r 和c l i e n t 可以位于同一台计算 机,也可以位于不同的计算机,甚至运行在不同的操作系统之上。它们通过网络 进行通讯,利用相应的s t u b 和运行支持提供的数据转换和通讯服务,屏蔽了不 同的操作系统和网络协议。 在r _ p c 模型中,c l i e n t 和s e r v e r 只要具备了相应的r p c 接口,并且具有r p c 运行支持,就可以完成相应的互操作,而不必限制于特定的s e r v e r 。因此,r p c 为c l i e n t s e r v e r 分布式计算提供了有力的支持。同时,远程过程调用r p c 所提供 的是基于过程的服务访问,c l i e n t 与s e r v e r 进行直接连接,没有中间机构来处理 请求,因此也具有一定的局限性。比如,r p c 通常需要一些网络细节以定位s e r v e r : 在c l i e n t 发出请求的同时,要求s e r v e r 必须是活动的等等。 实现基于r p c 的应用沿用了用户熟悉的编程模式:从程序员的角度出发, r p c 十分容易理解程序代码调用远端过程并将结果返回。当使用r p c 时, 只需要编写很少的网络程序代码,大部分代码由i d l ( i n t e r f a c ed e f i n el a n g u a g e l 生成。由于r p c 一般采用c a l l r e t u r n 模式,程序员可以不必考虑网络的细节而 采用自己熟悉的c a l i r e t u r n 语法。 基于r p c 的中间件对小型的、简单的、不需要采用异步通信方式的应用比 较适合,但对大型复杂的应用不太适合,因为它需要程序员考虑网络或系统的故 障、处理多个网络连接、可移植性、缓冲及流量控制和进程之间的同步等多种问 题。 2 3 2 2 基于消息的中间件 基于消息的中间件( 或面向消息中问件,m e s s a g e o r i e n t e dm i d d i e w a r e m o m ) 为应用提供了一个完整的处理环境。它允许丌发者及用户连接不同系统之 第1 0 页共“斑 t o n e l i n k q 消息中间抖- “忭 t 耻广系统的砬计椰实现 间的数据和代码或采用一致的界面进行应用处理的互连。m o m 提供了一个高层 应用接口,为不同系统提供操作核心。m o m 产品的工作主要是通过将信息以消息 的方式在程序间传递来完成。 m o m 一般可以分为两种形式:消息传递( m e s s a g ep a s s i n g ) 中间件和消息队 列( m e s s a g eq u e u i n g ) 中l 刨件a 消息传递在建立大型的分布式应用中比较常见。其主要的模式是广播订购 ( p u b li s h - s u b s c r i b e ) 方式。采用该方式,应用程序既可以订购,也可以广播。 该通信模型提供了位置透明性。程序只需要简单地将消息以主题方式发送出去, 由中间件来负责将消息传递给所有订购该主题的程序。这种类型的m o l 主要通过 代理( a g e n t s ) 技术来实现p u b li s h - s u b s c r i b e 方式应用。当程序广播消息时, 首先与一个代理进行连接,将消息传递给代理。代理负责路由消息给相应的程序。 由于代理可以实现消息的动态路由功能,因此,该方式能够提供较好的容错性能, 但它缺乏m o m 的异步特性,不太适合长时间网络断开的情况。 消息队列方式允许程序无需直接建立起连接即可发送和接收消息。程序只须 简单地将消息发送给消息队列,由消息队列负责消息的传递,对应用程序完全透 明。消息队列采用异步方式,为信息提供了一个安全的存储方式,特别适用于不 是直接连接的应用如移动用户、发送方或接收方进程可能处于不活动状态的应 用。它的缺点是需要些配置工作,性能不是很高,而且如果队列丢失,整个系 统将受到影响。 m o m 可以克服基于r p c 的中间件的限制,提供基于消息的异步通信机制,因 此m o ma p i 调用不会阻塞应用程序,同时m o m 不会占用大量的网络带宽,可以跟 踪事务,通过将事务存储在磁盘上,可以恢复系统及网络故障。 m o m 是本论文讨论重点,以后章节中将给其更为详细的叙述。 2 3 2 3 基于o r b 的中间件 随着对象技术与分布式计算技术的发展,两者相互结合形成了分布对象计 算,并发展为当今软件技术的主流方向。1 9 9 0 年底,对象管理集团o m g 首次推 出对象管理结构o m a ( o b j e c tm a n a g e m e n ta r c h i t e c t u r e ) 。对象请求代理( o b j e e t r e q u e s tb r o k e r ) 是这个模型的核心组件,它的作用在于提供一个通信框架,透 明地在异构的分布计算坏境中传递对象请求。o m g 还提供出了通用对象请求代 理体系结构( c o m m o n o b j e c t r e q u e s t b r o k e r a r c h i t e c t u r e ,c o r b a ) 规范,c o r b a 规范包括了o r b 的所有标准接口。1 9 9 1 年推出的c o r b a1 1 定义了接口描述 语言o m gi d l 和支持c l i e n t s e r v e r 对象在具体的o r b 上进行互操作的a p i 。 c o r b a 2 0 规范描述的是不同厂商提供的o r b 之间的互操作。 蚺i i 虹共6 4 虹 里! ! ! 型! 皇堂皇! 坚竺! 竺! ! 竺三墨竺坚坠! 竺壅垩 _ - _ _ _ 、_ _ _ r 一 一 对象请求代理( o r b ) 是对象总线,它在c o r b a 规范中处于核心地位,定义 异构坏境下对象透明地发送请求和接收响应的基本机制,是建立对象之间 c l i e n f f s e r v e r 关系的中间件。o r b 使得对象可以透明地向其他对象发出请求或接 收其他对象的响应,这些对象可以位于本地也可以位于远程机器。o r b 拦截请 求调用,并负责找到可以实现请求的对象、传送参数、调用相应的方法、返回结 果等。c l i e n t 对象并不知道同s e r v e r 对象通讯、激活或存储s e r v e r 对象的机制, 也不必知道s e r v e r 对象位于何处、它是用何种语言实现的、使用什么操作系统或 其他不属于对象接口的系统成分。 基于o r b 的中间件主要是采用面向对象的技术,o r b 可以看作是与编程语 言无关的面向对象的r p c 应用。它的成员函数可以采用类似o b j e c t f u n c t i o n 0 方 式调用远端的对象。目前,o r b 存在两个彼此竞争的标准:c o r b ao r b ( o m g 所制定的) 和d c o mo r b ( d c o m 是微软提出的分布式组件对象模型,既 d i s t r i b u t e dc o m p o n e n to b j e c tm o d e l ) 。 当使用o r b 时,i d “i n t e r f a c e d e f i n e l a n g u a g e ) 用于定义对象之间的接口, 它类似于r p c 中的i d l 定义过程的接口。o r b 特别适用于对象接口变化不频繁, 不会导致代码经常被重新编译及链接的情况。 o r b 的总体框架图如下页图2 4 所示。 图2 - 4o r b 的总体框架 理想的要求是,个o r b 应赋予每个对象( 在与其它对象特别是远程的对象 进行通信时) p a 下的分布透明性: 位置:无论其它对象是否处于同一个计算机中: 访问路径:与其它对象交换消息经过的途径: 第1 2 页共“页 t b n s ! ! ! ! 塑璺:! 坚竺兰竺! ! 些! 墨竺堕壁! 竺兰些 一 一 重定位:其它对象从一台计算机移至另一台; 数据表示:其它对象相应的数据格式; 通信机制:使用何种进程问的通信机制和规程: 调用机制:其它对象的方法是如何执行的。例如:进程、线程和动念 链接库等的细节; 存储机制:其它对象任何可以或不可使用存储的情况; 机器类型:任何机器型号上的不同: 程序语言:其它对象是以何种语言实现的; 操作系统:任何操作系统上的不同: 安全机制:其它对象本身所具有的访问控制机制。 对以上各方面的任何变更都无须将这个特定对象重新编译( 或重新链接、重 新加载等等) ,其整体效果是,对任何一个对象的实现动态地进行更改,都将不 会影响到其它的对象,无论它们是服务者或是请求者。 2 3 3中间件的优缺点 中间件技术的迅速发展及普及本身说明了中间件技术有着许多好处。如前所 述,它对企业分布式应用提供一个完美的解决方案。从纯粹的企业应用来说,使 用中间件将可以获得以下好处: 缩短应用开发周期:t h es t a n d i s h g r o u p 分析了一百个关键应用系统中的 业务逻辑程序、应用逻辑程序及基础程序所占的比例,发现了一个有趣 的平均百分比:其中,业务逻辑程序、应用逻辑程序仅占总程序量的 3 0 ,而基础程序却占了7 0 ! 若是以新一代的中间件系列产品来组合 应用,则可大大缩短应用的开发周期,同时节约大量的人力和资金投入。 减少项目开发风险:t h es t a n d i s hg r o u p 对项目失败的定义是:项目中途 夭折、费用远远超过预算、无法准时完成项目和偏离既定的目标。研究 表明,没有使用标准商业中间件的关键应用系统开发项目的失败率高于 9 0 。而且,企业自己开发内置的基础( 中间件) 软件是得不偿失的,项 目总的开支至少要翻一倍,甚至会十几倍。借助标准的商业中间件,企 业可以很容易地在现有或遗留系统之上或之外增加新的功能模块,并将 它们与原有系统无缝集合。 应用系统质量及可维护性:基于企业自我建造的基础软件平台上的应用 系统,每增加一个新的模块,就要相应地在基础软件之上进行改进。t h e s t a n d i s hg r o u p 在调研过程中,曾在某个企业中的个应用系统罩,发 现了有多达1 万7 千多个模块接口,而标准的中间件在接口方仃玎揶琏 菏 壕1 3 剪接6 4 虹 ! 型! 塑翌璺生坚竺皇堡堡墨! 墨竺型业塑一 晰和规范的,可以有效地保证应用系统质量及减少新旧系统维护开支。 同时,由于使用中间件,企业应用系统的维护在很大程度上只是对自己 企业业务逻辑的维护,从而很大程度上增加了整个系统的可维护性。 增加产品吸引力:中间件技术代表了一种新的应用模型;企业采用中间 件技术不仅可以节约自己的人力、物力还可在当今信息时代中使自己 处于领先地步,使自己的应用系统更完善、更出众。 此外,中间件技术对整个应用模型起到了重要的影响:中间件使应用可以基 于一个统一的运行平台,这个平台所提供的服务同操作系统和网络服务程序相比 更为强大:应用程序利用中间件平台提供的a p i ( a p p l i c a t i o np r o g r a m m i n g i n t e r f a c e ) ,可以具有如下优点: 透明的存在于网络中,并能同其它应用或服务进行交互。由于中间件提 供的是一套统一的接口,基于它的应用程序可以在任何运行该中间件的 平台上运行;它不必考虑自己的物理位置等等。 与运行平台提供的网络通讯服务无关。中间件负责解决不同网络协议之 间的转换,应用程序不必关心下层网络协议可能出现的差异。 更加可靠( r e l i a b i l i t y ) 、更高的可用性( a v a i l a b i l i t y ) 。中间件一般保证 了应用通讯的可靠性、安全性;此外中间件还可以采用大量的技术来增 加系统的容错性等等以保证整个应用的高可用性。 具有良好的可扩展性。应用可以在保持原有的功能上自由的、方便的进 行扩展。 尽管中间件具有上述优点,尽管它的目的是为应用程序提供一个“统一”的 运行平台,但中间件所提供的服务却并非是“万能的”。中间件同其所期望实现的 一些原则离实际还有很大距离,这包括: 由于中间件没有个统一的标准,各种流行的中间件产品使用专有的 a p i 和专有的协议,使得应用建立于单一厂家的产品,来自不同厂家的 实现很难互操作。 有些中间件产品只提供一些平台的实现,从而限制了应用在异构系统之 间的移植。 应用开发者在这些中间件产品提供的服务之上建立自己的应用还要承 担相当大的风险,随着所使用中间件的技术的改变和发展他们往往还需 重写他们的系统。 此外t 尽管中间件概念提高了分行计算的抽象化程度,但应用丌发者还 第1 4 珂共6 4 打 ! ! ! ! 型型! 塑璺! 坚竺兰竺塑:! 三至竺竺坐! 竺兰! 生一 需面临许多艰难的设计选择,例如,丌发者还需决定分柑应并;| 在c l i 。m 方和s e e r 方的功能分配。通常将表示服务放在c l i e n t 咀方便使用显示 设备,将数据服务放在s e r v e r 以靠近数据库,但也并非总是如此,何况 其它应用功能如何分配也是不容易确定的。 然而同使用中间件而带来的巨大优势相比,使用中间件带来的这些不足之处 是可以接受的:而且,随着中间件技术的进一步发展,可以认为这些不足之处将 会得到改善或消除。 第1 5 贝共“页 竺! 型! 竺业塑堡! 坚竺! 墨竺竺坠型型一 第三章消息中间件与t o n g l i n k q 本章将对中间件中的面向消息中间件m o m ( 简称消息中间件) 进行讨论。 消息中间件主要解决的问题是通讯问题:借助于下层网络软件的功能,消息中问 件将为上层提供更可靠、安全的服务。 3 1 引言 消息中间件是中间件范畴中发展的最快的中间件类型之一,尽管不存在一个 统一的标准及相关的规范,它已经成为一种成熟的技术( 从目前的消息中间件产 品就可以看出) 。 本章将对消息中间件进行讨论。按消息中间件所基于的实现机制的不同,可 将消息中间件进一步分为基于消息传递的消息中间件和基于消息队列的消息中 间件:本章将分别对这两类中间件以及它们所使用的技术和所具有的特点进行介 绍。然后本章将对北京东方通科技的 皂星史0 哎旦一t o n g l i n k q 做一个概要的 介绍。 除了实现机制上的不同,基于消息队列和消息传递中间件的不同点主要在于 应用在使用它们时所具有的关系的不同。从应用层来看,应用之间的关系可以大 致分为两种:一种请求回答( r e q u e s t r e p l y ) 关系和一种对等( p e e r - t o p e e r ) 的 关系。前者一般是一种同步的关系,作为客户的一方必须等到作为服务器的一方 回答后再进行其它的处理:而后者则是一种异步的方式,客户端可以在等待服务 器端响应时继续进行其它处理。一般而言,基于消息传递中间件的应用一般属于 前一种关系:应用间需要通过消息传递信息,然后等待对方回应:而基于消息队 列中间件的应用,其相互之间的关系则是一种对等的关系:任何一方投递消息后 可以继续自己的处理,只要它在以后某个时间从消息队列中获取回应消息即可。 尽管两类消息中间件存在这些差异,但从总体上来说,它们所采用的技术有 许多共同之处:它们都需要解决作为消息中间件应完成的通讯功能,它们的目的 都是为上层应用提供安全、可靠的信息传递服务等等。此外,由于目前大多数消 息中间件产品( 如i b m 的m q s e r i e s ,b e a 的m e s s a g e q ,以及t o n g l i n k q 等) 都是基于消息队列的,因此下面的讨论将把重点放在基于消息队列的中i 可上。 第1 6 页共“虹 生! ! ! ! ! ! ! 鲨璺! 塑! :! :! 兰堡些! = 墨兰竺兰旦竺兰竺l 一 3 2 消息队列中间件( m e s s a g eq u e u i n g m i d d l e w a r e ) 本节将对消息中间件中基于消息队列的中间件进行讨论。本节所讨论的许多 内容也适用于基于消息传递的消息中间件。 3 2 1相关概念 为了了解消息队列中间件( 以及消息传递中间件) ,我们需要对所使用的一 些术语进行定义。 首先需要定义的是消息。什么是消息? 消息从起表现形式上是由简单的位串 或字符串组成:这些位串或字符串仅仅对某一个或某一类应用程序有意义。一个 消息除了包含应用所需处理的数据外,还可能包含其它成分,例如,一个表达的 业务请求的消息可能就同时包含了数据和控制信息。在所有的消息系统中,消息 被用来在同一个应用的不同进程或不同应用的不同进程间进行通讯。 那么,在基于消息队列的消息中间件中,什么是消息队列呢? 一般而言,消 息队列被认为是一种有名实体( 例如,i b m 的m q s e r i e s 将消息队列作为一种对 象) :它用于存放应用的消息,并能被应用程序通过调用相应a p i 进行操作。消 息队列可以是显示存在的( 此时它能被应用编程人员通过程序进行访问) ,也可 以是隐藏的( 无法通过应用程序访问) 。此外,消息队列可以是多样的:它可以 具有不同的属性以对特定的应用程序进行服务;也可以将消息队列作为一种通用 的、供所有应用程序使用的通讯渠道,这种消息队列的属性无法由应用程序控制, 从而对所有的应用而言它都是一样的。 使用消息队列,应用程序之问不再需要建立直接的专用的通讯通道;它们之 间的通讯都通过调用对消息队列进行访问的a p i 而实现。这样做的好处在于,应 用程序之间不再需要保持完全同步;通讯时,应用程序只需将一个消息放入消息 队列,而不必关心与之通讯的对方是否存在或是否准备好处理这个消息。 在使用消息队列时,还有一个需要解决的问题:应用程序如何知道其它应用 程序所预期的消息格式? 其答案是应用程序将无法获取这种信息:大多数的消息 中州件产品并不关心应用程序之问通讯时所采用的信息格式( 因此它们将不会规 定一致的需要遵循的消息格式) ,它们仅仅将这些消息简单的当作字节流:所有 提供的a p i 仅仅负责对消息队列进行操作并为应用程序读写这些字节流提供方 便。因此通汛双方应该为自己所使用的消息格式负责,它们应该规定一种统的 第1 7 虹接6 4 撕 。尘! ! ! ! ! 型! 塑兰! 塑堡兰! ! ! :竺些! 墨竺塑苎! 竺兰些 - _ - _ _ _ 一一一一 双方都可进行解释的消息格式,并在这种统一的格式上进行信息交换。 然而对消息中间件系统而言,消息作为一种实体,必须有某一种方式对其进 行区分和操作:为了解决这个问题,消息中间件将使用一种称为消息头( 或控制 头) 的对象,这种消息头是由中间件系统自动对每个消息附加的并只由中间件系 统使用的- d , 块信息。不同的消息中间件产品对消息头有不同的称呼( 例如i b m m q s e r i e s 中的m q m d :m qm e s s a g ed e s c r i p t o r ) ,但消息头的作用都是为了方便 消息中间件对消息的管理:消息中间件通过对消息头的管理来实现它对消息的管 理。消息头中包含了所有消息中间件为了实现管理而需要的信息,例如,它可能 包含诸如队列名称、优先级别、消息标示以及消息类型等信息。 除了对消息进行管理外,作为基于消息队列中间件重要部分的消息队列也需 要被有效的加以管理。几乎所有的基于消息队列的中间件产品都有一个专门用于 管理消息队列的模块;一般而言,这个模块负责创建、控制、删除一个消息队列, 并通过一定的接口允许应用程序存取消息。这个模块通常被称为“队列管理器” ( q u e u em a n a g e r ) 。个完善的队列管理器还应该提供必要的保证消息在网络上 传递的服务、自动的,智能化的在传递消息时进行路由( r o u t i n g ) 以及提供不同 层次的消息确认信息以保证可靠传输。 3 2 2 基于消息队列中间件应用的开发模式 消息对列中间件的使用简化了基于它的应用的开发模式。典型的基于消息队 列中间件的应用编程模式是应用通过消息队列间接的同通讯对方进行交互;它们 使用队列管理器提供的服务来完成同远地应用通讯,并且它们不用关心消息在传 递过程中是否会丢失等等,因为一个消息中间件系统应该能对消息从源消息队列 传递到目的消息队列( 可能在同一个主机上,也可能在不同的由网络相连的其它 主机上) 进行保障。 消息队列中间件产品一般采用消息队列模型来实现这种通讯模式。使用这种 模型,所有应用投递的消息被保存在消息队列中,其它应用程序可以通过对消息 队列的访问来获取所需的消息。采用消息队列模型可以方便的实现一对一、一对 多以及多对多的通讯。 利用消息中j 剐件提供的服务,应用编程者在通讯时所需的操作只有两种: 是向一个消息队列发送一个消息,另一个则是从消息队列接收一个消息。至于消 息是如何从源传送到目的地,应用程序不用也不需关心。 第1 8 喊凝“负 ! ! 型婴业! 型! 堂坚型型型生一 图3 1 使用消息队列中间件进行通讯 图3 - 1 描述了应用程序在使用消息队列中间件时进行通讯的模型。典型的使 用消息队列中间件进行通讯的应用程序大致按照下述步骤进行: 1 通讯双方( 发送者和接收者) 连接到各自本地的消息队列上( 通过消息 队列管理器) 。 2 发送方发送消息到目的队列,该队列可能处于本机( 本地消息队列) 或 处于远地计算机( 远程消息队列) 。如果目的队列是远程消息队列,消息 在到达目的消息队列前应该被安全的存放到本地计算机上。 3接收程序在消息到达消息队列时丌始运行。这个过程通常被称为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论