Skip to content

Commit 5e854eb

Browse files
authored
basic entity model design (#1)
* add plugin rfc doc * update plugin doc that add some content * add some plugin design content * update plugin rfc doc * move gitignore from plugin dir to root dir * add custom resource definition RFC doc * add some content in crd rfc doc * add basic model design drawio doc * fix plugin doc format issue * rename design dir
1 parent 7a68fa4 commit 5e854eb

File tree

6 files changed

+189
-0
lines changed

6 files changed

+189
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.bkp
2+
*.bkp
3+
*.dtmp

custom_resource_definition/README.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# RFC : 定制资源定义
2+
3+
| **概述** | Ikaros关于定制资源定义的设计详细文档 |
4+
| ------- | ----------------------------------- |
5+
| **已创建** | 2022 年 12 月 28 日 |
6+
| **状态** | WIP |
7+
| **所有者** | [li-guohao](mailto:[email protected]) |
8+
| **贡献者** | 暂无 |
9+
10+
## 背景和动机
11+
12+
需要给插件模块的数据持久化提供支持,但是由于具体的字段无法确定,需要支持让插件自定义数据持久化的模型
13+
14+
## 目标和非目标
15+
- 给插件提供数据持久化支持,插件能够自定义数据持久化模型
16+
- 本体会给插件自定义的数据模型生成API
17+
- 插件能对自定义的数据模型CRUD
18+
19+
## 设计
20+
21+
*你到底在做什么?包括架构和流程图。*
22+
23+
*这通常是 RFC 中最长的部分。*
24+
25+
## 时间线
26+
27+
*建议的实施时间表是什么?*
28+
29+
## 依赖项
30+
31+
*这个依赖于哪些现有的内部和外部系统?它将如何使用它们?*
32+
33+
## 考虑的替代方案 / 现有技术
34+
35+
*您还考虑了哪些其他方法?哪些现有的解决方案是接近但不完全正确的?该项目将如何替代或整合替代方案?*
36+
37+
## 操作
38+
39+
*您是否正在为任何团队添加任何新的常规人工流程或额外工作?如果这是一个新系统,谁来运行它?*
40+
41+
## 安全 / 隐私 / 合规
42+
43+
*应该考虑哪些安全 / 隐私 / 合规方面?*
44+
45+
*如果你不确定,永远不要假设没有。始终与安全团队交谈。*
46+
47+
## 风险
48+
49+
*存在哪些已知风险?哪些因素可能会使您的项目复杂化?*
50+
51+
*包括:安全性、复杂性、兼容性、延迟、服务不成熟、缺乏团队专业知识等。*
52+
53+
## 修订
54+
55+
1. *已创建 RFC*
56+
2. *重大更改的更新,包括状态更改。*

design/Design.drawio

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<mxfile host="Electron" modified="2023-01-02T19:38:25.449Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.3.0 Chrome/104.0.5112.114 Electron/20.1.3 Safari/537.36" etag="TcOIS4G134qgtEQLOnN8" compressed="true" version="20.3.0" type="device"><diagram id="5vBOp-7H5DO72th64KRP" name="基础的模型">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</diagram></mxfile>

plugin/README.md

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
# RFC :插件模块设计
2+
3+
| **概述** | Ikaros功能性拓展插件模块设计 |
4+
| ------- | ----------------------------------- |
5+
| **已创建** | 2022 年 12 月 27 日 |
6+
| **状态** | WIP |
7+
| **所有者** | [li-guohao](mailto:[email protected]) |
8+
| **贡献者** | 暂无 |
9+
10+
## 目标
11+
12+
服务端
13+
14+
- 参考[Kubernetes CRD](https://kubernetes.io/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/)[OpenAPI v3](https://spec.openapis.org/oas/v3.1.0) 以及 [Halo Extension](https://github.com/halo-dev/rfcs/tree/main/extension) 设计定制资源定义,方面插件进行数据持久化
15+
- 服务端API支持插件进行拓展,core 提供统一的API生成方式,权限暂时不做更细粒度的划分,全部走`JWT`
16+
- 实现插件的类加载,并提供对插件操作的API
17+
- core 提供 hook,供插件在一些非关键地方进行操作,非关键指的是不影响本体的正常运行
18+
- 插件静态资源文件的加载,包括插件的配置文件 和 插件的管理端拓展打包文件
19+
- 为了安全考虑,core 不能把所有的方法调用暴露给插件,需要提供接口暴露可开放的方法给插件调用
20+
21+
管理端前端(admin)
22+
23+
- 可通过插件在各级导航栏插入新的功能入口
24+
- 可通过插件添加新页面
25+
- 可通过插件添加自定义导航栏路由
26+
- 通过hook增强各个页面或组件的功能
27+
28+
公共目标
29+
30+
- 插件管理:提供可视化的插件管理机制,支持插件的安装、卸载、启用、停用、配置、升级。
31+
- 插件框架:提供插件开发、打包、发布相关的脚手架,提供完善的插件开发文档。
32+
33+
## 非目标
34+
35+
## 背景和动机
36+
37+
为拓展系统功能性,需要插件模块进行支持
38+
39+
## 设计
40+
41+
### 术语
42+
43+
- core: 本体,核心模块
44+
45+
- admin: 管理端
46+
47+
- hook: core预留的增强功能的钩子
48+
49+
### 服务端(Backend)
50+
51+
#### 描述
52+
53+
插件启用时由 PluginManager 负责加载,包括:
54+
55+
- IAM: 统一身份认证(Identity and Access Management),简称IAM,是权限控制中心。
56+
57+
- RouterManager: 请求路由注册器,负责注册所有的核心的路由和插件定义的路由,以及OpenAPI的路由注册。
58+
59+
- PluginManager: 插件管理器,负责所有的插件的启用、卸载、类加载、类卸载等功能,插件的资源管理,配置资源和管理端资源。
60+
61+
- HookManager: 负责所有的钩子的暴露、钩子实现的查找、钩子注册到声明周期等动作,还有内部方法的隐藏和可供插件调用的方法的暴露。可共享事件`@SharedEvent`的桥接
62+
63+
- CRDManager: 负责所有的定制资源持久化模型的管理。
64+
65+
- StaticFiles:由 PluginManager 加载。
66+
67+
- 类似 manifest 和 RoleTemplates 的 yaml。
68+
69+
- Listeners:由 PluginManager 管理。
70+
71+
- Spring Bean Components:委托给 PluginManager 管理。
72+
73+
![img not found](assets/backend.drawio.png)
74+
75+
#### 类加载
76+
77+
插件启用加载时,由 `PluginManager` 创建一个新的 `PluginClassLoader` 实例负责加载插件类和资源,`PluginClassLoader``parent` 为 Ikaros 使用的类加载器,加载顺序符合双亲委派机制。
78+
79+
![](https://docs.oracle.com/cd/E19501-01/819-3659/images/dgdeploy2.gif)
80+
81+
#### 权限控制
82+
83+
自定义角色模板yml文件,core根据这些文件对插件定义的API进行权限控制
84+
85+
#### 数据持久化
86+
87+
插件使用CRD进行数据持久化
88+
89+
## 时间线
90+
91+
*建议的实施时间表是什么?*
92+
93+
## 依赖项
94+
95+
依赖于 pf4j 和 java 类加载
96+
97+
## 考虑的替代方案 / 现有技术
98+
99+
*您还考虑了哪些其他方法?哪些现有的解决方案是接近但不完全正确的?该项目将如何替代或整合替代方案?*
100+
101+
## 操作
102+
103+
*您是否正在为任何团队添加任何新的常规人工流程或额外工作?如果这是一个新系统,谁来运行它?*
104+
105+
## 安全 / 隐私 / 合规
106+
107+
*应该考虑哪些安全 / 隐私 / 合规方面?*
108+
109+
*如果你不确定,永远不要假设没有。始终与安全团队交谈。*
110+
111+
## 风险
112+
113+
*存在哪些已知风险?哪些因素可能会使您的项目复杂化?*
114+
115+
*包括:安全性、复杂性、兼容性、延迟、服务不成熟、缺乏团队专业知识等。*
116+
117+
## 修订
118+
119+
1. *已创建 RFC*
120+
2. *重大更改的更新,包括状态更改。*
121+
122+
## 参考
123+
124+
- [Halo Plugin RFC](https://github.com/halo-dev/rfcs/blob/main/plugin/pluggable-design.md)
125+
- [Chapter 5. Loading, Linking, and Initializing](https://docs.oracle.com/javase/specs/jvms/se17/html/jvms-5.html)
126+
- [Chapter 12. Execution](https://docs.oracle.com/javase/specs/jls/se17/html/jls-12.html#jls-12.6)
127+
- [Class Loader API Doc](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/ClassLoader.html)
128+
- [Oracle Chapter 2 Class Loaders](https://docs.oracle.com/cd/E19501-01/819-3659/beade/index.html)

plugin/assets/backend.drawio.png

39.5 KB
Loading

plugin/design.drawio

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<mxfile host="Electron" modified="2022-12-27T12:28:26.722Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.3.0 Chrome/104.0.5112.114 Electron/20.1.3 Safari/537.36" etag="HxQXsEp4xmKjXSMmLdTC" version="20.3.0" type="device"><diagram id="AYM88RR-gx7mbqVQx1h_" name="main">7VzLcqM4FP0aL5OyJF5epp2kk65OVSqeqpmeHQHZJsHILeTY7q8fYQQGCRsS84onXqTQRQJ0dHV07hVkgMaLzXdqL+cPxMX+AA7dzQBdDyC0wJD/jQzb2GAOUWyYUc+NTWBvmHh/sDCKdrOV5+IwV5ER4jNvmTc6JAiww3I2m1KyzlebEj9/16U9w4ph4ti+av3bc9lcdAuae/sd9mbz5M7AGMVnFnZSWfQknNsuWWdM6GaAxpQQFh8tNmPsR9gluMTtbg+cTR+M4oBVafD79+vNj4st/PMyevkX399d/PAnF1CPL/Nm+yvRY/G0bJtAQMkqcHF0leEAfVvPPYYnS9uJzq75mHPbnC18XgL8UH0q8aBvmDK8yZjEU37HZIEZ3fIq6yzAArV5BlzdEkZbDOosbbvvNz8QXX8HDOA9KIByFKae74+JT+iuLXJtbE0dbg8ZJa84c8ZwLPw8PRE3cRYJdMRM00Qxg6qpF6AKUFOoagqqY0KxgizvHsvDl4cpIAGWMBUm2/dmAS86HDTM7d8isDw+ea/EiYXnutFtCscr79d1DICllY2AUTAAjeGvzu0nsuJAPdgBpy16movXgJeWd1hTV+ACoAAvoym8DAWv+6uHzlECZjlMRWzZGEwIKJhgly+aokgom5MZCWz/Zm+VJtu+zk9ClgKrF8zYVigAe8VIRSRDsqIOPvK8VlyP2XSG2bFFQCiTqDNHB4Zi32beW14hFMG8a3pFqb3NVFgSL2Bh5sqPkSHDItJ4g5G0rkv1NUM/Vp8fxE+wH/C0Kyf4gNaFD/Chp9t/ovaXelL8JS63K1xvcqVtGbfX5zv6p/QdmVta8R0dnSl/WJ/SB8xhBz5gKUvto7+aeUFfpAkCPVt0Rwpgd4S89gUuTe8ZXMnwZfC63P06h8qEpVAVRWnNIaXGvuOn6744lj7qm2NBBa7TQJJSBdMpNpzCVIFrjp6HdUWqeVTTHFUGVmgVwNpcAgadBaywHFc0bBVXNQfzCXE1KvgrKGLN5nA1FVxjAXOh4ns2+S2twjC0muACh2TkhRpinM0oGGbfRkHVpleP92Hn2kFKL6ayqgQnrSmcYAUuxoF7Fe1aRe7m22HoOXlY8t40JQHLUO5w94uyHxuPZdIkvJRmSfjxPkkSFZIcyaHcSpp3OZBbkbc6dGy5WtGCYMFnZBj8jGuH89QN4mrJ1hqMLl+aC3BW9C29wEFHKY3rE78tDeyr5nZKJHxie1/4r8TrUrovTf8lV4j7LRody/1IYgXpkuPHuCgXqisFANV0+xPx8V94seT44O75A4ByAgFFaq45BlFVx4RxX3JuPb8HgEFZ/hYAVhRVNIeXqg+aYtxPyp4hn+Qs6b/QOwc9oZQojV4RpZzchjLBVWbKobTDokmU2zBTAnUjV8hcdSfubGQukOVb1zIXqjL3GJkIVL+0WyPaLREP9W3MtcRJRk2cJKfwAGqXk5Cq3sZP1yofta1BjL5FfUjVbByoE7NwNQBlVlC37QL1JdY+INY+slx8nHZRZdoF/aJdS3J2eX+oMu1K9NK2FETvEyEnTJIvZ0+i7XPzYeUFEZnSG/bh5HbZFXEVMrKI3mjoXkEgeZejYGEctbkwagU79D3CS9kV6hwv2JqQ+IrVKvBoMtClomHUK76ti267zh5pavaoT0ljvQJ9tJo01tSA7Sex3Z1DLQjDg+hjs8WSKxLxGubH4cvN0BqwhAa8zDsbMlQ0oaWrcDb2wpTWWljXNUNmmB229Hp6IlFLqVXrl5Y9G27934RjxVInOVMqdcyWJkQy/p9tQkApJkvfEnx3cGdJC4DZbnCnq8HdLeU+zWdB51JD/kC2YG0s/EK2sbcI9QrfHZ8JfdT95Vb5SzvDXk1wTVqpNPjBCa6Bpib4IJqpyX8jiKvv/6UDuvkP</diagram></mxfile>

0 commit comments

Comments
 (0)