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

微内核架构(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.rhkb.cn/news/165945.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lua-http库写一个爬虫程序怎么样 ?

以下是一个使用Lua-http库编写的一个爬虫程序,该爬虫使用Lua语言来抓取www.snapchat.com的内容。 代码必须使用以下代码:get_proxy -- 导入所需的库 local http require("http") local json require("json")-- 定义爬虫IP服务器 …

STP生成树协议详解

一、STP作用 如果链路断开或节点故障,那么互联的设备就无法正常通信了,这类网络问题叫做单点故障。没有备份的链路或节点,出现故障会直接断网。如果要提供 724 小时不间断的服务,那就需要在网络中提前部署冗余。避免出现单点故障…

【Arduino TFT】基于 ESP32S3 S7789 240x240 TFT实现的SD2 天气时钟

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-10-21 ❤️❤️ 本篇更新记录 2023-10-21 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝&#x1f64…

WSL2的安装与配置(创建Anaconda虚拟环境、更新软件包、安装PyTorch、VSCode)

1. WSL2 安装 以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),然后输入以下命令: dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /a…

uniapp:使用subNVue原生子窗体在map上层添加自定义组件

我们想要在地图上层添加自定义组件,比如一个数据提示框,点一下会展开,再点一下收起,在h5段显示正常,但是到app端真机测试发现组件显示不出来,这是因为map是内置原生组件,层级最高,自…

vscode摸鱼插件开发

不知道大家在写代码的时候,摸不摸鱼,是不是时不时得打开一下微博,看看今天发生了什么大事,又有谁塌房,而你没有及时赶上。 为此,我决定开发一个vscode插件,来查看微博热搜 插件名称&#xff1…

【C++】类和对象(中)

类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中并不是什么都没有,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默…

面试官:说说 HTTP 常见的请求头有哪些?

一、是什么 HTTP头字段(HTTP header fields),是指在超文本传输协议(HTTP)的请求和响应消息中的消息头部分 它们定义了一个超文本传输协议事务中的操作参数 HTTP头部字段可以自己根据需要定义,因此可能在 Web 服务器…

使用 类加载器 或者 类对象 读取文件

相对路径:项目 的 根目录 开始查找。( 但是在我们真正开发的时候,我们读到的更多的文件并不是直接放在我们项目里面这个文件夹里面,而是放在我们模块里面 )同理可得,我们直接创建 文件 b.txt 会在项目的根目…

打造自己的前端组件库(奶妈版,超详细)

打造自己的前端组件库 demo是开源的,自己上npm 或者 github 上都能搜到 新建vue项目(sass js vue2) vue create yt-ui 修改文件目录(如下) 修改: 1.src 更名 examples; 2. src/components移动到项目最外层;3.vue.config.js更改入口文件 /…

记一次Clickhouse 复制表同步延迟排查

现象 数据从集群中一个节点写入之后,其他两个节点无法及时查询到数据,等了几分钟。因为我们ck集群是读写分离架构,也就是一个节点写数据,其他节点供读取。 排查思路 从业务得知,数据更新时间点为:11:30。…

gRPC之gRPC转换HTTP

1、gRPC转换HTTP 我们通常把RPC用作内部通信,而使用Restful Api进行外部通信。为了避免写两套应用,我们使用grpc- gateway 把gRPC转成HTTP。服务接收到HTTP请求后,grpc-gateway把它转成gRPC进行处理,然后以JSON 形式返回数据。…

Python之爬虫

目录 HTTP请求HTTP响应获得页面响应伪装用户访问打包数据爬取豆瓣top250 HTTP请求 HTTP:HypertextTransferProtcol 超文本传输协议 1、请求行 POST/user/info?new_usertrue HTTP/1.1#资源了路径user/info 查询参数new_usertrue 协议版本HTTP/1.1 2、请求头 Ho…

云安全(1)--初识容器逃逸之特权容器逃逸

文章目录 前言privileged,特权容器逃逸环境配置实际利用实际环境利用计划任务/var/spool/cron/crontabs/ 适用于ubuntu debain/var/spool/cron 适用于centos ld.so.preloadssh 前言 在10.15号的上海中华武数杯的渗透赛里做到了一个k8s的题目,这应该是我第一次在比赛…

MapperStruct实现类为空

​ 问题描述: MapperStruct生成的实现了为空 按照在MapperStruct官网Installation – MapStruct中的方法配置后,生成的实现了是空的,如下: Overridepublic DeployHistory toEntity(DeployHistoryDto arg0) {if ( arg0 null ) …

Java利用反射和读取xml实现迷你容器

由于需要框架能实现多态,达到控制反转解耦。所以容器还是需要的,容器的存在可以简化对象获取工作,但是容器也不是万能的。合理使用即可,Spring对我来说太庞大了,用不着,为此给框架写一个迷你版容器。 容器…

C# Onnx Yolov8 Detect 指纹检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace Onnx…

「2021年TYWZ普及模拟题」多边形 待定题解

文章目录 题目描述输入格式输出格式样例样例输入 1样例输出 1样例输入 2样例输出 2 数据范围与提示前置知识思路与部分实现完整代码文章小结 题目描述 一个凸多边形具有非常多优秀的性质,它的任意内角小于或等于 18 0 。 180^。 180。 。 小 F 将 n n n 条边交给…

自然语言处理基础

自然语言 自然语言处理是人工智能能够通过图灵测试的重要工具。 自然语言处理基本的任务和应用 词性标注:把每句话的各个单词的词性标注出来,例如:形容词、名词、动词 named entity recognition命名实体的识别:识别哪些单词是真…