微内核架构的理解

news2025/1/31 8:03:43

什么是微内核架构

相信大家都听说过微内核架构,也或多或少做过一些类似于微内核架构的设计,为了可以更好的设计出微内核的架构,我们了解下什么是微内核架构。

说到微内核架构,大家首先会想到的是Eclips、IDEA、OSGI、Spring Plugin、SPI等,这些都是我们熟知的微内核架构。有了微内核架构,我们可以更好的定制和控制流程,所以微内核架构的设计思想经常在做配置化中台项目的方案中出现的。

微内核架构实现主要是插件化思想(Plug-in),是一套插件体系,最早的插件化方法是应用在操作系统之上,久而久之就有了微内核设计这一思想。

了解微内核,需要先了解这个“内核”。

在操作系统中,内核围绕于操作系统的核心功能,比如时钟中断、进程创建与销毁、进程调度、进程间通信等内核态的动作。而文件系统、内存管理、设备驱动等都被视为非内核能力,这部分会被放在用户态空间。

微内核是相对于宏内核而言,宏内核包含了很多的底层程序功能,做的事情非常多,而且不是可拔插的,修改任意一个功能点,都需要整个程序联动,而且有可能引入一个bug,导致整个内核不可用,类似于一个功能复杂的单体系统,每次变更和交付成本都非常高,风险也非常大。

而微内核只围绕于核心功能设计,他的功能实现都是相互独立的,其他非核心功能是通过用户态的独立进程以插件的方式加入进来的,微内核引擎负责管理进程、调度进程、进程之间通信。某一个功能出现问题时,由于其是独立的进程,不会对其他进程产生影响,也不会导致内核不可用。

微内核中,多个进程协调通信,需要进行系统调用,系统调用需要切换堆栈及保护进程现场,过程比较耗时。宏内核(也就是用户态)中,是通过函数调用完成各个模块之间合作,所以宏内核较微内核效率更高。

通过操作系统微内核概念,可以类比到业务系统。一个系统,特别是经过微服务拆分之后的系统,都会服务于某个“内核”,多个核心功能通过微服务的方式拆分,服务之间通过通信交换数据。通过微内核解决了快速交付问题,实现了代码隔离,控制风险点的目的。

而考虑到扩展性,我们需要定义出内核的骨架,并开放出plugin,以实现个性化扩展。这样的微内核架构,我们可以便于定制,改动小,进而实现热更新,这也是微内核架构的主要价值。

微内核架构设计

在微内核架构中有两个核心组件:系统内核、插件化组件。

系统内核:主要解决的是内核的核心功能,比如插件的注册与管理、插件生命周期管理、插件之间通信、插件的热加载与替换。

结构如下:

基于微内核的插件化设计,我们可以实现组件隔离,每个插件可以以独立jar包或独立进程运行,这些插件组件进程可以独立部署在分布式网络上,实现水平扩展,某种程度就像我们的微服务治理体系,有独立部署的微服务进程,也有中心治理的注册中心与配置中心。

在操作系统中,微内核与宏内核通信方式上有如下区别:

微内核架构下,组件之间的通信也是基于消息的,比如每个组件对于消息处理有两个能力:收(receive)、发(send)。

那两个进程之间通信,是否需要一个三方中介呢?比如这样:

在操作系统中,消息的通信是基于内核转发的,也就是我们经常听说的消息总线架构,内核负责协调各个进程的通信,比如进程A想要发送消息给进程B,需要知道B对应的内存地址。进程向内核发送消息,内核再将消息发送给对应的接收进程,这就是一个总线通信过程。

在很多微内核架构设计实现上,组件之间都可以通过EventBus实现Plug-in之间的解耦,也就是借鉴了总线的设计。

在微服务架构的通信实现上,在SOA时代,有类似于消息总线的概念。但微服务是进程之间的直接调用,没有了这个所谓的总线。

但是如果引入了一个中心化的服务注册与发现中心,就可能也会有个所谓的内核中转:

在插件化系统中,组件之间不直接通信,而是借助于一个中心化的内核系统进行转发。这种设计思想非常类似于操作系统的内核转发实现,插件之间隔离、透明。某个组件下线或替换,其他组件不需要感知。

这样的架构会存在于一些其他的问题。首先,这个中心化的转发中介变成了单点,其可用性严重影响了整个系统的可用性。当中心化系统变成单点转发,就存在对应的性能问题。

对于远程进程调用的性能优化,我们可以想到这几点:

  1. 采用高性能的二进制协议代替http1.x协议,因为http1.1的文本协议性能较差;

  2. 采用类似于零拷贝机制,实现快速网络包转发,而不需要做内核态与用户态的转换;

  3. 引入好的网络硬件,比如RDMA;好的协议,如UDP、QUIC等;

  4. 选择不同的通信方式,比如RPC的、Pub/Sub的、无序ACK的、单工/双工通信的等;

为了处理这么多协议的转发,内核系统需要具备Adapter以实现对于众多协议的解析与转发,比如引入多个filter来支持不同的协议,但是他将变得越来越复杂。

还有一种思路是,内核服务只支持一种协议,各个插件之间也基于这个协议通信,协议的适配与转换由各个组件自己做就可以。

其实很多人会想到,这个中心化的内核组件的消息转发不就是类似于一个MQ系统的Broker吗?而那种独立处理通信协议的组件不就类似于Mesh设计吗?

没错,前一种类似于类似于broker,后一种类似于service mesh或agent思想。功能上是一样的,只是处理逻辑上有些差异。

broker是集中式的,所有组件通过broker进行消息的收发,涉及到注册与发现机制。mesh是基于服务的注册与发现,消息发送需要找到对方的agent,再实现两个agent之间的通信。

broker方案设计核心在于,broker需要管理注册的服务、路由的管理、数据的采集等这些核心功能,类似于微内核的内核本身理念一样。如果要扩展整个微内核架构能力,需要编写独立的service,之后和broker对接,在broker接收消息,处理完毕后发送消息。

那中心的broker负载太高如何扩容呢?因为broker本身具有服务调用的数据采集能力,所以可以从这里采集,作为扩缩容的参考,经过分析后,可以调用k8s的api实现pod的扩缩容了。

我们可以发现,这套围绕于内核的核心设计以及扩展service的思想非常的云原生,比如上层业务系统想要调用存储服务,微内核系统可以对外提供一个消息存储的api,而这套api可以按需扩展是基于redis、还是tair或是其他kv,为服务标准化和可替代性提供了很好的基础,对上云操作非常友好,也就体现了云原生的灵活性。

中心化转发和点对点发送,两个方案各有优缺点,架构就是一个取舍的过程,我们需要结合自己系统的特点和体量决定选择合适的方案。

总结

微内核架构对于我们做微服务设计,或是偏中台、平台系统设计提供了非常好的参考建议,比如对于微服务边界的划分,我们完全可以参考操作系统的设计,经过几十年的发展,其设计之精妙已经被验证了,非常稳定,功能划分也非常合理。

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

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

相关文章

CAD连续标注怎么操作?CAD连续标注尺寸命令使用技巧

CAD标注工具可以在图形中创建多种标注,并可对标注样式进行修改或编辑。但是有些新手设计师在绘图过程中,不知道CAD连续标注怎么操作,其实很简单,本节内容就给大家分享一下浩辰CAD软件中CAD连续标注尺寸命令的使用技巧吧&#xff0…

005+limou+HTML——(5)HTML图片和HTML超链接

1、图片标签<img> &#xff08;1&#xff09;图片标签属性 [src]&#xff1a;用于指定这个图片所在的路径&#xff0c;常使用相对路径&#xff0c;比较少使用绝对路劲。如果图片路径有错误的话&#xff0c;就会发生图片显示错误[alt]&#xff1a;用于指定图片的提示文字…

三天吃透mybatis面试八股文

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…

HDFS读数据流程

1&#xff09;客户端通过Distributed FileSystem向NameNode请求下载文件&#xff0c;NameNode通过查询元数据&#xff0c;找到文件块所在的DataNode地址。 2&#xff09;挑选一台DataNode&#xff08;就近原则&#xff0c;然后随机&#xff09;服务器&#xff0c;请求读取数据…

蚂蚁感冒(简单数论)

长 100 厘米的细长直杆子上有 n 只蚂蚁。它们的头有的朝左&#xff0c;有的朝右。每只蚂蚁都只能沿着杆子向前爬&#xff0c;速度是 1 厘米/秒。当两只蚂蚁碰面时&#xff0c;它们会同时掉头往相反的方向爬行。这些蚂蚁中&#xff0c;有 1 只蚂蚁感冒了。并且在和其它蚂蚁碰面时…

编译错误:rpcndr.h(192,14): error C2872: “byte”: 不明确的符号

Windows上使用C11 编译出现错误1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\rpcndr.h(192,14): error C2872: “byte”: 不明确的符号1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\rpcndr.h(191,23): message : 可…

第十章 opengl之光照(投光物)

OpenGL投光物平行光点光源衰减聚光平滑/软化边缘投光物 当前光线都是来自空间的一个点。但实际&#xff0c;我们有很多种类的光照&#xff0c;将光投射到物体的光源叫做投光物。需要讨论几种不同类型的投光物。大致为&#xff1a;定向光&#xff0c;点光源&#xff0c;聚光等 …

Shell编程:轻松掌握入门级Shell脚本,成为Shell高手

文章目录前言一. 实验环境二. shell基础入门精讲2.1 什么是shell脚本&#xff1f;2.2 shell的种类2.3 脚本案例2.3.1 打印 hello-word案例2.3.2 统计指定目录下的文件数和目录数2.4 shell脚本编写规范总结前言 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人…

微服务架构(小白教学1)

相信大家吃饭的时候肯定是很苦恼打饭之慢&#xff0c;在自己饥肠辘辘的时候&#xff0c;面对自己喜欢吃的食物窗口却如同有百万大军虎视眈眈&#xff0c;自己内心的煎熬可想而知有时候在想这么美味的食物&#xff0c;为什么窗口就只开一个呢&#xff1f;于是你告诉了你的爸爸&a…

浅谈运维工程师的开发能力的培养

写在前面 本文已获得作者授权&#xff0c;作者的博客地址&#xff1a;https://www.cuiliangblog.cn/ 原文链接&#xff1a;浅谈运维工程师的开发能力的培养 一、运维工程师发展路线 1. 传统运维 侧重点是解决具体的问题。要求具备扎实的底层的知识储备&#xff0c;如网络、l…

安卓 Frament + ViewPager使用示例

1. 组成架构 整个架构被包在一个外部Fragment之中&#xff0c;也可以放在一个Activity之中&#xff0c;随意。外部的fragment包含了两个组件&#xff0c;即途中的ViewPager和TabLayoutViewPager要套上一个FragmentStatePagerAdapter &#xff0c;适配器负责new出一个个fragment…

基于Jetson NX的模型部署

系统安装 系统安装过程分为3步&#xff1a; 下载必要的软件及镜像 Jetson Nano Developer Kit SD卡映像 https://developer.nvidia.com/jetson-nano-sd-card-image Windows版SD存储卡格式化程序 https://www.sdcard.org/downloads/formatter_4/eula_windows/ 镜像烧录工具…

嵌入式C语言九大数据结构操作方式详解

在C语言的开发过程中&#xff0c;灵活使用数据结构&#xff0c;对提高编程效率有极大的帮助。 目录 1 数组 2 链表 3 跳表 4 栈 5 队列 6 树 7 堆 8 散列表 9 图 10 总结 数据结构想必大家都不会陌生&#xff0c;对于一个成熟的程序员而言&#xff0c;熟悉和掌握数据…

【C++、C++11】列表初始化、右值引用

文章目录&#x1f4d6; 前言1. 统一的列表初始化1.1 { } 花括号初始化&#xff1a;1.2 std::initializer_list&#xff1a;2. 右值引用2.1 什么是左值和右值&#xff1a;2.2 右值的分类&#xff1a;2.3 左值引用和右值引用的比较2.3 右值的使用场景&#xff1a;2.4 新的类功能&…

SpringBoot整合Quartz以及异步调用

文章目录前言一、异步方法调用1、导入依赖2、创建异步执行任务线程池3、创建业务层接口和实现类4、创建业务层接口和实现类二、测试定时任务1.导入依赖2.编写测试类&#xff0c;开启扫描定时任务3.测试三、实现定时发送邮件案例1.邮箱开启IMAP服务2.导入依赖3.导入EmailUtil4.编…

为「IT女神勋章」而战

大家好&#xff0c;我是空空star&#xff0c;今天为「IT女神勋章」而战 文章目录前言一、IT女神勋章二、绘制爱心1.htmlcssjs来源&#xff1a;一行代码代码效果2.python来源&#xff1a;C知道代码效果3.go来源&#xff1a;复制代码片代码效果4.java来源&#xff1a;download代码…

游戏算法-游戏AI状态机,python实现

AI概述 游戏AI是对游戏内所有非玩家控制角色的行为进行研究和设计&#xff0c;使得游戏内的单位能够感知周围环境&#xff0c;并做出相应的动作表现的技术。游戏AI作为游戏玩法的一大补充&#xff0c;在各种游戏中都有广泛的应用&#xff0c;比如可以和玩家交互聊天的NPC&#…

用户体验设计—影响定制化设计的因素

0 前言最近在上信息构建这门课&#xff08;名为信息构建&#xff0c;但感觉叫用户体验设计更好。。。&#xff09;老师是研究信息行为、人智交互这块的&#xff0c;所以实验课要求我们先学习一个实际的设计案例&#xff0c;让我们搞懂影响定制化设计的因素。所以这篇文章讲讲我…

七色电子标签

机种名 电子会议桌牌 型号 ESL_7color_7.3_D 外观尺寸 176.2x137.15x80mm 产品重量 268g 可视区域 163.297.92mm 外观颜色 银色 供电方式 锂电池供电2300mAh&#xff08;Type-C 接口可充电&#xff09; 显示技术 E-INK电子纸&#xff0c;双屏 像素 800x480 像…

ByteTrack: Multi-Object Tracking by Associating Every Detection Box 论文详细解读

ByteTrack: Multi-Object Tracking by Associating Every Detection Box 论文详细解读 文章目录ByteTrack: Multi-Object Tracking by Associating Every Detection Box 论文详细解读ByteTrackByteTrack算法简介ByteTrack算法流程ByteTrack算法描述一&#xff1a;对检测框进行分…