中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处在操作系统、网络和数据库之上,应用软件的下层,也有人认为它应该属于操作系统中的一部分。
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。这些服务程序或软件具有标准的程序接口和协议。针对不同的操作系统和硬件平台,它们可以有符合接口和协议规范的多种实现。中间件为处于其上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。中间件通常都是用 C++ 语言以面向对象的技术来实现的,但是它的特性已超出面向对象的表达能力,由于它属于可重用构件,目前趋向于用构件技术来实现。然而,中间件要涉及软件的所有标准、规范和技术,它有更多的内涵,因为它包括平台功能,自身具有自治性、自主性、隔离性、社会化、激发性、主动性、并发性、认识能力等特性,是近似于 Agent(代理)的结构。
中间件一般具有如下的一些特点:
1、满足大量应用的需要;
2、运行于多种硬件和操作系统平台;
3、支持分布计算,提供跨网络、硬件和操作系统平台的透明性的应用或服务的交互;
4、支持标准的协议;
5、支持标准的接口。
世界著名的咨询机构 Standish Group 在一份研究报告中归纳了中间件的十大优越性:
1、缩短应用的开发周期;
2、节约应用的开发成本;
3、减少系统初期的建设成本;
4、降低应用开发的失败率;
5、保护已有的投资;
6、简化应用集成;
7、减少维护费用;
8、提高应用的开发质量;
9、保证技术进步的连续性;
10、增强应用的生命力。
具体来说,首先,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少了程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。
中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也有系统的维护、运行和管理的工作量的减少,还减少了计算机总体费用的投入。有调查报告显示,由于采用了中间件技术,应用系统的总建设费用可以减少 50%左右。在网络经济、电子商务大发展的今天,从中间件获得利益的不只是 IT 厂商,IT 用户也同样是赢家,并且是更有把握的赢家。
其次,中间件作为新层次的基础软件,其重要作用是将不同时期、在不同操作系统上开发的应用软件集成起来,彼此无缝地整体协调工作,这是操作系统、数据库管理系统本身做不了的。中间件的这一作用,使得在技术不断发展之后,人们以往在应用软件上的劳动成果仍然物有所用,节约了大量的人力、财力投入。
最后,由于标准接口对于可移植性和标准对于应用软件开发,中间件远比操作系统和网络服务更为重要,中间件提供的程序接口定义了一个相对稳定协议对于互操作性的重要性,中间件已成为许多标准化工作的主要部分。不管底层的计算机硬件和系统软件怎样更新换代,只要将中间件升级更新,并保持中间件对外的接口定义不变,应用软件几乎不需任何修改,从而节省了企业在应用软件开发和维护中的重大投资。
按照中间件在分布式系统中承担的职责不同,可以划分以下几类中间件产品。
(2)事务处理(交易)中间件。在分布式事务处理系统中,经常要处理大量事务,特别是 OLTP 中,每项事务常常要多台服务器上的程序按顺序协调完成,一旦中间发生某种故障,不但要完成恢复工作,而且要自动切换系统,达到系统永不停机,实现高可靠性运行。要使大量事务在多台应用服务器上能实时并发运行,并进行负载平衡的调度,实现与昂贵的可靠性机和大型计算机系统同等的功能,为了实现这个目标,要求中间件系统具有监视和调度整个系统的功能。目前主流的交易中间件有BEA 的 Tuxedo、EasyNet交易中间件等。
(3)数据存取管理中间件。在分布式系统中,重要的数据都集中存放在数据服务器中,它们可以是关系型的、复合文档型、具有各种存放格式的多媒体型,或者是经过加密或压缩存放的,该中间件将为在网络上虚拟缓冲存取、格式转换、解压等带来方便。主流的数据库中间件有Hadoop、Hive、Spark、Doris、Cobar、DRDS、MyCat、Atlas、OneProxy、Zebra,Sharding-JDBC等。
(4)Web 服务器中间件。浏览器图形用户界面已成为公认规范,然而它的会话能力差、不擅长做数据写入、受 HTTP 协议的限制等,就必须进行修改和扩充,形成了 Web 服务器中间件,如 SilverStream 公司的产品。
(5)安全中间件。一些军事、政府和商务部门上网的最大障碍是安全保密问题,而且不能使用国外提供的安全措施(如防火墙、加密、认证等),必须用国产产品。产生不安全因素是由操作系统引起的,但必须要用中间件去解决,以适应灵活多变的要求。
(6)跨平台和架构的中间件。当前开发大型应用软件通常采用基于架构和构件技术,在分布式系统中,还需要集成各节点上的不同系统平台上的构件或新老版本的构件,由此产生了架构中间件。功能最强的是 CORBA,可以跨任意平台,但是过于庞大;JavaBeans 较灵活简单,很适合于做浏览器;COM+模型主要适合 Windows 平台,在桌面系统已广泛使用。
(7)专用平台中间件。为特定应用领域设计领域参考模式,建立相应架构,配置相应的构件库和中间件,为应用服务器开发和运行特定领域的关键任务(如电子商务、网站等)。
(8)网络中间件。它包括网管、接入、网络测试、虚拟社区、虚拟缓冲等。
现代的中间件已经做了很多的融合,有些中间件的作用可能跨越了几类中间件。例如:RabbitMQ既可用于消息中间件,也可以用于事务;Kafka既可用与消息,也可应用日志和事务处理等。在中间件选型时,首先要明确短期、中长期的需求,根据需求,列出一些重点考虑的需求特性,根据这些特性,列出一些测试用例,在选型时,用这些测试用例对入围产品进行测试,根据测试结果来评判各个产品的优劣以及与需求的匹配程度。