如何理解中间件?

178 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

引言

我最初接触中间件是大二的时候学习Java Web,看到中间件的定义是这样的:“中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。”

从Tomcat的角度理解,它是一种应用服务器中间件,位于客户浏览器和数据库之间,为应用程序提供业务逻辑的代码。应用服务器通过组件的应用程序接口将商业应用逻辑曝露给客户端的程序,同时为应用提供运行平台和系统服务,并管理对数据库的范围。同时应用服务器还具有高可用性监视、集群化、负载平衡、集成冗余和高性能分布式应用服务,以及对复杂的数据库访问的支持等功能。

也就是可以理解成一种封装好了,拿来即用的软件程序。在web开发的背景下,我们通常理解“中间件”的意思是“包装原始应用并添加一些额外的功能的应用的一部分”。

我的理解中,中间件是上层和下层之间相对的中间层,中间件屏蔽了下层的复杂性或者局限性,MySQL其实也是一个应用广泛的中间件,而在MySQL与应用程序的service之间可能还会加一层中间件。

首先,一个好的中间件有一个责任就是可插拔并且自足。这就意味着你可以在接口级别嵌入你的中间件他就能直接运行。它不会影响你编码方式,不是框架,仅仅是你请求处理里面的一层而已。完全没必要重写你的代码,如果你想使用中间件的一个功能,你就帮他插入到那里,如果不想使用了,就可以直接移除。

纵观Go语言,中间件是非常普遍的,在标准库net/http中的函数StripText或者TimeoutHandler就是我们要定义和的中间件的样子,处理请求和响应的时候把他们包装你的handler,并处理一些额外的步骤。

什么是中间件?

中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。目前,它并没有很严格的定义,但是普遍接受IDC的定义:中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。

从这个意义上可以用一个等式来表示中间件:中间件=平台+通信,这也就限定了只有用于分布式系统中才能叫中间件,同时也把它与支撑软件和实用软件区分开来。

简而言之,中间件是基于TCP/IP协议,遵循一定规范的。

中间件的特性

互通性、跨平台性、持久性、高可扩展性。

背后遵循TCP/IP协议,但有时并不能满足业务场景的需求,因此要在TCP/IP协议的基础上构建自己的协议,比如AMQP协议,AMQP协议是rabbitMq的默认协议,包括在信息头中增加mark,消息内容标签、队列名、交换机名、ip、连接对象内存的一些信息。

中间件的作用

屏蔽操作系统的复杂性,屏蔽技术之间的局限性,使框架更加灵活。

什么时候使用中间件

选择中间件的时候,一定是业务的驱使,项目的驱动,一定要思考到底要不要使用,不要盲目的选择与跟从,如果使用不当,则会造成学习成本的浪费、人员结构的复杂化、维护和服务器成本的加剧。