写本篇主要是用来后面写一篇可扩展性软件设计打好基础。
微内核定义:
微内核是内核的一种精简形式。将通常与内核集成在一起的系统服务层被分离出来,变成可以根据需求加入选件 这样就可提供更好的可扩展性和更加有效的应用环境。使用微内核设计,对系统进行升级,只要用新模块替换旧模块,不需要改变整个操作系统。
微内核架构模式来源于操作系统,本文主要讲解微内核模式在应用软件中的如何实现。
微内核架构模式组成:
一般由下面几个部分组成:微内核、内核、扩展服务(我更喜欢叫做扩展插件)。
内核由几个最基本服务组成,微内核完成加载内核里所有的基本服务。
内核基本服务在应用软件中通常是指那些与业务无关的服务,如资源加载服务等。
整个系统就是由微内核、内核(即几个基本服务,广义来讲我称它为插件,所以是容器自带的几个默认插件,能提供基本服务)、扩展服务(广义来讲我称它为插件,只不过是业务系统写的插件让微内核扩展进来的)。
抽象来讲就是由微内核和许多插件组成。如下图
微内核做了什么事?
微内核主要负责插件的生命周期管理,插件的加载,替换,卸载。
对于加载,替换,卸载都有两种方式,静态与动态。动态的更加复杂。
插件是什么?
插件一般由以下几部分组成:插件暴露的接口(我一般称为叫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
分享到:
相关推荐
微内核架构,又称插件化架构,是一种将系统功能拆分成核心系统和可扩展的插件模块的设计模式。这种架构常用于需要高度可扩展性和灵活性的产品,如Eclipse这样的集成开发环境(IDE)、操作系统或复杂的企业业务系统。...
Swift-MicroKernel是一个专为Swift开发设计的轻量级客户端微内核架构。这个框架的核心理念是将操作系统级别的微内核概念应用到软件开发中,尤其是客户端应用的构建上,以此实现更高效、更安全、更模块化的软件设计。...
微内核工作流引擎是一种基于微内核架构设计的工作流管理系统,其核心在于通过轻量级的服务模块来支持复杂的工作流管理和执行。这种设计的主要优势在于高度的可扩展性和灵活性,使得系统可以根据实际需求动态地添加或...
Eclipse IDE 的微内核架构模式,又称为插件架构,是其设计中的核心特性,旨在提高灵活性、可扩展性和隔离性。这种架构允许开发者通过添加、移除或替换插件来定制IDE的功能,以适应不同的开发需求。微内核架构主要由...
微内核架构则是一种软件设计模式,其核心思想是将操作系统的核心功能最小化,只保留最基本的服务,其他功能以模块化的形式加载到系统中。 首先,我们要理解FastAPI。FastAPI由Alejando M. Teran创建,它是Python中...
3.软件架构模式:软件架构师需要了解软件架构模式,包括MVC模式、MVP模式、微内核架构模式等。 在软件架构设计思想与模式考试中,需要了解软件架构设计的思想与模式,并且能够应用它们来设计软件架构。 数据库...
1. 性能开销:微内核架构中,进程间通信通常通过消息传递,这可能导致较高的通信开销,尤其是在频繁调用系统服务时。 2. 开发复杂性:微内核设计需要精细的权衡和优化,以克服性能问题,这增加了开发的复杂性。 ...
### Hyper-V微内核架构安全性分析 #### 一、引言 随着信息技术的快速发展,虚拟化技术成为提高计算资源利用率、降低成本的有效手段。虚拟化技术的核心在于如何将一台物理计算机划分为多个虚拟环境,使每个环境都能...
- **操作系统层次**:此图展示了经典的微内核架构模式。微内核架构将操作系统的核心功能最小化,并将其余的服务作为独立的进程运行在用户空间。这种方式提高了系统的模块化程度,使得操作系统更加灵活且易于扩展。 -...
- **设计复杂性**:微内核架构需要精心设计才能充分发挥其优势,特别是如何平衡内核与用户空间服务之间的交互。 - **生态系统支持**:相比于成熟的单块内核操作系统,微内核在工具链、驱动支持等方面可能不够丰富。 ...
微内核架构与概念 微内核是一种轻量级的内核设计,仅包含最基本的功能,如任务和线程管理、进程间通信(IPC)和内存管理。其核心特征包括: - **服务分离**:所有非基本服务,如文件系统、网络协议栈等,在用户...
10. **Microkernel(微内核)模式**:这种模式强调最小化的内核设计,将大多数服务移到内核之外作为扩展模块运行,增强了系统的灵活性和可扩展性。 #### 二、设计模式(Design Pattern) 设计模式是针对软件设计中...
3. 微内核架构:微内核架构就是做一个稳定通用的内核,也就是给软件设计一个强劲的心脏。如果需要更多功能通过在内核外部再封装一层对软件进行扩充,微内核提供基本的接口供外部调用,这些接口一定要通用,并且提供...
架构风格有很多种,如分层架构、MVC架构、微内核架构、元模型架构、管道-过滤器架构、SOA架构、云计算架构、REST架构等。每种架构风格都有其特点和优缺点,选择合适的架构风格是软件设计和开发的关键。 分层架构是...