230

我最近听到很多人在谈论中间件,但是中间件的确切定义是什么?当我研究中间件时,我发现了很多信息和一些定义,但是在阅读这些信息和定义时,似乎大多数“商品”都在某个东西的中间。那么,所有的东西都是中间件吗?

或者你有一个不是中间件的例子吗?

4

15 回答 15

248

假设您的公司生产 4 种不同的产品,您的客户有另外 3 种不同的产品来自另外 3 家不同的公司。

有一天,客户想,我们为什么不将我们所有的系统集成到一个庞大的系统中呢?十分钟后,他们的 IT 部门说这需要 2 年时间。

你(聪明的开发者)说,我们为什么不把所有不同的系统整合起来,让它们一起工作呢?客户经理盯着你……你继续说,我们将使用中间件,我们将研究所有不同系统的输入/输出,它们使用的资源,然后选择合适的中间件框架。

仍然向非技术经理解释
中间件框架在中间,第一个系统将产生 X 的东西,系统 Y 和 Z 将消耗这些输出等等。

于 2010-05-25T13:15:25.360 回答
102

中间件是一个非常模糊的术语。在一种情况下什么是“中间件”不会在另一种情况下出现。一般来说,您可以期望被归类为中间件的东西具有以下特征:

  • 主要(通常是专门的)软件;通常不需要任何专门的硬件。

  • 如果它存在,依赖它的应用程序将不得不将它合并为应用程序的一部分,并且会经历很多重复。

  • 几乎可以肯定连接两个应用程序并在它们之间传递数据。

您会注意到这与操作系统的定义几乎相同。因此,例如,可以将 TCP/IP 堆栈或缓存视为中间件。但是您的操作系统也可以提供相同的功能。事实上,中间件可以被认为是操作系统的一个特殊扩展,特定于一组依赖它的应用程序。它只是提供更高级别的服务。

中间件的一些例子:

  • 分布式缓存
  • 消息队列
  • 事务监视器
  • 包重写器
  • 自动备份系统
于 2010-05-25T13:15:25.673 回答
23

维基百科有一个很好的解释:http ://en.wikipedia.org/wiki/Middleware

它开始于

中间件是连接软件组件或应用程序的计算机软件。该软件由一组服务组成,这些服务允许在一台或多台机器上运行的多个进程进行交互。

什么是中间件给出了几个例子。

于 2010-05-25T13:06:55.427 回答
20

我知道(至少)三种不同的定义

  • 在商业计算中,中间件是应用程序和服务之间的消息传递和集成软件

  • 在游戏中,中间件可以说是第三方提供的任何东西

  • 在(某些)嵌入式软件系统中,中间件提供应用程序使用的服务,这些服务由硬件抽象层提供的功能组成——它位于应用程序层和硬件抽象层之间。

于 2010-05-25T13:13:17.167 回答
18

简单地说,中间件是一个软件组件,它提供将不同系统集成在一起的服务。

在复杂的企业环境中,当您需要将两个或多个企业系统集成在一起以相互通信时,会遇到许多挑战。通常这些系统不理解彼此的语言,因为它们是在不同的平台上使用不同的语言(如 C++、Java、Cobol 等)开发的。

所以这里出现了中间件软件,它提供如下服务

  • 将消息格式从一个应用程序转换为另一个应用程序,
  • 除了注意安全之外,路由和丰富消息,
  • 加密,
  • 验证和
  • 对这些消息应用不同的业务规则。

中间件的典型示例是ESB产品,如 IBM 消息代理 (WMB/IIB)、WESB、Datapower XI50、Oracle Fusion、Mule 等。

因此,中间件主要位于服务消费应用程序和服务提供者应用程序之间,并帮助这些应用程序相互通信。

于 2016-07-22T22:53:54.843 回答
14

中间件是关于我们的应用程序如何响应传入请求的。中间件查看传入的请求,并根据此请求做出决定。我们只能使用中间件来构建整个应用程序。例如,ASP.NET 是一个包含以下主要 HTTP 中间件组件的 Web 框架。

  1. 异常/错误处理
  2. 静态文件服务器
  3. 验证
  4. MVC 中间件

如上图所示,ASP.NET 中有各种中间件组件接收传入的请求,并将其重定向到 C# 类(在本例中为控制器类)。

于 2016-09-04T14:53:20.277 回答
11

中间件是用于“粘合”单独的、通常是复杂的和已经存在的程序的软件的通用术语。一些经常与中间件连接的软件组件包括企业应用程序和 Web 服务。

于 2016-03-03T05:03:08.583 回答
9

Web 应用程序开发中有一个通用定义是(我正在制定这个措辞,但它似乎很合适):旨在修改 HTTP 请求和/或响应但不(通常)提供响应的组件整体而言,旨在链接在一起以在请求处理期间形成行为变化的管道。

中间件通常实现的任务示例:

  • Gzip 响应压缩
  • HTTP 身份验证
  • 请求记录

这里的关键点是,这些都不完全负责响应客户端。相反,每个都以某种方式改变行为作为管道的一部分,使实际响应来自序列中稍后的某些东西(管道)。

通常,中间件在某种“路由器”之前运行,它检查请求(通常是路径)并调用适当的代码来生成响应。

就个人而言,我讨厌“中间件”这个词,因为它的通用性,但它是常用的。

这是一个特别适用于 Ruby on Rails 的附加说明。

于 2017-12-20T03:31:59.597 回答
7

Middleware介于 Web 应用程序和 Web 服务之间,它们本身无法通信并且通常用不同的语言/框架编写。

一个这样的例子是OWIN middleware for .NET环境,在人们被迫在一个名为IIS. owin 开发后,增加了在 IIS 和自身主机中托管的能力,在 IIS 中只是添加了对 Owin 作为接口的支持。也成为可能host .NET web apps on Linux via Mono,这再次增加了对 Owin 的支持。

它还增加了创建能力Single Page Applications,Owin 处理Http请求/响应上下文,所以在 owin 之上,您可以authentication/authorization通过 OAuth2 添加逻辑,例如,您可以配置中间件来注册一个包含用户身份验证逻辑的类(例如 OAuth2 实现)或包含如何管理 http 请求/响应消息的逻辑的类,这样您就可以使一个应用程序通过不同的数据格式(如 json、xml 等,如果您以 Web 为目标)与其他应用程序/服务进行通信。

于 2018-05-19T09:18:45.280 回答
3

中间件的一些示例:CORBA、远程方法调用 (RMI)、...

上面提到的示例都是允许您处理不同进程之间的通信的软件(在同一台机器上运行或分布在例如互联网上)。

于 2010-05-25T13:12:09.293 回答
2

根据我自己的网络工作经验,中间件是用户(网络浏览器)和后端数据库之间的东西。是软件接受了用户输入的内容(例如:iPad 订单,执行了一些神奇的业务逻辑,即检查是否有足够的 iPad 可用于填写订单)并更新后端数据库以反映这些更改。

于 2010-05-25T13:16:16.567 回答
2

它只是一个软件或工具,您的应用程序在其上执行并在高可用性、可扩展性、与其他软件或系统集成方面具有重新应用程序的功能,而无需您为应用程序级别的代码更改而烦恼。

例如:您的应用程序运行的操作系统需要更改 IP,您不必在代码中担心它,它是您可以简单更新配置的中间件堆栈。

示例 2:您在运行时内存分配方面遇到问题,并且觉得您的应用程序使用量增加了,除非您的代码中有错误或瓶颈,否则您不必担心太多,这很容易通过调整中间件软件配置来实现您的应用程序运行的。

示例 3:您有多个不同的软件,您需要它们相互通信或以所有系统都可以理解的通用格式发送数据,那么这就是中间件系统派上用场的地方。

希望提供的信息有所帮助。

于 2017-07-17T07:31:59.930 回答
1

它是网络中分布式计算系统每一侧的操作系统和应用程序之间的软件层。事实上,它连接异构网络和软件系统。

于 2019-01-05T19:22:50.037 回答
1

如果我没记错的话,在软件应用程序框架中,基于上下文,您可以考虑middleware以下可以组合的角色,以便在用户request和应用程序之间执行某些活动response

  • 适配器
  • 消毒剂
  • 验证器
于 2019-10-03T05:22:58.680 回答
0

我一直认为它是我必须安装的最古老的软件。整个应用程序使用了一个 Web 服务器、一个数据库服务器和一个应用程序服务器。Web 服务器是数据和应用程序之间的中间件。

于 2016-04-12T01:12:23.770 回答