中间件 (Middleware) 是一种软件,支持在分布式网络中的应用或应用组件之间建立一种或多种通信或连接。 中间件支持更轻松地将那些设计为不能相互连接的应用连接起来,并支持采用智能方式进行连接,从而简化了应用开发流程,加快了产品上市速度。
中间件有很多种。 一些中间件专注于一种类型的通信,如消息代理或事务处理监控器。 另一些中间件则为构建特殊类型的应用提供所需的全部通信和连接功能,如 Web 应用服务器或移动设备中间件。 还有一些中间件则充当中央集成中心,连接企业中的所有组件,如基于云的集成平台即服务 (iPaaS) 产品或企业服务总线 (EBS)。 (甚至还有一些中间件支持开发者构建自己的定制中间件。)
中间件之所以得此名称,是因为第一个中间件通常在应用前端或客户端与后端资源(例如数据库、大型机应用或专用硬件设备)之间充当中介的作用,客户端可以从这里请求数据。
但如今的中间件已经超出了这个范畴。 例如,门户中间件同时包括应用前端和后端连接工具;数据库中间件通常包含自己的数据存储库。 正如您将在下面读到的那样,一类新兴的中间件可以利用容器技术帮助开发人员连接到分布在多个云端的资源。
在最基本的层面上,中间件使开发人员能够构建应用,而不必在每次需要连接到应用组件(服务或微服务)、数据源、计算资源或设备时都创建自定义集成。
中间件实现这一目标的方式是提供服务,以便不同的应用和服务能够使用通用的消息传递框架进行通信,如 JSON(JavaScript 对象表示法)、REST(具象状态传输)、 XML(可扩展标记语言)、SOAP(简单对象访问协议)或 Web 服务。 通常,中间件还提供相关服务,使得用 Java、C++、PHP 和 Python 等多种语言编写的组件能够相互通信。
除了提供这种节省工作量的互操作性之外,中间件还包括能为开发人员提供帮助的服务
中间件有多种不同的类型。 有些中间件专注于特定类型的连接,有些专注于特定的应用、应用组件和设备;有些组合中间件则专注于特定的开发任务。 一些最知名和最常用的中间件软件类型包括:
面向消息的中间件 (MOM):支持使用不同消息传递协议的应用组件进行通信,以交换消息。 除了在应用之间转换消息外,MOM 还管理消息的路由,以便消息始终以正确的顺序抵达适当的组件。 MOM 的示例包括消息队列和消息代理。
远程过程调用 (RPC) 中间件:使一个应用能够触发另一个应用中的一个过程,它们可能运行在同一台计算机上,也可能运行在不同的计算机或网络上,但就好像是同一台计算机上的同一应用的一部分。
数据或数据库中间件:可以简化后端数据库的访问与交互。 通常,数据库中间件是某种形式的 SQL 数据库服务器。
API(应用编程接口)中间件:为开发人员提供了用于为应用创建、公开和管理 API 的工具,以便其他开发人员能够与之建立连接。 某些 API 中间件中包含货币化 API 的工具,允许其他组织有偿使用它们。 API 中间件的示例包括 API 管理平台、API 网关和 API 开发者门户。
对象请求代理 (ORB) 中间件:在发出请求的应用对象或组件与分布式网络上处理该请求的另一个对象或组件之间充当代理。 ORB 采用通用对象请求代理架构 (CORBA),允许一个软件组件向另一个软件组件发出请求,而无需知道该组件的托管位置,或者其 UI 的外观,“代理”会在交换过程中处理这些信息。
事务处理中间件:提供相关服务,以支持跨分布式网络执行数据事务处理。 最著名的事务处理中间件就是事务处理监控器 (TPM),它可以确保事务处理逐步有序进行,即执行数据交换、按需添加/更改/删除数据等等,直到完成。
异步数据流中间件:复制存储在中间存储库中的数据流,支持多个应用之间的数据共享。 Apache Kafka 是最广为人知的实时数据流中间件之一。
设备中间件:提供一组集中的集成和连接功能,用于为特定的移动操作系统开发应用。
门户中间件:提供工具和资源,用于将来自各种相关应用的内容和功能集成在"单一窗格"或单个屏幕上,以创建单个复合应用。
机器人中间件:可简化将来自多个制造商和位置的机器人硬件、固件和软件相集成的流程。
企业应用集成中间件支持企业建立企业集成中心,这是用于连接扩展企业中所有应用、应用组件、业务流程和后端数据源的标准化方法。
直到大约十年前,最流行的企业应用集成中间件还是企业服务总线 (ESB),它在面向服务的架构 (SOA) 中充当集成中心。 而如今,企业可利用 iPaaS 跨本地、私有云和公有云环境来连接应用、数据、流程和服务,避免了与购买并在自己的数据中心安装、管理和维护集成中间件(及其运行所用硬件)相关的工作和成本。
平台中间件(或应用平台中间件)可以通过为应用或业务逻辑提供运行时托管环境,如 Java 运行时环境 (Java RE) 或容器,或两者兼有,进一步支持应用开发并加速应用交付。 平台中间件可以包括或合并企业应用服务器、Web 服务器和内容管理系统,以及上面列出的其他中间件类型。
云原生是一种利用基本云计算技术的应用开发方法,其目的是跨本地、私有云或公有云环境提供一致的开发、部署和管理。
实际上,如今的云原生应用就是基于微服务而构建的应用,它们部署在使用 Kubernetes 编排的容器中。 微服务是松散耦合的应用组件,它们包含自己的堆栈,可以彼此独立地部署和更新,并使用 REST API、消息代理和事件流组合彼此通信。 容器是轻量级的可执行文件,用于将微服务等应用代码与在任何传统 IT 或云基础架构上运行该代码所需的操作系统库和依赖项打包在一起。
这些技术和相关技术共同创建了一次开发、随处部署的强大平台,用于交付新的混合云应用,并使传统的遗留系统现代化,以便在云端使用。 但它们同时也导致开发环境更加复杂,其中包含更多的软件应用、数据源、编程语言、工具和分布式系统。
中间件可以消除其中的一些复杂性,但是,使用常规中间件运行容器化应用会增加其本身的复杂度,并增加了容器旨在消除的基础架构开销。 为此,Cloud Foundry(链接位于 IBM 外部)和 Red Hat Open Shift 等常用的云应用开发平台经过发展演进,将容器化中间件(模块化的中间件)纳入其中,以便只将所需的连接功能打包到容器中。