锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

一文读懂中间件

时间:2022-10-09 04:30:00 弹出传感器不可用无线传感器网络多目标关联覆盖

在码农的日常工作中, 中间件经常被提及,但人们对中间件的理解并不一致,导致了一些不必要的分歧和误解。中间件一词被用来描述各种软件产品。不同文献中有许多不同的中间件定义,包括操作系统(和/或网络)和应用程序之间的软件层,以及两个应用程序之间的粘合剂。它也被描述为支持与分布式软件模块化连接的重要集成工具。

7e9e2cdb738aac2b3a9b40bfc2676495.png

那么——

  • 什么是中间件?

  • 中间件有哪些类型?

  • 什么是典型的应用场景?

  • 中间件和XaaS 有什么异同?.

  • ...

中间件已成为分布式计算不可缺少的一部分。如果不涉及中间件,实际上不可能构建大规模的分布式应用程序。相比之下,试图构建一个没有中间件的分布式应用程序就像试图在没有操作系统的个人计算机上编写一个简单的应用程序。随着中间件的发展,其主要目标、设计、系统结构和特点也在演变。本文希望对中间件有一个系统的理解。

1. 中间件是什么?

系统通常分为两类: 软件和硬件。然而,两者之间还有一个额外的层,称为中间件,它是软件管道、操作、过程或操作系统和最终用户之间的应用程序。这个术语是在20世纪80年代初引入的。当时,它包含了复杂的软件解决方案,并通过软件和应用组件等新特性对剩余系统进行了现代化。最初,它只用于扩展网络层和应用层。然后,扩展到操作系统和网络层以上的一层,以及应用层以下的一层。这意味着中间件现在可以促进应用程序组件和分布式网络之间的通信。

CORBA 为应用集成和数据接口问题提供了一个很好的解决方案,从而产生了第一个具体的中间件定义。从那时起,中间件的术语就和 CORBA 纠缠在一起,并且在接下来的许多年里,如果有人提到中间件,那么每个人都会自动地认为是 CORBA。然而,随着时间的推移,出现了一些问题和限制,CORBA 不能为所有类型的分布式应用程序提供解决方案。此外,它对应用程序的支出也很高,这使得它不适用于网格、云、无线传感器网络和移动应用程序。因此,术语中间部分开始摆脱和 CORBA 为了支持不同的分布式计算/服务需求,开始覆盖更广泛的工具和服务。

中间件的一个可能定义是中间件是帮助应用程序与其他应用程序、网络、硬件和/或操作系统交互或通信的软件,提供服务质量(QoS)的工具”。该定义可能描述了大多数可用的中间件产品。2000年的一次IETF研讨会将中间件定义为传输TCP/IP)在层服务集之上,但在应用程序环境下的服务(即在应用程序级API之下)。在这种更具体的意义上,中间件可以描述为客户端服务器中的-,包括web支持应用程序开发和交付的服务器、应用服务器、内容管理系统和类似工具。通过中间件,程序员可以选择在不分析不同组件交互的情况下实现分布式解决方案,这是外观模式升级版的一些味道。

中间件是一种软件,在一个或多个应用程序和其他应用程序之间,或在一个或多个应用程序和基础设施之间发挥粘合剂、中介、代理、中间人、解释器、抽象提供者、合并者、集成器、推广者或连接器的作用。

在实际工作中,根据所在领域的不同,人们对中间件使用了不同的定义。例如,软件工程师和 DevOps 工程师将中间件描述为通过不同系统组件粘合软件的层。网络工程师会说,中间件是网络连接容错和错误检查的集成。换句话说,中间件被定义为通信管理软件。同时,数据工程师将中间件视为负责协调、触发、处理和发布各种来源数据的技术。由于没有统一的中间件定义,而沟通的前提是概念的统一,因此在谈论中间件时最好局限于特定的领域分类。

2. 中间件的分类

对于中间件,一般可以从架构视角和应用程序视角两个角度进行分类。架构视角适用于准确定义中间件,而不是每个系统结构的集成。

2.1 系统架构视角

从系统架构的角度来看,中间件以特定的方式集成到其异构系统环境中,每种中间件在其他软件之间都有不同的通信协议或操作模式。

2.1.1 面向过程的中间件

同步通信用于面向过程的中间件,其特点是使用客户端stub和服务器skeleton。客户端stub将过程参数转换为信息,并将信息发送到服务器。服务器skeleton将信息转换回参数,并将过程调用发送到处理其服务器应用程序。相反的过程一旦执行,就会发生。客户端stub检查错误,将结果发送到调用软件,然后挂起线程。

这类中间部件的优点是使用标准类型的名称服务、远程处理过程,即使网络问题也可以返回响应、支持异常,并可以管理各种类型的数据格式和异构系统级服务。缺点是不可伸缩,因为它不包含复制机制,不反射,是一个非常严格的过程,与过程紧密耦合。

2.1.2 面向对象的中间件

面向对象的中间部分结合面向对象的程序设计/设计原则,支持分布式对象的要求,并采用线程策略。对象中间件通过将来自多个客户端对象的类似请求分组到一个事务中来支持多个事务。首先,中间件使用客户对象调用远程对象的逻辑方法。本地ORB代理包装数据并将其传输给代理。代理可以联系多个数据源获取参考ID,收集数据,有时重新组织数据。服务器对象从代理接收信息,远程代理分析数据。数据提交给远程服务对象,在那里执行具体流程,返回结果与上述相反。

这种中间件的优点包括负载管理和对服务器对象的可伸缩性支持,解决了面向过程中间件的缺点。它还可以操作许多不同的数据类型、形式和状态,并且是分布式对象的自我管理器。缺点是执行前需要预链接,一些遗留系统需要包装代码。

2.1.3 面向消息的中间件

面向消息的中间件可分为两种类型:消息传输和消息发布/订阅。在消息传输类型中,应用程序使用客户端(一个或多个客户端)发送消息,服务器按预定顺序发送(FIFO、从队列中提取要求,基于优先级方案或负载平衡方法。中间件服务作为信息路由器,通常不与信息交互。

发布/订阅类型的工作原理略有不同,这是事件驱动的过程。如果客户想参与,首先添加消息总线。然后,根据其作为出版商、订阅者或两者的功能,在总线注册事件侦听器。出版商将事件通知发送到总线(在中间件服务器上)。然后,中间件服务注册的订户发出通知,说明数据可用。当订阅者向特定的出版商要求一些数据时,请求被包装在消息中并发送到总线。然后,总线向出版商发送请求数据。

2.1.4 基于组件或反射型中间组件

该组件被描述为与其他组件和应用程序一起操作执行特定功能的程序。这种类型的中间种组件配置。要么在施工过程中选择这些组件,要么在运行过程中选择它们。这种类型的中间部件有广泛的组件库和组件工厂,支持在多个平台上建造。由于分布式计算环境的变化(即资源可用性、新要求的协议和网络连接)一直在增加,因此需要组件或反射中间部件来增加QoS要求。

该中间件的优点是可配置,可在运行过程中完成,为满足大量应用程序的需要提供了极大的灵活性。

2.1.5 代理中间件

代理中间件由实体(对象、线程)、介质(一个代理与另一个代理之间的通信)和规则(代理通信协调规则)组成。介质可以是监视器、通信链路或更复杂的类型(如管道)。该规则确定了代理的交互性质,如同步或命名类型。代理中间件可以独立执行操作,以满足其设计目标,涵盖算法、负载平衡策略、资源适应性等广泛的战略基础。

代理中间件的优点是代理可以代表用户执行任务,并且可以根据周围环境进行广泛的适应策略。然而,这类中间件的主要弱点一直是操作的复杂性、理解操作的困难以及系统所需的大量人力。

2.2 应用的视角

应用程序可以包含适合特定功能的中间件,如基于数据访问的数据访问Web、专门用于应用程序的中间件,如实时操作。

2.2.1 数据访问中间件

应用程序与本地和/或远程数据库(关系数据库和非关系数据库)的数据访问中间件据源的交互。这类中间件包括事务处理监视器、数据库网关和分布式事务处理中间件。这种类型的中间件可以帮助满足特殊的数据库需求,如安全性(身份验证、机密性和访问控制)、保护和ACID属性。如果DBMS不可用或无法处理事务,该数据库中间件甚至可以自己执行请求的事务。由于数据可能会保留在多个数据库中,因此中间件(特别是事务处理监视器)会跟踪每个事务的进度,并在请求的一部分失败时请求回滚。中间件通知请求的状态,并传递所有返回的数据。一些中间件甚至修改了返回数据的外观,使数据更易于应用程序或用户使用。

数据访问中间件在多个源和数据库之间的透明通信,将应用程序编程语言转换为目标数据库可接受的语言,以及将响应集转换为请求应用程序可接受的格式,能够直接查询数据库或与DBMS通信。

2.2.2 桌面中间件

桌面中间件可以根据用户的要求,通过跟踪和协助应用程序,对数据的表示方式进行更改,管理任何传输服务(例如终端仿真、文件传输、打印服务),并在中断最少的情况下提供备份保护和其他操作后台功能。中间件服务包括图形管理、排序、字符和字符串操作、记录和文件管理、目录服务、数据库信息管理、线程管理、作业调度、事件通知服务、软件安装管理、加密服务和访问控制等等。

2.2.3 基于Web的中间件

基于Web的中间件帮助用户进行浏览,使用界面提前搜索感兴趣的页面,并从浏览历史中识别用户感兴趣的变化。它为大量应用程序提供身份验证服务,并提供独立于底层操作系统、网络协议和硬件平台的进程间通信。与网络紧密相连的中间件被称为应用服务器,它们提高了对性能、可用性、可扩展性、安全性、信息检索以及对协作管理和使用的支持。当服务器和客户端之间获得更好的通信时,中间件可以直接连接到应用程序。基于web的中间件提供的一些核心服务包括目录服务、电子邮件、计费、大规模供应管理、远程数据访问(包括下载、程序访问和浏览)和远程应用程序等。

例如,电子商务中间件涉及了通过网络进行的两个或多个企业(或用户和企业)之间的通信。该中间件控制对客户配置文件信息的访问,允许业务功能(如购买和销售物品)的操作,并协助应用程序之间的财务信息交易。这种中间件可以提供一个模块化平台来构建web应用程序[,对安全性、QoS、经济高效且快速的交易以及不同环境下的透明度的需求至关重要。

面向移动应用的中间件是基于Web中间件的另一个主要分支。它集成了分布式应用程序和服务器,为移动用户提供对电子邮件、日历、联系信息、任务列表等的安全无线访问。

2.3.4 实时型中间件

实时型中间件支持时间敏感的请求和调度策略,通过提高用户应用程序效率的服务来实现这一点。实时中间件可分为实时数据库应用、传感器处理和信息传递等。

随着物联网的普及,实时信息处理中间件的数量急剧增加。实时型中间件提供了一个决策过程,确定了解决时间敏感过程的最佳方法,并可以帮助操作系统分配资源,以帮助时间敏感的应用程序满足其实时性需求。

2.3.5专有用途中间件

专有用途中间件一般为满足特定需求而创建的,把不便于分类的中间件类型归类于此。

3.中间件的用途

在互联网的广泛使用和高速连接的改造之前,大多数应用程序是作为单体独立的软件解决方案开发的。这个软件为了特定的目的和活动而构建,因此不设计为连接和软件组件的交互。单体软件需要一个复杂的中间件解决方案,以便与不同的模块(如客户机/服务器)共享信息,或者向主机/资源管理软件发出请求。

在互联网彻底改变了运作方式,越来越多的业务由连接到大型分布式计算机网络的多个计算设备所驱动。分布式计算引入了面向服务的体系结构, 由多层软件解决方案组成,这些解决方案实现了实体和服务的分离,从而将每个组件分解为微服务。这是通过降低系统的复杂性和进一步增加其模块性来实现的。在这个场景中,每个实体被视为唯一且自治的。

这时,中间件是一种将单个应用程序开发成的一套小型服务,每个应用程序都在自己的进程中运行,并与轻量级机制(通常是 HTTP 资源 API)通信。中间件与 API紧密相连,使用不同API软件包。这意味着中间件可以简化复杂的应用程序,因此开发人员不仅关注组件的通信,还关注业务逻辑和系统的交互。

另外,在开发应用程序的时候,一般需要考虑的三个必要因素是可伸缩性、维护和自动化。首先横向扩展只是增加资源以扩展主系统的功能,在整个网络上最优地分配作业调度。至于维护,关注点分离原则非常重要,不管是使每个实体可重用(模块化)还是捆绑它的属性(封装)。典型的模块化示例包括 Linux 内核,其中不同的元素可以被多次使用来构建一个系统。此外,重点一般会放在自动化操作上,以减少错误,并使应用程序全天候可用。

中间件可以作为实现可伸缩性、维护和自动化的促进者。这意味着中间件在软件开发过程中提供了灵活性,同时减少了整个软件周期的时间,也为开发人员提供了更容易扩展性。此外,中间件可以通过结合“快速失败,快速成功”的原则来支持快速的原型实现,还可以降低项目成本,普遍促进创业和创新。

综上所述,中间件提供的注意用途如下:

  • 提供工具和函数以简化复杂应用程序的开发。

  • 提供高级抽象和接口,以促进应用程序的集成、重用和开发。

  • 隐藏底层平台和操作环境的异构性。

  • 隐藏基础环境中的分发机制和通信细节。

  • 促进基础设施的不同分布式组件之间的通信。

  • 为不同应用程序所需的通用功能提供共同服务,以减少开发工作和避免服务重复。

  • 提供一个公共体系结构来添加新的服务和特性,而不必更改应用程序。

  • 提供增值特性和非功能特性,如安全性、可靠性和 QoS。

  • 提供必要的工具,以增强分布式应用程序的性能并提高其稳定性和可伸缩性。

4. 中间件示例:物联网中间件

物联网描述了一个由多个智能感应设备融合的实时数据收集的大型互联设备网络。为了实现这一目标,电子设备将数据发送到外部服务,这些服务托管在云端或边缘计算的基础设施中。物联网网络不仅可以与周围环境互动,而且不需要用户的干预就可以自主行动。在这个范围内,普适计算被定义为“源于数字世界的、通过物理世界感知的服务整体”。

此外,开发物联网应用的体系结构原则包括安全性、能源消耗和监控、可靠性、可解释性和通信。根据其软件许可,它可以分为企业维护、开源或设备专用。物联网中间件是基于以下关注点分离来处理其操作的:

  • 硬件层包括所有的传感设备,以及它们运行的传感器网络。这一层负责收集和处理可用的数据。

  • 操作系统层执行必要的数据转换操作,以便相应地提取和加载信息。

  • 网络层通过保护连续、安全和无干扰的通信流,将数据发送到下一层。

  • 中间件层处理消息通信协议和服务。具体来说,除了为应用程序提供访问协议之外,该层还检查系统的操作和数据传输故障。

  • 应用程序层完全负责向最终用户提供服务(通常是通过 API) ,方法是启用服务广播到各个应用程序的终端。

一些关于物联网中间件的最有前途的开源项目,包括: 针对云传感器系统的 OpenIoT; 针对设备间通信协议的 FIWARE; 针对数据存储和机器学习的快速部署和高可扩展性的 LinkSmart; 针对通信、控制和管理的自动化层的物联网抽象的 DeviceHive; 针对针对智能应用的工业物联网框架 ThingSpeak等等。类似地,IBM、 AWS 、Azure、谷歌和甲骨文都开发了企业中间件,专注于自动化特定任务或核心业务活动流程。

5. 中间件与云服务

随着云服务的普及,中间件促进了在单一多用途环境中的分布式部署。尤其是容器的指数级增长,这种情况变得更加明显,软件环境可以通过同一台服务器在一个沙箱环境中快速而方便地部署多次。容器是一个独立的软件环境,具有唯一的代码、库、运行时环境和依赖关系。中间件层也已经从虚拟化转移到了集装箱化,用于优化通信和抽象通信协议以开发软件管道。

云原生是一种利用基础云计算技术的应用程序开发方法,其目标是在内部部署、私有云或公共云环境中提供一致的开发、部署和管理。实际上,云原生应用是从微服务构建的应用程序,部署在使用Kubernetes编排的容器中。微服务是松散耦合的应用程序组件,包含了自己的堆栈,可以彼此独立部署和更新,并使用REST API、消息代理和事件流的组合相互通信。容器将应用程序代码(如微服务)以及在任何传统IT或云基础设施上运行该代码所需的操作系统库和依赖项打包在一起。

中间件可以解决其中一些复杂性,但使用传统中间件运行容器化应用程序会增加其自身的复杂性。出于这个原因,流行的云应用开发平台,已经演变为包含了容器化中间件,即模块化中间件,以便只需将所需功能打包到一个容器中。

从开发者的角度来看,向云计算解决方案的转变意味着代码更少。云基础设施中的大部分工作都是在“引擎下”完成的。以前由本地中间层处理的分布式编程现在可以远程处理,更具体地,需要处理的常见问题包括扩展性、弹性、可观察性、资源管理以及持续的集成和交付。这意味着企业将限制中间件开发人员的数量,更关注架构和应用程序开发,而不是部署。

6.小结

中间件一词已被用于包含许多不同类型的软件,因此很难确定到底指的是什么。简单地说, 中间件是连接分布式环境中的任何组件集,以提供更好的功能。

实际上,从体系结构、开发到部署,中间件可以在其软件周期中使用。对业务数字化转换的持续需求表明中间件将继续存在。无论是微服务,还是在计算机之间的传输数据,或者创建一个通用网关,都可以依靠中间件来实现不同设备、应用程序和软件层之间的通信。通过微服务架构,通过中间件可以相对轻松地开发一个全局的分布式生态系统。

尽管中间件这一术语本身的使用越来越少,但它仍然存在于移动和传感器网络、面向服务的架构、网格计算、云计算、在线多人游戏、网络机器人、物联网等等。因此,中间件实际上仍然无处不在,并且很可能在很长一段时间内无处不在。

【参考资料与关联阅读】 

  • https://lib.jucs.org/article/71693/

  • https://www.ibm.com/cloud/learn/middleware

  • https://queue.acm.org/detail.cfm?id=3526211

  • https://onlinelibrary.wiley.com/doi/full/10.1002/cpe.2817

  • https://www.researchgate.net/publication/221205414ASurveyofMiddleware

  • 当你问代理机制的时候?指的是Agent,Proxy,Broker还是Delegate呢?

  • 也谈“业务架构”

  • 浅析面向云架构的SLA

  • 软件架构的10个常见模式

  • 面向数据架构的云演变

  • 回顾Bob大叔的简洁架构

  • 解读六边形架构

  • 老曹眼中的面向数据架构

  • 架构大数据应用

  • 再谈<全栈架构师> 一文

  • 一文弄清物联网的OTA

  • 物联网要点深入浅出

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章