系统架构设计之微内核架构(Microkernel Architecture)

news2024/11/18 23:41:15

微内核架构(Microkernel Architecture)

  • 一. 什么是微内核架构
  • 二. 微内核架构风格-拓扑结构
  • 三. 微内核的核心系统设计的三个关键点
    • 3.1 插件管理
    • 3.2 插件连接
    • 3.3 插件通信
  • 四. 微内核架构的优缺点

一. 什么是微内核架构

微内核架构是一种面向功能进行拆分的可扩展性架构,通常用于实现基于产品的应用。

微内核架构(Microkernel Architecture),有时也被称为插件化架构(Plug-in Architecture),是一种面向功能拆分的可扩展性架构,通常用于实现基于产品的应用。例如Eclipse类IDE软件、UNIX类操作系统、淘宝App类客户端软件等,也有部分企业将业务系统设计成微内核架构,例如保险公司的保险核算逻辑系统,不同保险品种可以将逻辑封装成插件。

我们常用的从IDE到框架:Eclipse、IntelliJ IDEA、SPI等,插件化架构设计的比比皆是。但如果深入一些,能够把插件化架构阐述清楚,并能够借鉴思想,对我们在做的工作进行优化,尤其是在架构设计上并不简单。

二. 微内核架构风格-拓扑结构

从下图可见,微内核架构的拓扑结构由两部分组件组成:核心系统(core system)和插件模块(plug-in modules)。微内核架构模式包括两种类型的架构组件:核心系统和插件模块,允许你将其他应用程序功能作为插件添加到核心应用程序,从而提供可扩展性、灵活性以及功能分离和隔离。

在这里插入图片描述

核心系统的功能相对稳定,不会因为业务功能扩展而不断修改,而插件模块是可以根据实际业务功能的需要不断地调整或扩展。微内核架构本质就是将可能需要不断变化的部分封装在插件中,从而达到快速灵活扩展的目的,而又不影响整体系统的稳定。模块加载和模块通信是核心系统提供的功能。

三. 微内核的核心系统设计的三个关键点

3.1 插件管理

插件管理需要知道当前系统中有多少个插件,哪些插件处于可用状态,何时加载一个插件,以及何如加载一个插件。

常见实现是插件注册表。

核心系统提供插件注册表(配置文件、代码或者数据库),插件注册表有每个插件的信息,包括名字、位置、加载时机(启动加载,还是按需加载)等。

3.2 插件连接

插件连接制定了一个插件与核心系统的通信方式,也就是连接规范。

插件按照规范实现,核心系统按照规范加载。

常见的连接机制有 OSGi(Eclipse使用)、消息模式、依赖注入(Spring使用),甚至分布式的协议都是可以的,比如RPC或者HTTP Web的方式。

3.3 插件通信

插件模块的设计要实现低耦合,但一个业务请求往往需要几个插件模块共同协作来实现,这就需要插件之间实现相互通信。

插件间并没有直接联系,所以插件间通信必须通过核心系统,因此核心系统需要提供插件通信机制。和计算机类似,计算机的CPU、硬盘、内存、网卡是独立设计的配件,但运行过程中,各个部件肯定是有通信的,计算机通过主板上的总线提供了组件间的通信功能。微内核的核心系统也需要提供类似的通信机制,各个插件间才能进行正常的通信。

四. 微内核架构的优缺点

(1)灵活性高

  能够快速响应不断变化的环境。通过插件模块的松散耦合实现,可以进行隔离变更等,并且快速满足需求。

  易扩展、易裁剪。

(2)易于部署

  功能之间是隔离的,插件之间可以独立的加载和卸载。

(3)可测试性高

  插件模块可单独测试,能够非常简单地被核心系统模拟出来进行演示,或者在对核心系统很小影响甚至没有影响的情况下对一个特定的特性进行原型展示。

(4)通信效率低

  插件通过内核实现间接通信,需要更多开销。

(5)开发难度高

  微内核架构需要设计,因此实现起来比较复杂。

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

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

相关文章

Spring framework day 02:Spring 整合 Mybatis

前言 在现代软件开发中,数据持久化是一个重要的环节。为了高效、可维护地管理和操作数据库,许多开发者采用了Spring框架和Mybatis持久化框架的组合。Spring提供了依赖注入和面向切面编程等特性,而Mybatis则是一个优秀的对象关系映射&#xf…

JS类的继承和实现原理详解

一:前言 各位小伙伴在日常开发中,相信一定遇到过Class这种写法。这代表在JS中创建了一个类,并且可以通过这个类去 new 出一个新的对象。其实在JS中,这个类和java中的类是没有区别的,同样具有属性,方法&…

1209. 带分数

题目: 1209. 带分数 - AcWing题库 思路: 1.targetab/c,由题意a,b,c会包含1~9 且每个数出现且只能出现一次。我们可以抽象化为9个坑位分成3份分别给a,b,c。 2.先采用递归搜索树写出9个坑位的全排列,再分成3个区,分…

多分享,多输出,才有被看见的可能 (抽奖倒计时2天!文末有福利!)

* 戳上方蓝字“前端队长”关注我,每日更新 大家好啊,我是Daotin。 今天讨论一个话题,为什么要多分享,多输出? 因为,只有输出多了,被别人看到的机会才大。 不要相信什么,酒香不怕巷子…

Camtasia2023免费升级最新版本下载

在这个视频的大舞台上,每一帧都是你炫耀的机会,每一秒都是让观众瞪大眼睛的瞬间。现在,让我们一起飞跃时空,用更少的时间创作更多的惊喜吧! 就算你是个小白,毫无经验,别担心,Camtas…

【树莓派触摸屏等学习笔记】

前言 树莓派触摸屏 提示:以下是本篇文章正文内容,下面案例可供参考 一、触摸屏硬件驱动 出现黑屏的时候,恢复一下txt config.txt 全屏显示 showFull Exec :自启动 surf 算法 特征点识别 算法的复杂度挺高的 特性树莓派强大…

从Linux的tty_struct指针获取驱动上下文

背景 问题 前段时间开发一个tty驱动,用途是实现仪器对GPIB消息的接收、处理和上报。对于上报场景,下位机应用将上报内容写入一个驱动创建的tty设备,tty子系统将应用的输入转发给tty驱动,tty驱动将其转换成对SPI从设备&#xff0…

操作系统 - 《银行家算法》

(一)安全序列 你是一位成功的商人,手里掌握着 100 个w的资金 … 有三个企业想找你贷款,分别是 企业 B 、企业 A 、企业 T ,为描述方便,简称 BAT 。 B 表示:“咱们的项目很有前景,…

中枢听觉处理障碍的行为干预方法

作者:听觉健康 在数十年前,中枢听觉处理障碍(CAPD)的研究已经引起了多学科的关注。1937年,Samuel Orton提出某些儿童的学习障碍与不能有效利用听觉有关。Myklebust是提出“中枢性听力障碍”引起儿童语言学习障碍的先驱者之一。二十世纪五十年…

【lesson13】进程控制初识

文章目录 进程创建 进程创建 请你描述一下,fork创建子进程操作系统都做了什么? fork创建子进程,系统里多了一个进程,进程 内核数据结构 进程代码数据,内核数据结构由OS维护,进程代码数据一般由磁盘维护。…

C++类和对象(1)

C类和对象(1) C新关键字及语法引用引用的底层原理引用使用的注意事项 auto范围for C结构体新特性C类的特性C类与结构体区别构造函数定义调用 析构函数调用 C新关键字及语法 引用 引用是C加入的新类型,引用是变量的别名,在整体上…

华为OD机试 - TLV格式 - 逻辑分析(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

LeetCode:2316. 统计无向图中无法互相到达点对数(C++)

目录 2316. 统计无向图中无法互相到达点对数 题目描述: 实现代码与解析: 并查集 原理思路: 2316. 统计无向图中无法互相到达点对数 题目描述: 给你一个整数 n ,表示一张 无向图 中有 n 个节点,编号为…

stable diffusion如何解决gradio外链无法开启的问题

问题确认 为了确认gradio开启不了是gradio库的问题还是stable diffusion的问题,可以先执行这样一段demo代码 import gradio as grdef greet(name):return "Hello " name "!"demo gr.Interface(fngreet, inputs"text", outputs&q…

Spring Cloud 之 Sentinel简介与GATEWAY整合实现

简介 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 熔断 …

Damask使用指南-Hcp结构(镁(考虑孪晶))孪晶如何加入

1,首先利用geom布种子,种子数为40,模型空间尺寸为64*64*1(表示二维平面问题)代码: 2,根据布种区域生成voronoi镶嵌的晶体结构 代码: 3 检查结构是否正确生成 4,利用dama…

61 不同路径

不同路径 重点:从左上角移动到右下角,m-1次向右,n-1次向下题解1 DP降维——滚动数组 题解2 求解组合 C m n − 2 m − 1 C^{m-1}_{mn-2} Cmn−2m−1​的值 一个机器人位于一个 m x n 网格的 左上角 (起始点在下图中标记为 “St…

自己动手写编译器:c 语言模板中的输入模块设计

使用过“框架”的同学都能感受到“框架”带来的方便。所谓”框架“本质上就是一系列代码安排帮助我们完成脏活累活,或者复杂的工作流程后,把处理结果交给我们提供的代码。本节我们要完成的 c 语言模板也是一个框架,它也需要做一系列脏活累活&…

鲲鹏+麒麟V10 mysql8.0适配

检查是否已安装数据库服务 for i in rpm -qa | grep mysql;do rpm -e --nodeps $i;done yum源地址: http://repo.mysql.com/yum/mysql-8.0-community/el/8/aarch64/ 配置yum源: 将mysql相关的rpm包都下载到指定文件里,留作以后考用 yum reins…

UE4 距离场

在项目设置的渲染模块可打开距离场 把该节点连上,该节点的意思是,距离表面越近,材质显示值为0 不接近表面时: 接近表面时 可勾选该值即可看到距离场具体效果: 未接触表面时: 接触表面时: 产生…