f483d6c48c8dbccc39015510eceaf112e622273e
\345\237\272\344\272\216spi\346\234\272\345\210\266\345\256\236\347\216\260\345\274\225\346\223\216\345\217\257\346\211\251\345\261\225\345\212\237\350\203\275\346\226\271\346\241\210.md
... | ... | @@ -1,20 +1,30 @@ |
1 | - |
|
2 | 1 | #### 一、引言 |
3 | 2 | 本方案旨在为现有引擎系统提供一个灵活且可扩展的方法,以支持不同类型的 SPI(Service Provider Interface)组件。通过定义标准化的 SPI 接口,并在运行时动态加载相应的实现,不需要修改引擎代码,我们可以提高系统的模块化程度,便于未来的维护和升级。 |
4 | 3 | #### 二、总体架构 |
5 | 4 | 1. **SPI 接口定义**: |
6 | 5 | - 在现有的引擎工程中创建一个专门的 `spi` 目录,用于存放所有 SPI 相关的接口。 |
7 | 6 | - 新增 `spi/distributed` 包,其中包含了分布式相关的 SPI 接口,例如 `Installer`, `Registry`, 和 `Router` 等。 |
8 | - - 任何其他的 SPI 接口都可以在`spi`目录下进行定义,比如ORM等 |
|
7 | + - 任何其他的 SPI 接口都可以在`spi`目录下进行定义,比如ORM等 |
|
9 | 8 | |
9 | + [[http://iidp.chinasie.com:9999/iidpminio/spi/spi.jpg]] |
|
10 | 10 | 2. **服务发现机制**: |
11 | 11 | - 引入资源文件 `META-INF/services`,位于每个 SPI 实现项目的 `resources` 目录下。 |
12 | - - 该文件应包含具体实现类的全限定名,以便于系统在运行时自动识别和加载这些实现。 |
|
12 | + - 该文件应包含具体实现类的全限定名,以便于系统在运行时自动识别和加载这些实现。 |
|
13 | + |
|
14 | + [[http://iidp.chinasie.com:9999/iidpminio/spi/meta-info-services.jpg]] |
|
15 | + |
|
16 | + - 在代码中加载实现类 |
|
17 | + |
|
18 | + [[http://iidp.chinasie.com:9999/iidpminio/spi/spi-loader.jpg]] |
|
19 | + |
|
13 | 20 | 3. **依赖管理**: |
14 | 21 | - 为了确保新实现的 SPI 组件能够被正确地集成到引擎系统中,我们建议通过现有的独立的`sie-snest-server`工程项目进行打包。 |
15 | - - 这样做的好处在于无需对引擎核心代码进行修改,只需调整`sie-snest-server`工程项目配置即可完成集成过程。 |
|
22 | + - 这样做的好处在于无需对引擎核心代码进行修改,只需调整`sie-snest-server`工程项目配置即可完成集成过程。 |
|
23 | + |
|
24 | + [[http://iidp.chinasie.com:9999/iidpminio/spi/spi-dependency.jpg]] |
|
16 | 25 | 4. **打包与部署**: |
17 | 26 | - 最终将整个`sie-snest-server`工程项目打包成镜像,这样就可以方便地将新的 SPI 功能部署到生产环境中。 |
27 | + |
|
18 | 28 | #### 三、实施步骤 |
19 | 29 | 1. **定义 SPI 接口**: |
20 | 30 | - 在引擎工程的 `src/main/java/spi/distributed` 包内添加所需的接口定义。 |
... | ... | @@ -26,17 +36,17 @@ |
26 | 36 | 4. **部署与监控**: |
27 | 37 | - 将服务器镜像部署到生产环境。 |
28 | 38 | - 设置监控系统,持续观察 SPI 接口的运行状态和性能指标。 |
39 | + |
|
29 | 40 | #### 四、优势与考虑因素 |
30 | 41 | - **灵活性**: 通过定义清晰的 SPI 接口,系统能够轻松地切换不同的实现,而不影响其他部分。 |
31 | 42 | - **可维护性**: 分离了接口定义与实现细节,使得代码更易于理解和维护。 |
32 | 43 | - **性能优化**: 可以根据实际需求选择最优的实现方式,从而提升整体系统效率。 |
33 | -#### 五、未来展望 |
|
34 | -随着业务的不断发展,我们计划进一步探索更多类型的 SPI 接口,如数据库操作或缓存管理等,以增强系统的功能多样性和适应性。 |
|
35 | 44 | |
45 | +#### 五、引擎愿景 |
|
46 | +随着业务的不断发展,我们计划进一步探索更多类型的 SPI 接口,如数据库操作或缓存管理等,以增强系统的功能多样性和适应性。 |
|
36 | 47 | |
37 | -### 引擎愿景 |
|
38 | 48 | |
39 | -#### 引擎的功能: |
|
49 | +##### 引擎的功能: |
|
40 | 50 | - 外部生态的适配,能够适应需求的变化; |
41 | 51 | - 路由里面的逻辑,注入特殊逻辑,app可以注入,插件可以注入; |
42 | 52 | - 元模型自身的扩展,增加一个元模型类型,如何增加? 默认auth1.0, 但是安装auth2.0; |
... | ... | @@ -44,14 +54,14 @@ |
44 | 54 | - 引擎可测试性,比如orm实现得对不对?单元测试场景; |
45 | 55 | - jsr40 元模型底层接口 |
46 | 56 | |
47 | -#### 7大类接口,所有接口的标准都有一个”根”: |
|
48 | -- 1,路由相关的,controller相关的,不要反射; |
|
49 | -- 2,元模型操作相关的接口,比如加一个模型,建一个服务等操作,内存数据库; |
|
50 | -- 3,分布式相关的扩展接口,数据转发,调度等。加密传输等。中间件的适配; |
|
51 | -- 4,ORM适配接口; |
|
52 | -- 5,配置相关的接口。配置中心,app、引擎的配置; |
|
53 | -- 6,事件,监控类的接口,埋点,带回调函数; |
|
54 | -- 7,部署相关的接口,运维相关; |
|
57 | +##### 7大类接口,所有接口的标准都有一个"根": |
|
58 | +- 路由相关的,controller相关的,不要反射; |
|
59 | +- 元模型操作相关的接口,比如加一个模型,建一个服务等操作,内存数据库; |
|
60 | +- 分布式相关的扩展接口,数据转发,调度等。加密传输等。中间件的适配; |
|
61 | +- ORM适配接口; |
|
62 | +- 配置相关的接口。配置中心,app、引擎的配置; |
|
63 | +- 事件,监控类的接口,埋点,带回调函数; |
|
64 | +- 部署相关的接口,运维相关; |
|
55 | 65 | |
56 | 66 | |
57 | 67 | --- |