中间件 综述

本文介绍了现代应用系统的基本特征,分布式系统的关键设计问题,中间件技术的优势与分类,以及远程过程调用(RPC)、Java RMI、组件技术、Web组件与容器、消息中间件和数据存取中间件等内容。

一、概述

1.现代应用系统的基本特征

【1】分布:任务不再是在单机上完成,而是由网络中的多台计算机的相关应用共同完成

【2】异构:计算机硬件、操作系统、网络协议、数据库系统和开发工具种类繁多

【3】动态协作:参与协作的应用允许位置透明、迁移透明性和负载均衡性

2.分布式系统

分布式系统是有若干个独立的计算机的集合,但是对系统用户来说就像是一台计算机一样。

分布式系统设计的关键问题:灵活性、可靠性、性能、可伸缩性、可扩展技术

3.中间件

中间件:是一种软件,处于系统软件(操作系统和网络软件)与应用软件之间,它能使应用软件之间进行跨网络的协同工作。

中间件技术包含运行环境、开发工具、应用程序三方面的内容;

SOA:面向服务的架构

中间件的分类:事务处理中间件,消息中间件,数据库中间件,远程过程调用中间件,对象请求代理中间件,网站容器、JAVAEE、WebService

4.中间件技术的优点

(1)使用中间件技术之后,软件的开发的重心从功能实现变成了功能组件的组合;解决了成本问题、开发周期问题、质量问题,提高了软件的利用率。

(2)软件的功能的扩充不再需要重新编译和链接,可以在二进制级完成软件功能的扩充;

(3)中间件技术使得软件从封闭变得开放,变成可为别人服务,自己也可以扩充,取得了互利互赢的功效。

(4)由于标准接口对于可移植性和标准协议对于互操作性的重要性,中间件已成为许多标准化工作的主要部分

(5)中间件提供的程序接口定义了一个相对稳定的高层应用环境,不管底层的计算机硬件和系统软件怎样更新换代,只要将中间件升级更新,并保持中间件对外的接口定义不变,应用软件几乎不需任何修改,从而保护了企业在应用软件开发和维护中的重大投资。

5.远程过程调用

远程过程调用协议:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议

二、分布式处理环境

1.DCE服务

DCE:Distributed computing environment分布式计算环境


作为一个中间件DCE提供两类服务

【1】基本服务:线程服务,RPC服务,目录服务,暗转服务

【2】扩充性服务:分布式文件服务和时间服务

线程服务:利用线程服务,客户与服务器内部可以有多个控制流,从而实现内部的并行处理

RPC服务:提供了DCE环境中所需的进程间通信工具,它支持客户对远程服务器的访问。

目录服务:允许客户在整个分布式环境中寻找自己所需要的服务

安全服务:保证对DCE中服务器访问的安全性,包括身份认证、权限检查和数据加密

分布式文件服务:提供对本地系统文件和远程系统文件的房屋内透明性

时间服务:提供一个时间同步标尺,用于确保整个系统各部分时间的一致性

2.DCE的应用

编写一个基本的DCE应用,应用开发者应当提供三个文件
(1)界面定义文件,定义了服务器所提供的远程过程调用的界面(数据结构、过程名、参数)
(2)客户程序:定义了用户界面,对远程过程的调用及客户方的处理功能
(3)服务器程序:提供实现远程过程调用的实现

3.DCE的问题

DCE没有采用面向对象技术

4.目录服务

具体实现包括两个独立的部分
CDS(Cell Directory Service),在逻辑组内提供一个层次型的命名空间
GDS(Global Directory Service)把CDS的层次型命名空间扩展到逻辑组外,从而实现了一个全系统的目录服务。
(1)服务器进行服务注册
正在初始化的服务器将该服务器的主机地址及每个界面的名字写入CDS服务器
(2)客户进行服务查找
当客户应用请求一远程服务时,RPC软件与客户方的CDS软件交互作用,以便从DCE的目录服务器获得服务方的绑定信息。
CDS软件缓存该结果以便提高今后的查询速度。

三、ODP和Corba介绍

1.ODP

是一种标准

开放分布式处理参考模型(RM-ODP,referenced model of open distributed processing)是一种标准,提供了开放式分布式处理领域其他标准必须遵循的参考模型。

(1)ODP的组成

【1】观点(viewpoint):把对系统的说明分成若干个不同的侧面,每个观点对同一个分布式系统的某个不同侧面进行描述

企业观点(Enterprise viewpoint):focuse on the purpose scope and policies of a system关注目的,范围和策略。

信息观点(information viewpoint):focuses on the information and associated processing of a system关注信息和协作处理

计算观点(computational viewpoint):将功能分解为接口和交互的对象

工程观点(Engineering viewpoint):关注系统部署方面

技术观点(Technology viewpoint):特定的技术,包括软件和硬件


【2】透明性(Transpsrencies):屏蔽了系统的分布带来的复杂性

访问透明性 access transparency:

位置透明性:location transparency

迁移透明性:migration transparency

失败透明性:failure transparency

重定位透明性:relocation trasparency

复制透明性:persistence transparency

持久透明性:persistence transparency

事务处理透明性:transaction transparency

(2)功能组成

【1】管理功能,结点管理、对象管理

【2】协作功能,时间通知,事务

【3】仓库功能,存储,信息组织

【4】安全功能,访问控制、授权

(3)ODP与其他规范的关系
【1】ODP是独立于任何特定的网络,可以用OSI、TCP/IP等各种网络所以ODP跟网络规范没有规范
【2】不仅是一个一般标准,还是一个标准的标准,即规定了使用开发分布式处理领域内的其他标准必须遵循的参考模型
【3】ODP is not in competition with other standards. In fact ODP is very much the big picture of distributed processing, and CORBA and DCOM fit into the ODP framework
 very well.

2.CORBA

(1)定义

CORBA(common object request broker architecture,公用对象请求代理体系机构)是有OMG(Object management grop,对象管理组织)提出的应用软件体系结构和对象技术规范。

其核心是一套标准的语言、接口和协议,以支持异构分布应用程序之间的互操作性以及独立于平台的和编程语言的对象重用。

Corba使用面向对象模型实现分布式系统中的透明服务请求

(2)OMA

对象管理结构描述了面向对象技术在分布式处理的应用。包括对象模型和参考模型。

【1】对象模型描述分布式环境中的对象。

【2】参考模型描述对象之间的交互

OMG定义了一条共用的通信总线,即ORB(Object request broker)并定义了这一总线的界面包括:

对象服务:命名服务、持久性服务、生存周期服务、事务处理服务、事件服务、安全服务

公共设施:是各种应用可以共享的一些列服务

应用界面:

域界面:


(3)CORBA

CORBA详细说明了OMA中ORB组件的特性和界面。包括:

【1】ORB核心:把客户发出的请求传递给对象,并把目标对象的执行结果返回给发出请求的客户。

【2】OMG界面定义语言:语法与C++类似,增加了支出分布式处理关键字,是一个纯说明性语言

【3】界面仓库与实现仓库:存储对象有关的信息

【4】语言映射:把IDL映射到具体实现

【5】存根和框架:存根代表客户创建并发出请求,是客户不用关心ORB的存在,把请求交给存根由存根负责,框架把请求给CORBA对象实现

【6】动态调用:动态调用界面,支持客户端的动态请求调用。动态框架界面,支持服务方的动态对象调用。

【7】对象适配器:联系对象实现与ORB本身的纽带

【8】ORB之间的互操作:定一个标准通信协议GIOP(General inter-ORB Protocol)

 

(4)不足和缺陷
(1)不同的CORBA实现之间会出现缺乏互操作性的现象,从而造成一些问题。
(2)供应商常常会自定义扩展,而CORBA又缺乏针对多线程环境的规范。
(3)对与像C或C++这样的语言,源码兼容性并未完全实现。
(4)Corba过于复杂,要熟悉CORBA,并进行相应的设计和编程,需要许多个月来掌握,而要达到专家水平,则需要好多年。

四、远程过程调用和Java RMI

1.远程过程调用

(1)概念

进程间通信(IPC):是在多任务操作系统或联网的计算机之间运行的程序和进程所用的通信技术,包括本地过程调用和远程过程调用

远程过程调用协议:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议

单个远程程序一次只能支持一个远程过程调用,当前远程过程调用完成之前会自动阻塞其他远程过程调用,程序员设计分布式程序时不需要考虑这种互斥。

(2)RPC的优势

【1】位置透明性:被调用的函数可以在本地也可以在远程,调用者不必关心目标函数的位置在哪里

【2】开发人员可以专注以应用程序的功能,而不用为了网络通信而劳神费心

【3】内置对安全性的支持,支持多线程概念和网络协议的独立性

(3)采用RPC的分布式计算

【1】客户只负责简单的显示,捕获和验证用户数据

【2】中间层是支持客户机做复杂商务处理(如计算花费)的服务器层,较为强大和灵敏

【3】后台服务器管理持久性的业务数据,通常直接和数据库交换信息。

(4)RPC编程

【1】构建解决问题的常规应用程序

【2】选择一组过程形成远程程序

【3】为远程程序编写RPC界面,包括远程的名字及其编号、还有对其参数的声明。

【4】为客户端和服务器端编写stu接口例程。

【5】编译并连接客户程序与服务器程序

【6】在远程机器上启动服务器,接着在本机上启动客户。

2.Java远程方法调用

Java RMI(Java remote method invocation):是一种实现远程过程调用的应用程序编程接口

RMI宗旨:简化远程接口对象的使用,使分布在不同虚拟机中的对象的外表和行为都像本地对象一样。

(1)RMI规范与目标

【1】支持对存在与不同java虚拟机上的对象的无缝的远程调用

【2】支持服务器对客户端的回调

【3】把分布式对象模型自然地集成到java语言中

【4】使编写可靠的分布式应用程序尽可能的简单

【5】保留java运行时环境所提供的安全性

(2)存根与框架

【1】存根(stub)

代表远程对象的客户机端对象:存根具有和远程对象相同的接口和方法列表,当客户端调用存根方法时,存根通过RMI基础结构将请求发送到远程对象。

【2】框架(skeleton)

在服务端,框架对象处理“远方”的所有细节。

JDK 包含工具rmic会创建存根和框架的类文件

(3)存根与框架的关键技术

【1】对象串行化技术,将对象转化为平坦的字节流,并且能够重建。

【2】动态类加载:在程序运行时动态装载客户端所需要的存根。

(4)RMI程序

包括:【1】远程对象接口【2】远程对象实现【3】服务程序【4】客户程序

编写过程:【1】定义远程对象接口【2】编写远程接口的实现【3】编写在服务器上运行的主程序【4】将远程对象注册到RMI名称注册表【5】编写客户端程序

(5)RMI的优点

【1】面向对象:可将完整的对象作为参数和返回值传递

【2】可移动属性:RMI可将属性(类实现程序)从客户端移动到服务器,或者从服务器移动到客户机

【3】设计方式:对象传递功能使得可以在分布式计算中充分利用面向对象技术的强大功能

【4】安全:使用JAVA内置的安全机制保证下载执行程序时用户系统的安全

【5】便于编写和使用

【6】编写一次到处运行

【7】垃圾回收

【8】并行计算 

(6)小结

RMI是JAVA的远程过程调用(RPC)机制

RMI和Corba常被视为相互竞争的技术,因为两者都提供对远程分布式对象的透明访问。但是这两种技术是相互补充的,一者的长处正好可以弥补另一者的短处。两者结合产生了RMI_IIOP,


五、组件技术概述

组件:一个不透明的功能实体,能够被第三方组装,且符合一个构件模型。

1.COM组件对象模型

(1)定义

Component Object Model:是一种基于COM的、已编译好的软件组件,可为应用程序、操作系统和其他组件提供服务。

COM不是一种语言,而是一种标准、规范,包括一套标准的API、一个保准的接口集和COM用于支持分布式计算的网络协议。

(2)几个基本概念

在COM技术中,组件和接口是其核心概念

COM规范:平台无关,定义了大量的标准接口

COM接口:客户与对象之间的协议

COM对象:实现COM接口,通过接口提供服务,可包含多个接口

COM组件:对象的载体,可包含多个COM对象,是可独立发布的二进制文件,在windows平台上为dll或exe

(3)COM接口

接口标识--IID:是GUID的一种用法,GUID是一个128位的长整型,具有全球唯一性

IUnknow接口:所有的COM接口都从其派生

COM接口二进制结构:


(4)COM对象

【1】客户的交互实体

【2】包括属性和方法,或者状态和操作

【3】能够提供服务--通过COM接口

(5)COM对象的创建和删除

创建:CocreateInstance(),在注册表中查找COM服务器的位置并将服务器加载到内存,创建请求的实例。

删除:Release

2..net组件

.net组件达到了与COM类似的目标,但是它引入了新概念,实现起来更容易。

.net的核心技术就是用来代替COM组件功能的CLR(公共语言运行库),可采用各种编程语言,利用托管代码来访问


六、Web组件和容器

1.web服务器

(1)处理流程


(2)MVC框架

模型:处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据

视图:显示数据的部分

控制器:是应用程序处理用户交互的部分

(3)web容器的概念

容器可以管理对象的生命周期,对象与对象之间的依赖关系。通过配置文件配置文件信息,启动容器后自动生成对象不需要用户编写代码。

2.JAVAEE(Java platform enterprise edition)

通常包括:web框架的前端层,提供安全和事物的中间层,提供持久性服务的后端层

即:表现层、业务逻辑层、数据持久层

JDBC:提供连接各种数据库的统一接口,可以为多种关系数据库提供统一访问

EJB(Enterprise JavaBeans):使得开发者方便地创建、部署和管理跨平台的基于组件的企业应用。

JMS(JAVA Message Service):提供企业消息服务

JTS(Java transation Service):提供存取事务处理资源的开放标准

Annotation:将程序的元素与元数据联系起来

JMF(java media framework API)可帮助开发者把音频、视频和其他一些基于时间的媒体放到Java应用程序中

3.Spring

Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的服务容器框架,采用依赖注入的设计模式。

Spring与EJB框架结构都有一个共同核心设计理念:将中间件服务传递给耦合松散的POJO对象(Plain Old Java Objects),POJO类没有任何特别之处,无需修饰,不继承自某个类,但是却可以作为组件使用。

(0)EJB的缺点
EJB要严格地继承各种不同类型的接口,类似的或者重复的代码大量存在,而配置也是复杂和单调。因此,对于大多数初学者来说,学习EJB实在是一件代价高昂的事情,且较低的开发效率,较高的资源消耗,都造成了EJB的使用困难。
(1)与web服务器相关的技术

【1】反射(Reflection)

程序可以访问、检测和修改它本身状态和行为的一种能力

JAVA反射的功能:判断对象所述的类,所拥有的成员变量和方法,甚至可以调用private方法,生成动态代理

【2】注解(Annotation)

也叫元数据,可以通过反射机制编程实现这些元数据的访问。一种代码级别的说明,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量等前面,用来对这些元素进行说明、注释。

【3】依赖注入(Dependency injection)

容器负责对象的创建和关联,并管理对象的生命周期。

DI通过截取执行上下文或在运行时信息,为组件和对象注入他们之间的依赖关系。

POJO类可脱离框架进行单元测试,POJO类并不需要继承框架的类或实现其接口,开发者能极其灵活地搭建继承结构和建造应用。

控制反转IOC:把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的。

【4】面向切面的编程(Aspect Oriented Programming )

通过预编译方式和运行期动态代理的方式实现程序功能的统一维护的一种技术

连接点(Joinpoint):程序执行过程中某一个方面可以切入的点,如方法调用或异常抛出

通知(Advice):在特定的连接点,AOP框架执行的动作。比如Before、around

切入点(Pointcut):指定通过只将引发的一些列连接点的集合。

方面(Aspect):通知和切入点合在一起

引入(Introduction):允许添加新的字段和方法到被通知的类

目标对象(target object):包含连接点的对象,被通知和被代理的对象

AOP代理(AOP Proxy):AOP框架所产生的对象,包含通知

编织(Weaving):把方面应用到目标对象。

4.EJB 

(1)什么是EJB

是一个可重用的,可移植的Java EE组件。EJB运行在一个容器里,允许开发者只关注与Bean中的业务逻辑而不用考虑事务支持、安全性和远程访问等复杂和容易出错的事情。

(2)EJB包含两种类型

:会话Bean和消息驱动Bean

【1】会话Bean代表用户完成一个轻松的解耦和的任务,例如检查客户账户历史记录。

  • 无状态Bean不维护会话状态,其服务任务在一个方法调用中结束,会话池中无状态Bean可以被共享,当客户端请求一个无状态的Bean实例时,它可以从池子中选一个空闲状态的Bean实例进行调用处理。当请求到了会话池设置的最大数量,新的请求被加入队列等待无状态Bean的服务。
  • 有状态会话Bean维护一个跨越多个方法调用的会话状态。当一个客户端请求一个有状态会话Bean实例时,客户端将会得到一个会话实例,该Bean的状态只为该客户端维持。

【2】消息驱动Bean用于接受异步JMS消息

 Message Driven Bean,MDB提供了一个实现异步通信的方法,该方法比直接使用JAVA消息服务JMS更容易。通常要实现MessageListener接口

可以通过创建MDB接受异步JMS消息。当一个业务执行时间很长,而执行结果无需实时向用户反馈时,很适合使用消息驱动Bean


七、消息中间件

1.概念

(1)消息中间件是在分布式系统中完成消息的发送和接收的基础软件

(2)消息中间件的通信方式

【1】发送方不知道接收方的状态,也无需等待回复

【2】接收方也不知道发送放状态,更无需进行同步

【3】收发双方是松耦合的,双方不知道对方存在

【4】一条消息可以发送给多个接受者

2.架构和要素

(1)传统的点对点消息中间件通常由消息队列服务、消息队列、消息传递服务、消息应用程序接口API组成


(2)在基于消息代理的分布式应用系统中

消息的发送方是出版者(publisher),接收方四订阅者(subscriber),不通过的消息通过不同的主题进行区分。


(4)解耦

消息代理实现了发布者和订阅者的解耦

【1】时间解耦:发布者订阅者双方不必同时在线

【2】空间解耦:发布者订阅者双方根本不需要知道对方的存在

【3】流程解耦:发布者订阅者双方在收发过程中并不阻塞各自的控制流程

(5)消息的表示

消息头,消息体,目前多采用xml作为小时表示的格式

(6)消息队列的分类

【1】持久消息队列,基于数据库或文件系统,提供消息持久存储功能,同时具有最小的内存开销,适合消息需要可靠传输的应用环境

【2】内存队列,基于内存的消息队列,适合对性能要求高,但无需可靠持久的应用环境。

【3】高速缓存队列,基于数据库和内存cache,具有较大的开销,同时具有很高的性能,适合大部分应用场合。

4.JMS

JMS通过MOM产品为JAVA程序提供了一个发送和接受消息的标准便利的方法,用JMS编写的程序可以在任何实现JMS标准的MOM上运行

(1)JMS传递消息的方式

【1】标记为NON_PERSISTET的消息最多投递一次

【2】标记为PERSISTENT的消息将使用暂存后再转发

【3】JMS提供了0到9的优先级,0的优先级最低

JMS提供两种消息传递模型:

点对点(PTP point-to-ponit)

发布/订阅(publish/subscribe)

4.MDB

MDB是用来转换处理基于消息请求的组件

MDB负责处理消息,而EJB同期则负责处理服务。

MDB通常实现MessageListener接口,在onMessage方法中处理消息。当容器检测到Bean守候的管道有消息到达时,容器调用onMessage()方法,将消息作为参数传入MDB.

八、数据存取中间件

1.开放数据库连接

(1)ODBC

ODBC(open database connectivity):是一种用来在关系或非关系型数据库管理系统中存取数据的标准应用程序数据接口。

包括四个主要部分

【1】应用程序接口

屏蔽不同ODBC数据库驱动器之间函数调用的差别,提供统一的SQL编程接口 

【2】驱动器管理器

为应用程序装载数据库驱动器

【3】数据库驱动器

实现ODBC的函数调用,提供对特定数据源的SQL请求。

【4】数据源

由用户想要存取的数据以及与它相关的操作系统DBMS 组成

(2)OLE DB

OLE DB(Object Link and embed)对象连接与嵌入,是微软战略性的通向不同的数据源的低级应用程序接口。包括ODBC的结构化语言能力还有其他非SQL数据类型的通路。

主要对象:数据源对象,阶段对象,命令对象和行组对象

评价:

非常好,但是太底层化,使用复杂。

(3)ADO

为了解决OLE DB的问题,以COM技术封装OLE-DB为ADO对象

ADO是存取数据源的COM组件。允许开发人员编写房屋内数据的代码而不用关心数据库是如何实现的。

(4)JDBC

ODBC只支持关系数据库并且只以C/C++的形式提供服务。

JDBC是JAVA与数据库的接口规范

JDBC中的类:数据库连接、SQL指令、结果集、数据库元数据 

优势:

【1】易于理解和使用,移植性好

【2】完全遵循JAVA语言的优良特性

【3】程序员在短时间内即可掌握JDBC驱动程序架构,容易上手。

【4】采用JDBC只需要选区适当的JDBC数据库驱动程序,无需额外配置  

2.对象关系映射ORM

ORM:通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动化持久化到关系数据库中

即在关系型数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值