天天看点

【Soul网关探秘】微内核架构及实现

引言

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

一、基本架构

微内核架构包含两部分组件:核心系统(core system)和插件模块(plug-in modules)。应用逻辑被分割为独立的插件模块和核心系统,提供了可扩展性、灵活性、功能隔离和自定义处理逻辑的特性。

【Soul网关探秘】微内核架构及实现
  • 核心系统

    通常提供系统运行所需的最小功能集。

    负责和具体业务功能无关的通用功能

  • 插件模块

    插件模块是独立的模块,包含特定的处理、额外的功能和自定义代码,来向核心系统增强或扩展额外的业务能力。

    负责实现具体的业务逻辑

微内核架构的本质,是将变化封装在插件里面,从而达到快速灵活扩展的目的,而又不影响整体系统的稳定。

二、设计关键点

2.1 插件管理

  • 插件列表
  • 加载方式
  • 加载时机

常见实现方法:插件注册表机制

2.2 插件连接

插件如何连接到核心系统?

  1. 核心系统制定连接规范
  2. 插件按照规范实现
  3. 核心系统按照规范加载

常见连接机制:

  • OSGi(Eclipse使用)
  • 消息模式
  • 依赖注入(Spring使用)

2.3 插件通信

  • 核心系统需要提供插件通信机制

三、Soul的微内核架构实现

3.1 架构

  • 核心系统

    对应

    soul-web

    模块
  • 插件模块

    对应

    soul-plugin

    模块

3.2 关键设计

1)插件管理

  • 插件列表

    soul-bootstrap

    模块的 pom.xml 中引入了各插件的starter,此处的 pom 文件充当插件列表的角色。
  • 加载方式

    由 springboot 自动加载到 ioc 容器

    各插件的 starter 借助 springboot 的 @Configuration + @Bean 自动加载机制完成插件加载。

  • 加载时机

    启动时加载:

    soul-bootstrap

    启动后,由 springboot 在容器启动阶段加载插件。

2)插件连接

  • 连接方式

    依赖注入:借助 spring 支持的数组、集合类型自动注入能力,实现插件和网关的连接

    ObjectProvider<List> plugins

3)插件通信

  • 通信机制

    插件定序 + ServerWebExchange传参:插件链初始化阶段完成插件排序,再借助贯穿插件执行链的ServerWebExchange,完成插件的定向传参,即某种意义上的通信机制。

总结

简单梳理了微内核架构(插件式架构),借此看清了 soul 的插件化实现路径,后续 soul 可以考虑继续深做插件热更功能。

今日内容如下图所示:

【Soul网关探秘】微内核架构及实现

个人知识库

高性能微服务API网关-Soul