在架构设计里,什么叫做“中间件”

发表于2017-05-31   745次阅读

在架构设计里,什么叫做“中间件”

“中间件” 这个词在架构设计中随处可见,那么什么才是“中间件”,她的确切定义是什么?通过这篇文章,帮大家理一理思路,争取理出一句话的解释。

对于中间件,维基百科(中文)是这样解释的:

中间件(英语:Middleware),又译中间件,是提供系统软件(这里指控制硬件的软件,多指操作系统)和应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,在现代信息技术应用框架如Web服务、面向服务的体系结构等中应用比较广泛。

这种解释听起来还是比较晦涩,似乎和我们平时感知到的的环境不太一样。因为我们现在的互利网架构都是处在分布式的环境中,遇到的更多情况是系统与系统之间的交互,很少能直接触达到底层操作系统。其实“中间件”这个概念诞生于单机时代,在这个期间,所谓的“中间”,指的就是在应用软件和操作系统中间,应用软件就是直接和用户打交道的软件,直接和业务相关,系统软件就是负责管理硬件的平台,那么,这个 “件”就是在他们中间用来起到数据传输、管理作用的软件,按照维基百科的说法,数据库软件,或者 Apache 、 Tomcat 这类的 Web 服务器都可以叫做“中间件”。

那么在我们现在所处的分布式的互联网架构时代,“中间件”更多的是指存在于业务系统之间、甚至是中间件系统之间的中间软件,用来降低系统之间的耦合性,以及进行数据传输等等,比如我们常用的缓存服务器 Redis,或者队列软件 ActiveMQ,就是这类的中间件。

对于中间件的解释,阿里云的一篇文章显得不那么学术,更接地气一些(详情点击这里):

中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统和用户的应用软件的中间。中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行和开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件,中间件是一类软件,中间件不仅要实现互联,还要实现应用之间的互操作;中间件是基于分布式处理的软件,最突出的特点是其网络通信功能。

从这个概念来看,我们平时接触到的绝大部分软件,比如zookeeper,hbase,memcached,RPC框架都可以看做中间件。

为了加深理解,举一个例子: 比如我要买房(业务层),一开始我去小区里去打听,看各个房主贴在自家窗户上贴出来的出售信息(底层),要想看房就需要和房主直接联系,就像我们架构设计的初级阶段,业务和底层往往都是耦合在一起的,但长期看,显然这样的方式效率很低,所以后来我找到了房产中介(中间件),他们有大量的房源信息,我不仅可以看本小区的房源信息,也可以看其他小区的房源,可选择的机会多了,看房效率也大大提高,在这里中介实现了买卖双方的解耦,所有的买卖流程(数据交互)都要通过中介进行,那么房产中介就可以看做一种“中间件”,业务方只需要关注自己的业务(买房),不需要去直接接触底层平台,通过中间代理就可以实现效率最大化。

总结下来,“中间”是一个相对概念,也是一个架构上的层次概念,“中间”可以是业务系统之间,也可以是基础系统之间,起到“中介”的作用,用于数据交换和管理。中间件可以做很多事情,但至少有两个“不做”的事情比较明确,中间件不负责业务逻辑,不负责底层的硬件逻辑,凡是在这之间的系统都可以理解成“中间件”。

扩展阅读: