中间件简介

news2025/7/9 23:52:27

中间件简介

1. 中间件概述

随着网络和软件技术的飞速发展,软件面临更多的问题,例如:不同的操作系统、不同的网络环境等。在每个软件中解决这些问题加大了软件开发人员的负担,因此倾向于将这些具有广泛应用的共性功能提取出来,从而避免了重复开发,并可以使这些功能模块更专业、更稳定、更高效可靠。这些被提取出来的模块的功能主要是一类业务,不像操作系统那样具有普遍的应用能力,因此将其称为 中间件

中间件是处于操作系统之上,应用程序之下的软件。它隐藏了计算机体系结构、操
作系统、编程语言和网络技术等方面的异构性,为上层的应用程序提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用系统。

在这里插入图片描述

上图是中间件在分布式系统中的位置。目前,中间件己经成为网络环境下大型复杂应用系统构建和运行的核心基础支撑软件,很多大型的商业信息系统、任务关键系统都是在中间件平台上运行。

2. 可适应中间件

传统的中间件为上层应用程序隐藏了底层的异构性。但是,一些新的应用如果能够知道底层环境的细节并随之做出相应的调整,会得到更好的效果。因此,要求中间件能够根据外界环境的改变而变化,并使得应用程序能够控制和改变中间件,这样的中间件称为可适应中间件。

根据可适应中间件提供调整的时间将可适应中间件划分为 静态可适应中间件动态可适应中间件

  • 静态可适应中间件在应用程序编译或者启动时刻进行调整,静态可适应中间件可以进一步划分为
    • 可定制中间件,在应用程序编译时刻进行调整。
    • 可配置中间件,在启动时刻进行调整。
  • 动态可适应中间件在应用程序 运行过程 中进行调整。动态可适应中间件可以进一步划分为
    • 可协调中间件,在应用程序的被使用前进行调整。
    • 可变中间件,在应用程序的被使用后进行调整。

在这里插入图片描述

目前己经有很多种动态可适应中间件,其中,最主要的两类是反射式中间件和面向方面中间件,分别在中间件中使用了 反射技术面向方面编程技术

2.1 反射式中间件

反射式中间件在传统中间件的技术上引入了反射技术使得中间件能够动态地进行变化。

2.1.1 反射计算的概念

计算系统用来感知世界的一部分并基于此进行一些动作,计算系统与此部分因果连接(causal connection),即一方的改变将直接影响另一方。元系统(meta-system)是指将另一个计算系统当成领域的计算系统,作为领域的计算系统称为目标系统。反射是指计算系统能感知并操控自身的能力,而反射系统是指以自身为目标系统的元系统,反射系统对自身进行的感知和操控称为反射计算。

由此观点可以看出,一个反射系统由两个部分组成:

  • 对系统的问题域进行建模并对其进行推理和操纵的部分;
  • 对系统自身建模并对其进行推理和操纵,使系统能够适应某些变化。

从实现角度看,这两部分采用同样的实现机制,第一部分称为“基础层”,第二部分称为“元层”。基础层和元层之间具有因果联系。

2.1.2 DynamicTAO

DynamicTAO 是一个能够动态配置并符合 CORBA 规范的反射式中间件,也是最早的反射式中间件。它复用现有的 TAOTAO 是一个基于面向对象设计模式的可迁移的、灵活的、可扩展的、可配置的对象请求代理(ORB)。DynamicTAO 注重于在 TAO 上增加反射特性,通过增加配置器和挂钩来获取中间件自身结构信息并提供对中间件的运行时动态配置。使用 策略设计模式ORB 内部引擎分成多个不同的方面。配置文件用于指明 ORB 中用来实现并发、请求分发等方面的策略。在 ORB 启动时刻,配置文件呗解析,相应的策略呗加载。

DynamicTAO 通过 构建配置器 的集合来实现具体化。一个构件配置器保持了一个特定的构件与系统中其他构件的依赖关系。每个运行 DynamicTAO 的进程都包含一个域配置器(DomainConfigurator),负责维护在进程中对象请求代理之间、对象请求代理和对象的实现(Servants)之间的依赖关系。每个对象请求代理包含了一个定制的构建配置器交错 TAOConfigurator,负责管理一组策略实现的构件,这些策略包括:并发策略、调度策略、安全策略和监控策略。如果客户程序使用了一种策略,TAOConfigurator 将该程序信息记载道相应的策略实现的构件中,同时该配置器的指针也加到客户程序的依赖列表中。这样 DynamicTAO 可以通过构建配置器中存储的信息获得整个中间件平台的运行信息,同时也可以修改运行时的状态。DynamicTAO 还引入了动态配置代理,它能够根据给定的动态配置拓扑图和配置策略,自动完成对网络中各个节点的重新配置。

在这里插入图片描述

上图为 DynamicTAO 的具体化结构。 DynamicTAO 使用 TAOConfigurator 解决对象请求代理的一致性。通过对构件配置器中存储的依赖关系进行分析,判断是否能够进行动态配置。使用策略新实现构件替换旧实现构件时,需要保证旧实现构件己经不再被任何客户程序使用,并且以后不会被需要使用,同时需要将旧实现中的一些信息迁移到新实现中。采用的版本控制机制是:允许同一时间同一个策略在内存中有两个不同的实现。每次构件加载进来时,赋一个版本号给该构件,引用该构件的实现通过版本号和构件名称。版本号也用来标识哪个实现是最新的,当没有引用指向旧版本时,旧版本被回收。

2.1.3 OpenORB

OpenORB 符合 CORBA 的规范,但是它不像 DynamicTAO,它是从头开始设计的一种新颖的中间件体系结构。OpenORB 体系结构在运行时刻将构件作为可标识的实体保存。将元层和基础层明确区分,通过反射实现动态重配置。基础层包含实现通常中间件服务的构件;元层包含暴露这些实现给程序员的反射机制,实现检查和自适应。元层的结构使用与基础层相同的构件模型,所以反射也可以用作元层的检查和自适应。元层的构件包含了一个平台的因果关联的自表示(self-representation),并且和一个基本层的构件相关。在 OpenORB 中每个构件都有自己的元空间,每个元空间由四个相互独立的元空间模型构成:接口元模型、体系结构元模型、栏截器元模型和资源元模型,其中接口元模型和体系结构元模型属于结构反射,栏截器元模型和资源元模型属于行为反射。

在这里插入图片描述

其中接口元模型、体系结构元模型和栏截器元模型针属于构件相关,资源元模型属于平台相关。每个构件拥有独立的接口元模型和体系结构元模型,每个接口拥有独立的栏截器元模型,而每个地址空间拥有独立的资源元模型。

2.1.3.1 接口元模型

提供对构件的外在表示的访问。构件的外在表示指的是构件提供和要求的接口。通过接口元模型可以动态检查构件提供的服务。

2.1.3.2 体系结构元模型

将构件看作一个软件体系结构,关注构件的内部实现。包括两个方面:表示一个构件中构件之间关系的构件图和一组体系结构限制,体系结构限制定义了使构建集有效的规则。检查和自适应软件的体系结构,即添加和替换构件以及修改体系结构限制。

构件图可以是递归的,例如构件图中的构件含有 architecture 元空间模型。递归在原始构件中终止,即原始构件没有可见的底层结构,程序员不能访问其内部实现细节。

2.1.3.3 拦截器元模型

以拦截器的形式增加方法的预处理和后期处理。

2.1.3.4 资源元模型

提供对底层资源和资源管理器的访问。通过增加删除资源和修改管理资源的算法的参数。资源元模型提供对表示资源管理的构件的访问,检查和自适应域资源有关的行为。

2.2 面向方面的中间件

面向方面编程( Aspect Oriented Programming )是面向对象编程( Object Oriented Programming )的补充和完善。面向方面编程是一种关注分离的技术,系统不同的关注能够分离并单独设计,可以解决面向对象变成难以解决的复杂问题。面向方面编程允许用不同的维度来分解软件系统,软件开发者可以使用垂直分解过程建立中间件的基本分解模型。然后,在不改变现有结构的基础上,使用面向方面技术,将需要的实现正交添加到基本模型上。

2.2.1 AspectIX

AspectIX 是一个 CORBA 兼容的中间件体系结构,它通过使用碎片对象模型( Fragmented Object Model )使 QoS 代码从系统的功能代码中分离出来。

在这里插入图片描述

碎片对象模型如上图所示。片段对象模型允许一个分布式对象被分成若干哥碎片( fragment ),碎片分布在多个节点或者地址空间中。分布式对象的语义由所有的碎片实现,因此碎片之间需要相互通信。一个碎片由碎片接口和碎片实现组成,碎片接口隐藏了碎片的实现细节,客户端通过碎片接口与分布式对象进行交互。与分布式对象交互的客户端,在它的地址空间里由一个本地碎片。

AspectIX 将非功能性的需求,例如实时性、可靠性、一致性等,设计成方面。每个碎片实现包含了一组方面配置。通过方面配置可以启用活停用某个方面。对于方面,可以使用特定的配置对象进行配置。

当客户绑定到一个分布式对象时,它将获得对象在本地地址空间的碎片。客户端通过碎片接口检查该对象支持哪一种服务质量配置,还可以创建一些描述它自己需求的方面配置对象,然后将这个配置发送给对象。对象收到请求后,进行如下操作:

  1. 检查当前的碎片实现是否能够满足需求,如果可以,返回接受请求;
  2. 否则,检査碎片实现仓库,寻找可以满足需求的碎片实现,如果能够找到这样的碎片实现,返回接受请求;
  3. 否则,拒绝客户端的配置请求。

2.3 JBoss

Sun 为了推动 Java 服务器端 应用的开发,在年底推出了技术及相关的规范。在 J2EE 应用服务器领域,JBoss 是应用最广泛的应用服务器。由于 JBoss 遵循 LGPL 授权分发,并且是一个开源项目,这使得 JBoss 广为流行。JBoss 为基于 Java 的软件开发提供了高质量、高性能和高扩展性的中间件平台。

2.3.1 JBoss 结构

JBoss 作为 Java 程序,首先需要运行在 Java 虚拟机上,同时,作为 Java 中间件,它又为上层的应用提供了开发平台。 JBoss 作为中间件,不再像传统的中间件那样,作为一个整体运行,而是由多个构件组成,除了必须部署的微内核外,其他的服务根据需要像构件一样部署到内核上。因此,JBoss 是高度模块化和松耦合的。JBoss 作为 web 应用服务器时,在 JBoss 的微内核上部署 JBoss web 服务及相关服务,就可以运行 web 应用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0nS9vDFu-1668568338181)(%E4%B8%AD%E9%97%B4%E4%BB%B6.assets/image-20221116110641628-16685680025816.png)]

JBoss 微内核提供了一个配置和管理 POJO 的环境,可以更好地支持扩展性在服务器环境下需要的主要方面。

  • JBoss 微内核主要由 ContainerDependencyKernelAOP-MC-intSpring-int 模块构成,其中 Kernel 模块定义了内核的核心操作,包括内核的启动、配置、部署 POJO 等;
  • Container 模块主要定义了连接点,用于在运行时刻对类进行操作;
  • Dependency 模块用于确保依赖关系被满足;
  • AOP-MC-int 模块用于集成 JBossAOPMC
  • Spring-Int 模块使得 Spring 模型能够用在微内核上。 其中 Kernel 是微内核的核心。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【离散数学】第二章 测试

1.单选题 谓词推理要 A. 先US,后ES B. 先ES,后US 正确答案: B 2.单选题 前提: (∀x)(F(x)→G(x)),(∃x)F(x), 结论: (∃x)G(x)。 A. 成立 B. 不成立 正确答案: A 3.单选题 根据ES规则,若(∃x)P(…

gRPC(八)生态 grpc-gateway 应用:同一个服务端支持Rpc和Restful Api

目录前言一、gRPC-Gateway概述1、简述2、出现二、准备工作1、目录结构2、环境准备1)Protobuf2)gRPC3)gRPC-Gateway3、编写 IDL1)google.api2)hello.proto3)编译proto4、制作证书1)生成CA根证书2…

香港服务器一定比美国服务器好吗?

香港服务器一定比美国服务器好吗?从出海业务兴起以来就有不少的站长拿较为热门的香港服务器和美国服务器来作出对比,对其两者孰优孰劣的探讨一直都没有停止过。在这里,我们对两者做个比较。 香港服务器和美国服务器两者的对比: 1. 香港服务器…

linux笔记(3):东山哪吒STU开发板初体验

文章目录1.开发板上电观察串口1.1 从nand flash启动1.2 从SD卡启动2.上传文件到开发板2.1 使用FileZilla软件连接开发板2.2 使用ADB软件双11下单后,经过多日的等待,终于在昨天下午收到了开发板。在等待的过程中,看了一下文档和B站东山老师的视…

Rhino Linux:滚动发布但也很稳定的 Ubuntu

导读滚动发布的 Ubuntu 发行版?等等,什么? Rhino Linux 听起来不错……Ubuntu but rolling but also stable! Thats what Rhino Linux aims to be Rhino Linux 将成为 Rolling Rhino Remix 的继任者。这个由 http.llamaz 构建的 Linux 发行版…

01 Jenkins CICD 之 Git 命令使用

1. 前言 由于项目没有外网,需要在内网打镜像。但自己对git 还不是太熟悉。看着pipline 一脸的懵。所有针对git 命令在工作中常用的参数及用法简单学习记录下 git 技能树链接 2. git 常用参数 2.1 git全局设置 git config --global user.name "xxxxx" …

STC51单片机27——控制无刷电机

编写程序控制电调&#xff1a; #include<reg52.h> sbit PpmP2^0; sbit UpP2^1; sbit DownP2^2; sbit Led_UpP2^3; sbit Led_DownP2^4; unsigned char k0; unsigned char a0; void Control() { if(Up0&am…

云原生网关的可观测性体系实践

作者&#xff1a;井轶 概述 可观测性一词来源于控制理论&#xff0c;是指系统可以由其外部输出推断其其内部状态的程度&#xff0c;随着 IT 行业几十年的发展&#xff0c;IT 系统的监控、告警、问题排查等领域的逐渐成熟&#xff0c;IT 行业也将其抽象形成了一整套可观测性工…

Linux基础学习记录

LInux学习 文章目录LInux学习1. Linux快捷键2. Shell基本命令”*“&#xff0c;”&#xff1f;“&#xff0c;”[]“&#xff1a;通配符pwd&#xff1a;显示当前目录cd&#xff1a;改变目录ls&#xff1a;列出目录内容cat和more&#xff1a;查看文本文件catmorehead和tail&…

为什么C语言需要指定平台开发?

前言&#xff1a; 笔者心血来潮&#xff0c;特意站在初学者角度去思考为什么C语言需要指定平台去开发呢&#xff1f; 物有本末&#xff0c;事有终始&#xff0c;知其先后&#xff0c;则近道矣。 语言历史&#xff1a; 读者应该能明白程序最底层无非就是01010101二进制被CPU给调…

(续)SSM整合之springmvc笔记(SpringMVC获取请求参数)(P131-135)

目录 一 通过ServletAPI获取 1 . 新建TestParamController类 2 . index.html 3 . 在TestParamController类里面写getParamByServletAPI 4. 测试 重新部暑 二 通过控制器方法的形参获取请求参数 1 . index.html 2 . TestParamController 3. 测试 三 RequestPar…

Vue2.0开发之——Vue基础用法-事件绑定$event(20)

一 概述 事件参数对象$event表示事件参数对象event事件修饰符 二 事件参数对象 2.1 说明 在原生的 DOM 事件绑定中&#xff0c;可以在事件处理函数的形参处&#xff0c;接收事件参数对象 event 2.2 示例 布局代码 <button v-on:click"addCount">1</bu…

高光谱解混和图片去噪(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

使用id限定优化mysql分页查询limit偏移量大问题

在工作中可能偶尔会遇到&#xff0c;当使用limit实现分页查询时&#xff0c;当limit的偏移量越大时&#xff0c;sql语句的耗时也越大。 如图&#xff1a; 偏移量为0时&#xff0c;sql语句耗时在35毫秒。 顺便说下偏移量与页码、页大小的关系&#xff1a; 偏移量 (页码 - 1…

Spark的内存管理机制

在执行Spark 的应用程序时&#xff0c;Spark 集群会启动 Driver 和 Executor 两种 JVM 进程&#xff0c;前者为主控进程&#xff0c;负责创建 Spark 上下文&#xff0c;提交 Spark 作业&#xff08;Job&#xff09;&#xff0c;并将作业转化为计算任务&#xff08;Task&#xf…

深度学习基础--神经网络(1)激活函数

文章目录从感知机到神经网络激活函数阶跃函数&#xff08;感知机的激活函数&#xff09;sigmoid函数阶跃函数和sigmoid函数绘制和对比ReLU函数本文为学习笔记参考书籍&#xff1a;《深度学习入门 : 基于Python的理论与实现 》/ (日) 斋藤康毅著 ; 陆宇杰译. – 北京 : 人民邮电…

根据水声和摄影测量数据建立数字测深模型

无人船和无人车正越来越多地用于水深地形测量。使用这些平台采集数据的技术得到普遍的应用&#xff0c;但数据的融合仍然需要深入研究&#xff0c;其融合方法通常依赖于所使用的传感器和测量区域的特性。本文提出了一种融合无人艇&#xff08;USV&#xff09;和无人机&#xff…

[附源码]java毕业设计基于的前端课程学习网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Mybatis—SqlNode

SqlNode的主要职责就是描述Mapper文件中配置的SQL信息&#xff0c;在Mybatis源代码中随处都能看见其身影&#xff0c;可见SqlNode地位是相当高的。SqlNode接口只定义了一个apply方法&#xff0c;且该方法只有一个DynamicContext对象作为入参。DynamicContext对象中不仅封装了Ma…

抓包工具 Charles 使用手册

Charles 是一款抓包软件&#xff0c;通过代理的形式拦截所有的 HTTP 和 HTTPS 请求&#xff0c;是开发测试的一大利器 下载和激活 在 Charles 下载安装包&#xff0c;在 此处 获得注册码&#xff0c;点击下方输入注册码激活软件 抓主机的 HTTP 包 选中 Proxy > Windows P…