中间件的分类
思索
中间件的产品种类很多,根据中间件在系统中所起的作用和采用的技术不同,大致划分为以下五种:
数据库中间件(DM,Database Middleware)
数据库中间件在所有的中间件中是应用最广泛,技术最成熟的一种。一个最典型的例子就是ODBC,ODBC是一种基于数据库的中间件标准,它允许应用程序和本地或者异地的数据库进行通信,并提供了一系列的应用程序接口API,当然,在多数情况下这些API都是隐藏在开发工具中,不被程序员直接使用。有过实际编程经验的朋友都知道,在写数据库程序的时候,只要在ODBC中添加一个数据源,然后就可以直接在自己的应用程序中使用这个数据源,而不用关系目标数据库的实现原理、实现机制,甚至不必了解ODBC向应用程序提供了哪些应用程序接口API。
不过在数据库中间件处理模型中,数据库是信息存贮的核心单元,中间件完成通信的功能,这种方式虽然是灵活的,但是并不适合于一些要求高性能处理的场合,因为它需要大量的数据通信,而且当网络发生故障时,系统将不能正常工作。所谓有得必有失,就是这个道理,系统的灵活性提高是以处理性能的降低为代价的。
远程过程调用中间件(RPC, Remote Procedure Call)
远程过程调用是另外一种形式的中间件,它在客户/服务器计算方面,比数据库中间件又迈进了一步。它已经存在了相当长的时间,而且沿用了大多数程序员都非常熟悉的编程模式-程序员就像调用本地过程一样在程序中调用远程过程。启动远程过程的运行,然后将运行结果返回给本地程序。不但如此,远过程调用还可以将程序的控制传递到远端的服务器当中去。
RPC的灵活特性使得它有比数据库中间件更广泛的应用,它可以应用在更复杂的客户/服务器计算环境中。远过程调用的灵活性还体现在它的跨平台性上面,它不仅可以调用远端的子程序,而且这种调用是可以跨不同操作系统平台的,而程序员在编程时并不需要考虑这些细节。
RPC也有一些缺点,主要是因为RPC一般用于应用程序之间的通信,而且采用的是同步通信方式,因此对于比较小型的简单应用还是比较适合的,因为这些应用通常不要求异步通信方式。但是对于一些大型的应用,这种方式就不是很适合了,因为此时程序员需要考虑网络或者系统故障,处理并发操作、缓冲、流量控制以及进程同步等一系列复杂问题。
面向消息中间件(MOM,Message Oriented Middleware)
消息中间件的优点在于能够在客户和服务器之间提供同步和异步的连接,并且在任何时刻都可以将消息进行传送或者存储转发,这也是它比远程过程调用更进一步的原因。另外消息中间件不会占用大量的网络带宽,可以跟踪事务,并且通过将事务存储到磁盘上实现网络故障时系统的恢复。当然和远程过程调用相比,消息中间件不支持程序控制的传递,不过这种功能和它的优势比起来却是无关紧要的。
消息中间件适用于需要在多个进程之间进行可靠的数据传送的分布式环境。
基于对象请求代理(ORB,Object Request Broker)的中间件
对象请求代理是近年来才发展起来的一项新技术,它可以看作和编程语言无关的面向对象的RPC应用,被视为从面向对象过渡到分布式计算的强大推动力量。从管理和封装的模式上看,对象请求代理和远过程调用有些累死,不过对象请求代理可以包含比远过程调用和消息中间件更复杂的信息,并且可以适用于非结构化的或者非关系型的数据。
目前有两种对象请求代理的标准,分别是CORBA和DCOM,这两种标准是相互竞争的,而且两者之间有很大的区别,这在一定程度上阻碍了对象请求代理中间件的标准化进程。
事务处理中间件(TPM,Transaction Processing Monitor)
事务处理中间件是一种复杂的中间件产品,是针对复杂环境下分布式应用的速度和可靠性要求而实现的。它给程序员提供了一个事务处理的API,程序员可以使用这个程序接口编写高速而且可靠的分布式应用程序-基于事务处理的应用程序。
事务处理中间件向用户提供一系列的服务,如应用管理,管理控制,已经应用程序间的消息传递等。常见的功能包括全局事务协调、事务的分布式两段提交、资源管理器支持、故障恢复、高可靠性、网络负载平衡等等