您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 开发技术 > 正文

中间件的过去、现在和未来

发表于:2022-07-14 作者:tougao 来源:云原生技术爱好者社区
在计算机科学中,系统通常分为两类:软件和硬件。但是,中间还有一个附加层,称为中间件,它是一个软件“管道”,是操作系统和最终用户之间的操作、进程或应用程序。本文旨在定义中间件并反思其必要性,并解决关于何时何地应用的争议。它还探讨了中间件在云计算和 IoT(物联网)等新兴技术中的应用,以及未来中间件的发展。

该术语是在 1980 年代初期引入的。它包含复杂的软件解决方案,通过软件和应用程序组件等新功能对遗留系统(通常是大型机)进行现代化改造。最初,它仅用于扩展分离网络层和应用层的中间层。随后,它的用途扩大到作为操作系统和网络层之上,应用层之下的层。这意味着中间件现在可以促进应用程序组件和分布式网络之间的常规通信。

通过中间件,程序员可以选择实施松耦合的解决方案,而不必交互和分析不同的组件。

在最近的文献3,12,14,16根据研究领域,使用了多种定义。一方面,软件和 DevOps 工程师都将中间件描述为通过不同系统组件将软件“粘合”在一起的层;另一方面,网络工程师会说中间件是网络连接的容错和错误检查集成。换句话说,他们会将中间件定义为通信管理软件。与此同时,数据工程师将中间件视为一种技术,负责协调、触发和编排动作,以处理和发布来自各种来源的数据,利用大数据和 IoT(物联网)。鉴于中间件没有统一的定义,最好采用特定领域的方式。

中间件主要分类

交易。处理多个同步/异步交易,充当来自分布式系统(如银行交易或信用卡支付)的关联请求的粘合层。

  • 面向消息。消息队列和消息传递架构,支持同步/异步通信。第一个操作基于使用队列来处理信息的原则,而第二个通常以发布/订阅模式操作,通过中间代理促进通信。
  • 程序。用于连接、传递和检索异步通信(例如调用操作)的软件响应的远程和本地架构。具体来说,第一种架构调用网络中另一台计算机的预定服务,而第二种架构仅与本地软件组件交互。
  • 面向对象。与过程中间件类似,这种类型的中间件结合了面向对象的编程设计原则。从分析上讲,它的软件组件包括对象引用、异常和通过分布式对象请求的属性继承。它通常同步使用,因为它需要从服务器对象接收响应来处理客户端操作。重要的是,这种类型的中间件还可以通过使用(多)线程和通常的并发编程来支持异步通信。

学术界根据其服务的应用程序模块进一步隔离了中间件,例如数据库、Web 服务器等。中间件有几种类型,分为以下关键类别:反射、代理、数据库、嵌入式、门户网站和设备(或机器人)。

  • 首先,反射中间件构成了专门设计用于“轻松与其他组件和应用程序一起操作”的组件,而代理中间件具有多个组件,可以在复杂的特定领域语言和服务上运行。
  • 其次,数据库中间件侧重于 DB 到 DB 或 DB 到应用程序的通信——无论是本地的还是通过 CLI(调用级接口)——而嵌入式中间件充当嵌入式集成应用程序和操作系统通信的中介。
  • 第三,门户中间件在复合的单体应用程序中创建上下文管理工具,而设备(或机器人)中间件简化了特定设备操作系统或机器人硬件和固件的集成。

第一个分类更广泛,强调架构操作原则,而第二个分类是应用程序驱动的。出于这个原因,第一个隔离更可取,以准确定义每个架构集成的中间件,而不是其应用程序属性。所有类型的中间件如图所示。

图片

中间件的使用

在开发应用程序时,需要考虑的三个必要要素是可扩展性、可维护和自动化。首先,开发者避免横向扩展,这只是增加资源来扩展主系统的能力。他们努力实现工作负载分区——在整个网络上优化分配作业调度。至于维护,关注点分离原则对于开发人员来说非常重要,既要使每个实体可重用(模块化),又要捆绑其属性(封装)。(典型的模块化示例包括 Linux 内核,因为代码库可以更改添加/删除,以及可以多次使用不同元素来构建系统的乐高积木。)此外,开发人员专注于自动化操作以减少错误并提供 24/7 可用的应用程序。

中间件可以充当促进者,以实现可扩展性、可维护和自动化。具体来说,它添加了一个层,将复杂系统简化为小型集成,允许它们与分布式资源网络相关联。这意味着中间件在软件开发过程中提供了敏捷性,同时缩短了整个软件周期的时间;它还为开发人员提供了更容易的未来扩展点。

此外,中间件可以通过结合“快速失败,快速成功”的原则来支持快速原型设计。它允许开发人员立即应用、采用和评估业务变更。中间件还可以降低项目成本,促进创业创新。

中间件的能力

在 Internet 的广泛使用和高速连接的适应之前,大多数应用程序都是作为单层、独立的软件解决方案开发的。该软件是“单一的”,旨在服务于特定的目的和活动,因此并非旨在与其他应用程序和软件组件连接和交互。单层软件需要一个复杂的中间件解决方案来与不同的模块(例如客户端/服务器)共享信息,或者传递来自主机/资源管理软件的请求。

在互联网彻底改变了开发人员的操作方式之后,越来越多的交易由连接到大型分布式计算机网络(也称为物联网)的多个计算设备驱动。分布式计算引入了 SOA(面向服务的架构)而不是单体应用程序。具体来说,SOA 由实现实体和服务分离的多层软件解决方案组成,从而将每个组件分解为微服务。这是通过降低系统的复杂性并进一步增加其模块化来实现的。在这种情况下,中间件将每个实体视为唯一且自治的。因此,未来的修改是针对特定服务(模块)而不是针对整个系统的组件。

中间件是一种将单个应用程序开发为一组小型服务的方法,每个服务都在自己的进程中运行并与轻量级机制进行通信,通常是 HTTP RestfulAPI。

中间件与 API(应用协议接口)紧密相连,充当程序员使用的不同 API 的层或软件包。这意味着中间件可以简化复杂的应用程序,使开发人员不仅关注组件的通信,还关注业务逻辑和系统交互。这是物联网时代的一个重要方面,因为 API 是连接设备和无误发送信息的主要网关。

物联网中间件

物联网这个术语描述了一个大型互连设备网络,这些设备收集由多个智能传感设备融合的实时数据。为实现这一目标,电子设备(手机/平板电脑/计算机)将数据发送到托管在云或边缘计算基础设施中的外部服务。最近的研究集中在开发一个物联网网络,该网络不仅可以与周围环境交互,而且可以自主行动而无需用户干预。在此范围内,物联网将普适/无处不在的计算视为计算应用的未来。计算机不再与单个设备或设备网络相关联。普适计算被定义为“源自数字世界的全部情景服务,通过物理世界感知。

此外,开发物联网应用程序的架构原则包括对安全性、能耗和监控、可靠性、可解释性和通信的审查。如前所述,中间件为所有这些功能提供了一个抽象层。根据其软件许可,它可以分为企业维护、开源或设备特定(用于微型计算机/执行器,如 Raspberry Pi 或 Arduino)。

下图描绘了物联网中间件通常如何根据以下关注点分离处理其操作:

  • 硬件层(也称为边缘层)包括所有传感设备,以及它们在其中运行的传感器网络。该层负责收集和处理可用数据。
  • 操作系统层(即访问网关层)执行必要的数据转换操作,以便相应地提取和加载信息。
  • 网络层(即互联网层)侧重于通过保护连续、安全和无中断的通信流将数据发送到下一层。
  • 中间件层处理消息通信协议和服务。具体来说,该层除了为应用程序提供访问协议外,还检查系统的操作和数据传输故障。
  • 最后,应用层单独负责向最终用户提供服务(通常通过API),通过向各种应用程序端点(例如,不同的开发人员和部门)广播服务。

图片

对有关 IoT 中间件的一些最有前途的开源项目的回顾突出了以下几点:用于云中传感器系统的 OpenIoT;FIWARE 用于转换设备之间的通信协议;LinkSmart(以前称为 Hydra),用于数据存储和机器学习的快速部署和高可扩展性;DeviceHive 用于物联网关于通信、控制和管理的自动化层抽象;和 ThingSpeak 用于有关智能应用的工业物联网框架。

同样,IBM、AWS(亚马逊网络服务)、微软 Azure、谷歌和甲骨文也开发了企业中间件。基于突出显示的项目,一些中间件框架专注于自动化特定任务或核心业务活动流程。

未来:云容器和微服务

虽然开发人员使用虚拟化(将资源分层到基础设施中)、管理程序(操作系统的解释器)、客户操作系统(具有自己的内核)和应用程序,但中间件促进了在单一多用途环境中的分散部署。随着容器的指数级增长,这一点变得很明显——软件环境可以通过同一服务器(主机)在隔离环境(也称为沙箱)中快速轻松地多次部署. 就像 Java 的座右铭“一次编写,随处运行”一样,容器是一个独立的软件环境,具有独特的代码、库、运行时和依赖项。中间件层也从虚拟化转移到容器化,目的是为了优化通信和抽象通信协议以开发软件管道。

从开发人员的角度来看,转向云计算解决方案意味着需要更少的编码,因为云基础架构中的大部分工作都是在“幕后”执行的。换句话说,以前由本地中间层处理的分布式编程和企业开发的几个方面现在可以远程处理。更具体地说,要解决的常见问题包括扩展、弹性可观察性、资源管理以及持续集成和交付。这意味着企业将限制中间件开发人员的数量,他们将专注于架构和应用程序开发,而不是部署。

结论

中间件可用于软件周期的多个阶段——从架构和开发到部署。对企业数字化转型(从单体到微服务实施)的永久需求,这些表明中间件将继续存在。无论是将复杂的软件组件分离成更小的服务,在计算机之间传输数据,还是创建通用网关以实现无缝通信,您都可以依靠中间件来实现不同设备、应用程序和软件层之间的通信。此外,有必要对新开发人员进行中间件教育,并通过现代教育技术和学习系统强调其重要性。

随着越来越多的敏捷运动,科技行业采用了快速瀑布模型来为每个结构需求创建层堆栈,包括集成、通信、数据和安全性。鉴于此范围,研究云或数据服务的潜在扩展不再重要。现在必须强调端点连接和敏捷开发。

这意味着中间件不应该仅仅作为一个面向对象的解决方案来执行简单的请求-响应命令。中间件可以通过结合微服务架构来通过多个网关整合推拉事件和数据流,以开发一个整体的去中心化生态系统。