`

微内核架构模式

阅读更多
写本篇主要是用来后面写一篇可扩展性软件设计打好基础。
微内核定义:
     微内核是内核的一种精简形式。将通常与内核集成在一起的系统服务层被分离出来,变成可以根据需求加入选件  这样就可提供更好的可扩展性和更加有效的应用环境。使用微内核设计,对系统进行升级,只要用新模块替换旧模块,不需要改变整个操作系统。

微内核架构模式来源于操作系统,本文主要讲解微内核模式在应用软件中的如何实现。

微内核架构模式组成:
一般由下面几个部分组成:微内核、内核、扩展服务(我更喜欢叫做扩展插件)。
内核由几个最基本服务组成,微内核完成加载内核里所有的基本服务。
内核基本服务在应用软件中通常是指那些与业务无关的服务,如资源加载服务等。

整个系统就是由微内核、内核(即几个基本服务,广义来讲我称它为插件,所以是容器自带的几个默认插件,能提供基本服务)、扩展服务(广义来讲我称它为插件,只不过是业务系统写的插件让微内核扩展进来的)。
抽象来讲就是由微内核和许多插件组成。如下图


微内核做了什么事?
微内核主要负责插件的生命周期管理,插件的加载,替换,卸载。
对于加载,替换,卸载都有两种方式,静态与动态。动态的更加复杂。

插件是什么?
插件一般由以下几部分组成:插件暴露的接口(我一般称为叫API),插件内部实现,插件扩展点以及插件配置。插件扩展点我一般设计为SPI,因为它符合(java中的API/SPI的概念,关于API/SPI请参考API/SPI可扩展设计原则)。
整个插件组成示意图如下

以读数据插件为例,读数据插件主要提供读数据服务,插件暴露接口叫做DataReadAPI。假设是网站前台系统。插件的内部实现是先读缓存,后读数据库。把读缓存与读数据库抽象出来一个接口叫DataReadSPI。在内部实现只要读取插件扩展点getExtensions(DataReadSPI.java)得到一个DataReadSPI列表,顺序执行即可(顺序执行必须是前面执行的结果为空时再往下执行)。
如果实现了扩展点有两个:如图中的DataReadCacheImpl和DataReadDBImpl,那这两个扩展点在插件配置时把缓存配在前面。于是就形成先读缓存,如果缓存读不到就读数据。

看一下代码比较容易明白
微内核框架端
public interface Plugin {
    
    void init(PluginContext pluginContext);
    
    <T> List<T> getExtension(Class<T> extensionClassName);
}

public class PluginManager {

    public static <T extends Plugin> T getPlugin()
    {
        //返回插件
        return null;
    }
  
}

public interface DataReadAPI extends Plugin {

    Object read(String key);
}

public interface DataReadSPI {
    Object read(String key);
}

public class DefaultDataReadImpl extends AbstractPlugin implements DataReadAPI {

    @Override
    public Object read(String key) {
        List<DataReadSPI> extensions = getExtension(DataReadSPI.class);
        for (DataReadSPI extension : extensions) {
            Object result = extension.read(key);
            if (result != null) {
                return result;
            }
        }
        return null;
    }
}

客户端或叫应用端代码及配置,即微内核框架的使用端
public class DataReadCacheImpl implements DataReadSPI {

    @Override
    public Object read(String key) {
        return null;
    }
}

public class DataReadDBImpl implements DataReadSPI {

    @Override
    public Object read(String key) {
        return null;
    }
}

插件扩展的配置文件
<plugins>
	<plugin id="dataReadAPIPluginID">
		<extensions>
			<extension interfaceClassName="com.liyh.devine.web.spi.DataReadSPI">
				<implements>
					<implment beanName="DataReadCacheImpl" />
					<implment beanName="DataReadDBImpl" />
				</implements>
			</extension>
		</extensions>
	</plugin>
</plugins>

业务代码
public class Client {
    public static void main(String[] args)
    {
        DataReadAPI dataReadAPI = PluginManager.getPlugin("dataReadAPI");
        Object result = dataReadAPI.read("key");
        System.out.println(result);
    }
}

解释一下:
客户端使用框架提供的插件服务,即插件暴露的API--->DataReadAPI,框架满足不了客户端的功能可以实现自己的扩展,如DataReadCacheImpl,DataReadDBImpl。插件一般会提供默认的实现,只不过本例默认实现为空,只是简单调用一下扩展点的功能就返回了。

这里比较巧, API与SPI是一样的,其实一般SPI是API实现过程中开放的扩展点,一般可以比较小。比如RenderAPI,用于渲染的API,它的SPI可能就是一个PullToolFacotry,PullToolFacotry主要返回PullTool。当应用使用微内核框架的Render插件时,可以扩展自己的PullTool返回给框架。


总结
微内核模式的核以是插件管理与及协调插件之间的调用。插件是可以整个被替换,插件本身是一个很大粒度的扩展点。同时插件可以提供自己的小粒度扩展点。这样整个系统就是由一个微内核加很多插件组成一个具备很强的扩展性的系统。
  • 大小: 3.7 KB
  • 大小: 18.2 KB
分享到:
评论

相关推荐

    Hyper-V微内核架构安全性分析 (2010年)

    寄居架构和裸金属架构是虚拟机软件常采用的两种技术模式,其中裸金属模式虚拟机又分为微内核和单内核 两种技术架构,与单内核架构相比,微内核具有更高的安全性,Hyper-V采用的是微内核架构。在对微内核架构技术详 细...

    软件架构模式

    简介 第一一章 分层架构 第二二章 事件驱动架构 第三章 微内核架构 第四章 微服务架构 第五章 基于空间的架构 附录A 关于作者

    从零学架构无评论版

    专栏共 50 期,主要分为 5 ... 可扩展架构模式:将概述可扩展模式及其基本思想,详解分层架构、SOA 架构、微服务及微内核架构。 架构实战:将理论与案例结合,在实战中落地专栏传递的架构原则、架构流程和架构模式。

    架构设计-模式词典

    10 1.5 Microkernel (微内核)........................................................................................................... 11 1.6 Reflection (反射)...........................................

    Porto:波尔图是一种可以随您的业务扩展的现代软件架构模式!

    波尔图(软件架构模式)欢迎来到波尔图控制器要求动作任务楷模观看次数变形金刚例外情况子动作2)可选组件典型的容器结构波尔图质量属性实现(与波尔图一起内置) 反馈和问题 介绍波尔图是一种现代软件体系结构模式...

    利用QT实现的主框架和插件系统

    Qt是1991年奇趣科技开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt 同 X Window 上的 Motif,...

    基于 Spring Boot 3.1 在线代码生成功能,采用经典开发模式的Java 快速开发平台

    采用松耦合设计,微内核和插件架构,模块增减便捷;界面无刷新,一键换肤;众多账号安全设置,密码策略;文件在线预览;消息推送;多元化第三方登录;在线定时任务配置;支持集群,支持SAAS;支持多数据源;支持读写...

    31 讲带你搞懂 SkyWalking

    │ 第09讲:SkyWalking Agent 启动流程剖析,领略微内核架构之美.mp4 │ 第11讲:BootService 核心实现解析,Agent 的“地基”原来是这样的.mp4 │ 第13讲:剖析 Trace 在 SkyWalking 中的落地实现方案(下).mp4...

    Apache ShardingSphere 分布式SQL事务与查询引擎

    Apache ShardingSphere 是一个分布式SQL事务与查询引擎,能够支持数据分...插件化(Pluggable):利用微内核架构和三层可插拔模式,使得特性及数据库生态系统的组件能够灵活嵌入。开发者可以根据需求定制自己的Sharding

    STM8L051低功耗实现的说明文档

    它基于STM8内核架构,采用先进的低功耗技术,适用于多种嵌入式应用场景,特别是对功耗要求苛刻的电池供电设备。 文档中主要介绍了STM8L051的五种低功耗模式wait ,low power run mode,low power wait mode,Ative-...

    用于SAN环境的IBM N7000网关解决方案

    IBM N7000 网关基于 Data ONTAP 微内核操作系统,该操作系统旨在将块级存储和文件级存储网络模式统一到一个通用的架构中。N7000 网关可提供一套全面的高级数据管理功能,帮助您整合、保护和恢复企业应用程序及用户的...

    JeeSite java快速开发平台.rar

    采用松耦合设计,微内核和插件架构,模块增减便捷;界面无刷新,一键换肤;众多账号安全设置,密码策略;文件在线预览;消息推送;多元化第三方登录;在线定时任务配置;支持集群,支持SAAS;支持多数据源;支持读写...

    kwast:Ring操作系统在环0中以用户空间的形式运行WebAssembly

    它使用微内核架构来提高灵活性。 由于WebAssembly被设计为一种安全的语言,因此我们可以运行它而不必使用硬件用户模式和多个地址空间(可选)。 进程可以在相同的地址空间(单个硬件保护域中有多个SIP)或单独的...

    大厂学院SVIP十门合集|完结无秘

    微内核+插件 Dubbo内核四大机制 运行时内存 不同垃圾收集器工作原理详解 GC日志分析 Spring全家桶源码分析 Tomcat架构原理 Web请求处理原理 数据访问层框架原理 架构与设计思维模式 程序中的数学 数据分析 机器智能...

    嵌入式系统/ARM技术中的Cortex系列ARM内核介绍

    ARM一直以来都是自己研发微处理器内核架构,然后将这些架构的知识产权授权给各个芯片厂商,精简的CPU架构,高效的处理能力以及成功的商业模式让ARM公司获得了巨大的成功,使他迅速占据了32位嵌入式微处理器的大部分...

    DUBBO原理、应用与面经总结

    微内核+插件机制官网介绍的架构设计思想是两点:采用URL作为配置信息的统一格式,所有扩展点都通过传递URL携带配置信息;采用Microkernel+Plugin模式,Microkernel只负责组装Plugin,Dubbo自身的功能也是通过扩展点...

    鸿蒙 Linux 系统镜像 harmnoyOS.rar

    华为鸿蒙系统正式版PC下载基于微内核的全场景分布式的操作系统,鸿蒙操作系统将基于四个框架为主题,分别是:分布架构、天生流畅、内核安全、生态共享,精简代码结构,将系统的代码全部都进行分布并细化处理,全面...

Global site tag (gtag.js) - Google Analytics