Soul 网关源码学习(3) - 数据库设计 (插件部分)

Soul Admin 数据库设计 (插件部分)

在当前版本的官方文档中学习到, Soul 网关的插件信息采用数据库来存储插件相关的信息, 相关的数据库模型有:

模型名称 模型描述
Plugin 插件
Selector 选择器
SelectorCondition 选择器匹配条件
Rule 规则
RuleCondition 规则匹配条件
PluginHandle 插件处理参数

数据库模型图

soul database model

数据库表字段说明

  • plugin 表字段说明
表字段名 字段描述
id ID 主键
name 插件名称
config 插件配置
role 插件的类型, 0: 系统插件, 1: 自定义插件
enabled 启用状态, 0: 禁用, 1: 启用
date_created 创建时间
date_updated 更新时间
  • plugin_handle 表字段说明
表字段名 字段描述
id ID 主键
plugin_id 插件 ID
field 字段名称
label 标签
data_type 数据类型, 1: 数字, 2: 字符串
type 字段所属类型, 1: 选择器, 2: 规则, 3: 插件
sort 排序
ext_obj 扩展配置信息, json 格式字符串, 如: {“required”: true, “defaultValue”: “default”}
date_created 创建时间
date_updated 更新时间
  • selector 表字段说明
表字段名 字段描述
id ID 主键
plugin_id 插件 ID
name 选择器名称
match_mode 匹配类型
type 类型
sort 排序
handle 插件处理信息
enabled 是否开启
loged 是否打印日志
continued 是否继续后序选择器
date_created 创建时间
date_updated 更新时间
  • selector_condition 表字段说明
表字段名 字段描述
id ID 主键
selector_id 选择器 ID
param_type 条件参数类型
operator 参数匹配操作符
param_name 条件参数名称
param_value 条件参数值
date_created 创建时间
date_updated 更新时间
  • rule 表字段说明
表字段名 字段描述
id ID 主键
selector_id 选择器 ID
match_mode 匹配类型
name 规则名称
enabled 是否启用
loged 是否打印日志
sort 排序
handle 插件处理信息
date_created 创建时间
date_updated 更新时间
  • rule_condition 表字段说明
表字段名 字段描述
id ID 主键
rule_id 规则 ID
param_type 规则参数类型
operator 规则匹配操作符
param_name 参数名称
param_value 参数值
date_created 创建时间
date_updated 更新时间

插件数据关联 (Soul Admin 侧维护)

启动 Soul Admin 时, 使用 MySQL 数据库存储插件信息, 在启动完成之后, 查看数据库 soulpluginplugin_handle, plugin 表中, 以 role 字段区分一个插件是系统插件, 还是自定义插件 (对 PluginRole 的定义可以查看 soul
工程中 soul-common 模块中的类 org.dromara.soul.common.enums.PluginRoleEnum)。

Soul Admin 启动时, 会默认初始化一部分插件信息, 这部分插件写入了表 pluginplugin_handle 中。

数据库设计的理解 (插件部分)

  • 每个插件信息 (Plugin) 包含多个插件处理参数信息 (PluginHandle)

plugin_handle 表中的数据在 Soul 网关管理 > 系统管理 > 插件处理管理 展示, 可以在页面上添加数据。插件处理参数数据中有一个字段 type 会区分字段所属插件模型类型: 选择器, 规则或者插件。

因为插件处理参数最终会归属于某个插件,对应在不同的应用模型类型,最终信息的落地形式为:

所属插件模型类型 表现形式
插件 在插件管理页面中维护插件信息中会有对应的插件处理信息, 维护后插件处理信息会存储到数据库 plugin 表 config 字段
选择器 在插件列表中选择维护了插件处理信息的插件后, 添加选择器会要求维护插件处理信息, 维护后插件处理信息会存储到数据库 selector 表 handle 字段
规则 在插件列表中选择维护了插件处理信息的插件后, 添加规则会要求维护插件处理信息, 维护后插件处理信息会存储到数据库 rule 表 handle 字段
  • 一个选择器 (Selector) 对应多个匹配条件 (SelectorCondition),一个选择器 (Selector) 也可对应多个匹配规则 (Rule),一个规则 (Rule) 对应多个匹配条件 (RuleCondition)。

  • 插件, 选择器, 规则都是描述网关处理请求行为的数据。

总结

今天阅读了 Soul Admin 中插件部分的数据库相关的设计文档,数据库实体定义的源码,插件部分信息的维护。今天的学习路线为:

阅读文档 -> 整理数据库模型设计 -> 在 Soul Admin 使用相关的功能 -> 阅读源码 -> 理解设计

通过今天的学习, 读懂了 Soul 网关中插件部分的设计,后面会继续对网关插件如何在网关的请求路由时的工作原理做出相应的剖析。

文章作者: David Liu
文章链接: https://davidliu.now.sh/2021/01/16/soul_database_design/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 David Liu's Blog