不会还有人不知道中间件吧?

7,985 阅读14分钟
常用中间件
常用中间件

引言

中间件(middleware)一词每天都被不同的人群所提及,中间件的产品也大量出现在软件市场,但中间件的定义却一直比较模糊,导致中间件的分类也不很统一。也许正因为如此,才使人们不断地设计和开发新的产品,并冠以中间件的标签,推动着中间件的内涵和市场不断地向前发展。

相信大家看这篇文章的初心就是单纯想了解一下 中间件是啥?能干啥?我为什么要学它?公司中为啥要有做中间件的程序员?我平时学的dubbo等 属于中间件的什么类型?中间件有分类吗?这个答案在网络上一直没有一个准确的回答,这篇文章带你了解 中间件

中间件是什么?

应用中间件(Application Middleware),又名中间件,一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。

中间件是为应用提供通用服务和功能的软件。数据管理、应用服务、消息传递、身份验证和 API 管理通常都要通过中间件。

中间件可以帮助开发人员更有效地构建应用。它就如同是应用、数据与用户之间的纽带

对于具有多云和容器化环境的企业而言,中间件可以助您大规模、经济高效地开发和运行应用

中间件能干啥?

中间件的作用简单来说就是试图通过屏蔽各种复杂的技术细节使技术问题简单化。

    1. 中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。所以说中间件带给应用系统的,不只是开发的简便、开发周期的缩短,同时也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。
    1. 中间件作为新层次的基础软件,其重要作用是将不同时期、在不同操作系统上开发的应用软件集成起来,彼此像一个天衣无缝的整体协调工作,这是操作系统、数据库管理系统本身做不了的。

中间件在应用开发中担任的角色

经过精心设计,现代业务应用可以在本地或跨云端大规模运行。为了构建这些应用,开发人员需要一种具备统一基础功能的应用环境。中间件正是打造这种环境的关键。

我们可以将这些功能分为四层,外加相应的工具:

容器层

中间件的这一层将以统一的方式管理应用生命周期的交付。它提供带有 CI/CD 的 DevOps 能力、容器管理功能以及服务网格功能。

运行时层

该层包含了自定义代码的执行环境。中间件可以为高度分布式云环境(例如微服务)、内存中缓存(用于快速访问数据)和消息传递(用于快速数据传输)提供轻量级运行时和框架。

集成层

集成中间件可提供相关服务,以通过消息传递、集成和 API 来连接自定义与购买的应用及 SaaS 资产,从而形成功能正常的系统。此外,它还可以提供内存数据库和数据缓存服务、数据/事件流以及 API 管理功能。

流程自动化和决策管理层

这是开发中间件的最后一层,旨在强化关键智能,实现优化和自动化,以及加强决策管理。

工具

除了上述四层中间件之外,还有相应的应用开发工具。它允许团队使用预设的模板和容器来构建应用,并促进了有效的代码共享和联合开发。这些工具可在本地和云端提供连贯一致的应用开发和交付体验。

中间件特点

  1. 应用支撑

中间件的最终目的是解决上层应用系统的问题,而且也是软件技术发展到今天对应用软件提供最完善彻底的解决方案。现代面向服务的中间件在4个方面形成了很高地应用支撑能力,分别为软件的结构、模型、开发方法以及互操作,而要最终解决软件的灵活应变问题、效率问题、质量问题、互操作问题这四大问题,需要在软件技术的内在结构、架构层面进行思考。

  1. 耦合关系

中间件基于SOA架构,在松耦和解耦过程中演变成了境界。而传统软件将软件之中核心三部分数据转换、网络连接和业务逻辑所有的都耦合在一个整体,产生为铁板一块的软件,然后动一点而动全身,这样的软件就很难适应市场的需求。而分布式对象技术可以分离连接逻辑,消息中间件异步处理连接逻辑,形成了很大的灵活性。中间件分离分布式对象与消息代理的数据转换。SOA架构以服务的封装,解耦实现了业务逻辑、数据转换与网络连接等。

  1. 互操作性

传统中间件在软件的互操作方面,通过标准化的API完成了同类系统之间的调用互操作,但是连接互操作离不开原有的特定的访问协议,比如CORBA用于的IIOP,JAVA用于的RMI等。而SOA以支持Internet、标准化及操作系统无关的SOAP协议完成了连接互操作。并且服务的封装一般使用XML协议,它有自定义及自解析的特性,因此基于SOA的中间件能够完成语义互操作。

  1. 软件复用

软件复用也称为软件的重用,是指在一定范围内不修改或者略有修改都属于重复使用。其实说白了其意思就是不断提升抽象级别,然后扩展复用的范围。最早使用的复用技术一般是子程序,自从发明子程序之后,人们就可以在不同系统之间进行软件复用。但子程序只是最原始的复用,因为这种复用范围只是在一个可执行程序内中的复用,静态开发期的复用,一旦子程序被修改,那么就需要重新对所有调用这个子程序的程序进行编译、测试以及发布。

  1. 平台化

我们所说的平台是指能够独立运行并且自主存在的,能支撑上层系统和应用提供运行所依赖的环境。显然,不是所有的系统或者应用都可以称之为平台的。中间件是一个平台,因此中间件是必须独立存在,它在操作的系统软件,为上层的网络应用系统提供一个运行支撑环境,同时围绕标准的接口与API来隔离系统,完成其独立,也就是平台性。总的来说,中间件在完整业务复用、灵活业务组织方面的发展趋势集中体现在服务化,其核心技术是提升IT基础设施的业务敏捷性。中间件因此将成为SOA的主要实现平台。

中间件的分类

从广义上讲,中间件涵盖了从 Web 服务器,到身份验证系统,再到消息传递工具等一切内容。以下是现代化开发中一些常见的中间件用例。 红帽官网的这几张图完美解决了这个疑惑:

F0D56454-48E1-4B45-9427-9F3184F9B51D.jpeg 8E934E49-0444-470E-8FB5-1DF86B985577.jpeg FD9FD9C5-A321-4336-98A1-F62C940739D8.jpeg

看到这里应该就可以解决大家的大多数问题了,下面就是在百度百科上找的分类,我个人感觉写的大同小异!!!

目前,针对不同的应用涌现出各具特色的中间件产品。从不同的角度和层次对中间件有不同的分类。根据中间件在系统中所起的作用和采用的技术不同,可以把中间件大致划分为以下几种:

  1. 数据访问中间件(Data Access Middieware)

在分布式系统中,重要的数据都集中存放在数据服务器中,它们可以是关系型、复合文档型、具有各种存放格式的多媒体型,或者是经过加密或压缩存放的,数据访问中间件是在这种系统中建立数据应用资源互操作的模式,实现异构环境下的数据库联接或文件系统联接的中间件,从而为在网络上虚拟缓冲存取、格式转换、解压等带来方便。数据访问中间件在所有的中间件中是应用最广泛、技术最成熟的一种。一个最典型的例子就是ODBC,ODBC是一种基于数据库的中间件标准,它允许应用程序和本地或者异地的数据库进行通信,并提供了一系列的应用程序接口API,当然,在多数情况下这些API都是隐藏在开发工具中,不被程序员直接使用。不过在数据访问中间件处理模型中,数据库是信息存贮的核心单元,中间件完成通信的功能,这种方式虽然是灵活的,但是并不适合于一些要求高性能处理的场合,因为它需要大量的数据通信,而且当网络发生故障时,系统将不能正常工作。

  1. 远程过程调用中间件(RPC)

远程过程调用是另外一种形式的中间件,它在客户/服务器计算方面,比数据库中间件又迈进了一步。通过这种远程过程调用机制,程序员编写客户方的应用,需要时可以调用位于远端服务器上的过程。它的工作方式如下:当一个应用程序A需要与远程的另一个应用程序B交换信息或要求B提供协助时,A在本地产生一个请求,通过通讯链路通知B接收信息或提供相应的服务,B完成相关处理后将信息或结果返回给A。RPC的灵活特性使得它有比数据库中间件更广泛的应用,它可以应用在更复杂的客户/服务器计算环境中。远程过程调用的灵活性还体现在它的跨平台性方面,它不仅可以调用远端的子程序,而且这种调用是可以跨不同操作系统平台的,而程序员在编程时并不需要考虑这些细节。RPC也有一些缺点,主要是因为RPC一般用于应用程序之间的通信,而且采用的是同步通信方式,因此对于比较小型的简单应用还是比较适合的,因为这些应用通常不要求异步通信方式。但是对于一些大型的应用,这种方式就不是很适合了,因为此时程序员需要考虑网络或者系统故障,处理并发操作、缓冲、流量控制以及进程同步等一系列复杂问题。

  1. 面向消息中间件(MOM)

消息中间件能在不同平台之间通信,实现分布式系统中可靠的、高效的、实时的跨平台数据传输,它常被用来屏蔽掉各种平台及协议之间的特性,实现应用程序之间的协同;其优点在于能够在客户和服务器之间提供同步和异步的连接,并且在任何时刻都可以将消息进行传送或者存储转发,这也是它比远程过程调用更进一步的原因。另外消息中间件不会占用大量的网络带宽,可以跟踪事务,并且通过将事务存储到磁盘上实现网络故障时系统的恢复。当然和远程过程调用相比,消息中间件不支持程序控制的传递。消息中间件适用于需要在多个进程之间进行可靠的数据传送的分布式环境。它是中间件中唯一不可缺少的,也是销售额最大的中间件产品,目前在Windows2000操作系统中已包含了其部分功能。

  1. 面向对象的中间件

面向对象的中间件(Object Oriented Middieware)。当前开发大型应用软件通常采用基于组件技术,在分布系统中,还需要集成各节点上的不同系统平台上的组件或新老版本的组件;组件的含义通常指的是一组对象的集成,其种类有数百万种,但这些组件面临着缺乏标准而不能相互操作,各厂家的组件只能在各自的平台上运行。为此,连接这些组件环境的面向对象的中间件便应运而生。面向对象的中间件是对象技术和分布式计算发展的产物,它提供一种通讯机制,透明地在异构的分布计算环境中传递对象请求,而这些对象可以位于本地或者远程机器。在这些面向对象的中间件中,功能最强的是CORBA,可以跨任意平台,但是太庞大;JavaBeans较灵活简单,很适合于作浏览器,但运行效率差;DCOM模型主要适合Windows平台,已广泛使用。但是DCOM和CORBA这两种标准相互竞争,而且两者之间有很大的区别,这在一定程度上阻碍了面向对象中间件的标准化进程。当前国内新建系统实际上主要是UNIX(包括LINUX)和Windows,因此针对这两个平台建立标准的面向对象中间件是很有必要的。

  1. 事务处理中间件(TPM)

事务处理中间件是在分布、异构环境下提供保证交易完整性和数据完整性的一种环境平台;它是针对复杂环境下分布式应用的速度和可靠性要求而实现的。它给程序员提供了一个事务处理的API,程序员可以使用这个程序接口编写高速而且可靠的分布式应用程序——基于事务处理的应用程序。事务处理中间件向用户提供一系列的服务,如应用管理、管理控制、已经应用于程序间的消息传递等。常见的功能包括全局事务协调、事务的分布式两段提交(准备阶段和完成阶段)、资源管理器支持、故障恢复、高可靠性、网络负载平衡等等。

  1. 网络中间件

它包括网管、接入、网络测试、虚拟社区、虚拟缓冲等,也是当前研究的热点。 终端仿真/屏幕转换中间件 它的作用在于实现客户机图形用户接口与已有的字符接口方式的服务器应用程序之间的互操作。

本文使用 mdnice 排版