- 中间件已经成为构建网络分布式异构信息系统不可缺少的关键技术,与操作系统、数据库管理系统并列为基础软件体系的三大支柱。
- 一些典型的商务应用系统(分布式系统):
- 股票交易系统
- 银行应用系统
- 客户电话中心系统
- 采购系统
- 现代应用系统的基本特征:
- 分布
- 异构: 计算机硬件、操作系统、网络协议、数据库系统以及开发工具种类繁多,需考虑数据表示、调用接口、处理方式等诸多问题;
- 动态协作:参与协作的应用允许位置透明性、迁移透明性、负载平衡性等需求。
- 2层结构的缺陷:(服务器层,客户层)
- 典型的3层结构:(服务器层,中间层,客户层)
- 将业务逻辑放置在中间层可以提高系统的性能,使中间层的业务逻辑处理与数据层的业务数据紧密结合在一起,而无需考虑客户的具体位置。
- 添加新的中间层服务器能够满足新增客户机的需求,可以大大提高3层系统的可伸缩性。
- 将业务逻辑从客户端移到中间层,在客户层的应用程序与数据层的数据库之间增加了一层,这样客户端的应用程序可以独立于数据层的数据库。
- 将业务逻辑致于中间层,从而使业务逻辑集中到一处。而在2层方式下,业务逻辑被分散到所有的客户机上(除非使用存储过程)。这样做是不可取的,因为业务规则是动态变化的,而对于这些业务而言,规范又是强制性的,所以,将业务逻辑分散到整个客户层的客户机上会使实施过程变得非常困难。
- 大量的中间层中间件平台提供丰富的系统级服务,使得开发人员可以以更少的工作量开发出更复杂、可靠、高效的软件系统。
中间件的理解
- 操作系统的扩展-透明的通讯
- 胶水-连接(管理)组件
- 位于操作系统和应用软件之间的一个软件层,向各种应用软件提供服务,使不同的应用进程能在屏 蔽掉平台差异的情况下,通过网络互通信息。
- 发展:通讯-服务-领域解决方案
定义:中间件是介于应用系统和系统软件之间的一类软件
它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的
中间件的特性:
- 易用性
- 位置透明性:应用不必知道对方网络和应用的地址;不经重新编译,就可把一个应用从一台机器上转移到另一台机器
- 消息传输的完整性:消息不应丢失或重复
- 消息格式的完整性:消息格式不应被破坏
- 语言透明性:使用中间件的程序应能与另一个用不同语言编写的程序通信;如果用不同语言重写一个程序,其他程序应不受影响
中间件分类
- 远程过程中间件:Remote Procedure Call, RPC
- 消息中间件:Message-Oriented Middleware(MOM)
- 面向对象中间件:Object-Oriented Middleware
- 事务处理中间件(TP Monitor)
- 数据库中间件
- 其他分类:如安全中间件、网络中间件、防病毒中间件等
rpc调用的缺点:
- (1)客户端与服务器端需要同时在线;
- (2)客户端需要知道服务器端的调用接口,若调用接口发生改变,客户端需要做相应变化,如通过ODBC连接访问数据库,客户端需要知道远程数据库的类型,若类型发生改变,还需要重新装载相应的驱动程序。
- (3)操作过程中需要一直保持与服务器端的连接,直到操作结束。因而,
- (a)一旦连接中断,就意味着操作失败或数据丢失;
- (b)通常判断连接中断的时间较长,若信道的可靠性较差,容易造成连接中断,那么应用效率将严重低下;
- (c)服务器端在执行操作的过程中,并不涉及网上数据传输,但连接的保持占用信道,容易造成网络堵塞。
消息中间件工作原理
- 应用之间以一系列消息的方式进行通信。
- 在消息传递过程中,为了避免消息被丢失,消息被保存在消息队列中。
- 应用把消息发送到与接收者有关的队列中。消息传递机制保证将消息传送到目的地且只传送一次。
- 在消息传递过程中,应用之间不必建立联系,发送者仅需将消息放入到与接收者有关的队列中,而不 必关心接收者是否在线。
- 接收者仅需从自己的队列中提取消息即可。
组件的特性
- 组件是一个严格定义的可插入单元
- 组件将封装运用到了极限
- 组件通常在容器中进行管理
- 组件可以从容器中获得属性或服务
- 组件允许对所支持的接口进行动态发现和调用
常见的服务
- 命名服务
- 监视
- 持久性
- 安全性
- 事物
- 消息处理
- 分布式垃圾回收
- 资源管理
通信方式
- Socket
- RPC
- RMI
Socket
面对TCP/IP协议编程,普遍采用Socket(套接字)规范,即UNIX习惯的TCP/IP基本编程方法,由一组围绕Socket概念的函数调用支持,已经成为TCP/IP应用的标准手段。
RPC
RPC是一种逻辑上的协议,它可以使用Socket、Named和Pipe等更低级的协议完成通信任务。
RPC是在socket的基础上实现的,RPC比socket需要更多的条件假定,更多的系统资源。 RPC方法的基本原则是以模块调用的简单概念忽略通讯细节,让程序员不用关心C/S之间的通讯协议,集中精力对付实现过程。对于需要广泛应用和兼容的C/S应用,由于其应用平台的多样性和复杂性,可能在某些环境下不能提供对RPC编程方法的支持,这时必须知道通讯包的细节,用RPC获得简单性的前提已经被大大削弱。
RMI(远程方法调用)
就是对一个远程对象的远程接口中的方法进行调用,目的是要使运行在不同的计算机中的对象之间的调用表现得象本地调用一样,RMI应用程序包括两个独立程序:server 和client程序。
存根:存在于客户端
远程对象的本地映象:调用远程对象时,实际调用的是存根对象上的方法