中间件到底是什么?


202

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

还是您有一个非中间件商品的示例?

Answers:


219

假设您的公司生产4种不同的产品,而您的客户又有3种不同的公司提供3种不同的产品。

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

您(明智的开发人员)说,为什么我们不仅仅集成所有不同的系统,并使它们在同一个环境中协同工作?客户经理凝视着您...您继续,我们将使用中间件,我们将研究所有不同系统的输入/输出,它们使用的资源,然后选择合适的中间件框架。

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


很好的例子!这样会不会变成一个异构环境?不均匀。
拉比亚·纳兹

中间件是数据(聚合+转换)组件。
外汇兑换

92

中间件是一个非常模糊的术语。在一种情况下,所谓的“中间件”将不在另一种情况下。通常,您可以期望分类为中间件的东西具有以下特征:

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

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

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

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

中间件的一些示例:

  • 分布式缓存
  • 消息队列
  • 交易监控器
  • 包重写器
  • 自动备份系统

20

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

它开始于

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

什么是中间件给出了一些示例。


1
我本人已经准备好了,但是维基百科似乎说所有东西都是中间件,或者您是否有一个不是中间件的例子
Michel 2010年

2
我将通过添加“ ...一台或多台本机无法进行交互的机器”来进行澄清。否则,请同意,该答案没有错。
jeriley 2010年

1
最好说“一个或多个无法自然交互的[过程]”。
fstuijt 2010年

19

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

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

  • 在游戏中,第三方完全可以提供中间件

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


15

简而言之,中间件是一个软件组件,提供将不同系统集成在一起的服务。

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

因此,图中出现了中间件软件,它提供了诸如

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

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

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


14

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

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

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


10

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


6

Web应用程序开发中有一个通用定义,该定义是(我正在写这句话,但似乎很合适):一个组件,旨在修改HTTP请求和/或响应,但通常不提供响应总体上讲,它被设计为链接在一起以形成请求处理过程中行为更改的管道。

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

  • Gzip响应压缩
  • HTTP认证
  • 请求记录

这里的关键点是,这些都不对响应客户负全部责任。相反,它们各自作为管道的一部分以某种方式更改行为,而使实际响应来自序列(管道)后面的某些事物。

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

就我个人而言,我讨厌术语“中间件”,因为它具有通用性,但它很常用。

这是专门适用于Ruby on Rails的附加说明。


6

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

一个这样的例子就是OWIN middleware for .NET环境,在没有人强迫人们在名为的Microsoft托管软件中托管Web应用之前,环境就是这样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等,如果您定位到网络)与其他应用程序/服务进行通信。


3

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

上面提到的示例都是所有软件,使您可以处理不同进程之间的通信(在同一台计算机上运行或分布在例如Internet上)。


2

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


2

它只是一个软件或工具,您的应用程序可以在该软件或工具上执行并具有与高可用性,可伸缩性有关的应用程序功能,可以与其他软件或系统集成,而无需担心应用程序级代码的更改。

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

示例2:您在运行时内存分配时遇到问题,并感到应用程序的使用有所增加,除非您的代码中有错误或瓶颈,否则您不需要做太多事情,可以通过在Windows上调整中间件软件配置来轻松实现您的应用程序将运行。

示例3:您有多个不同的软件,并且您需要它们彼此交谈或以所有系统都可以理解的通用格式发送数据,这就是中间件系统很方便的地方。

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



0

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


0

如果我没弄错,在软件应用程序框架,您可以根据上下文考虑middleware以下角色,可以将这些角色组合在一起,以便在用户request和应用程序之间执行某些活动response

  • 适配器
  • 消毒液
  • 验证器
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.