sie-snest-gw\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260.md
... ...
@@ -32,17 +32,59 @@
32 32
33 33
- 接口app使用可扩展路由实例。接口app在获取业务配置的第三方路由时,将其写入到redis hashmap中,gw在处理请求时会先判断请求的path是否符合iidp平台标准请求,如果不是则获取redis中的路由信息,如果存在路由信息则使用该路由信息进行转发,否则使用退回到默认的路由处理逻辑。
34 34
35
-#### 2.4.1 saas 可扩展路由
36 35
37
-saas 是一种全新的执行模式,在该模式下的路由策略与之前不同,功能开关由引擎配置文件 `application-dev.properties` 中 的 `iidp.saas.enable` 来控制,默认值为 false。
38
-
39
-当 `iidp.saas.enable=true` 时,表示启用 saas 模式,此时 gw 会优先从 redis 中获取路由信息进行转发。
40
-
41
-saas对于app的划分关系是这样的:tenantID -> appGroup -> appName -> svc
42
-
43
-所以期待的路由是这样的: `tenantID + appName --> appGroup`, 即根据前端请求中的 tenantID 和 appName 来获取对应的 appGroup,然后将请求转发到对应 appGroup 下的 svc。由于在安装的时候,appGroup 已经被写入到svc的注解中,是唯一对应一个 svc 的,所以 gw 只需要根据 tenantID 和 appName 来获取对应的 appGroup,然后通过 appGroup 来获取对应的 svc 即可。最终将请求路由到正确的 svc 上。
44
-
45
-### 2.5 方案架构图
36
+~~#### 2.4.1 saas 可扩展路由~~(已废弃,参考 2.5 节)
37
+
38
+~~saas 是一种全新的执行模式,在该模式下的路由策略与之前不同,功能开关由引擎配置文件 `application-dev.properties` 中 的 `iidp.saas.enable` 来控制,默认值为 false。~~
39
+
40
+~~当 `iidp.saas.enable=true` 时,表示启用 saas 模式,此时 gw 会优先从 redis 中获取路由信息进行转发。~~
41
+
42
+~~saas对于app的划分关系是这样的:tenantID -> appGroup -> appName -> svc~~
43
+
44
+~~所以期待的路由是这样的: `tenantID + appName --> appGroup`, 即根据前端请求中的 tenantID 和 appName 来获取对应的 appGroup,然后将请求转发到对应 appGroup 下的 svc。由于在安装的时候,tenantID 和 appGroup 已经被写入到svc的注解中,是唯一对应一个 svc 的,所以 gw 只需要根据 tenantID 和 appName 来获取对应的 appGroup,然后通过 appGroup 来获取对应的 svc 即可。最终将请求路由到正确的 svc 上。~~
45
+
46
+
47
+### 2.5 Saas 模式
48
+Saas模式是一个全新的模式,与之前的业务逻辑完全不一样。
49
+在 SaaS 模式下,路由的划分关系为:```tenantID -> appGroup -> appName -> svc```。gw 通过组合前端请求中的 ```tenantID``` 和 ```appName``` 来获取对应的 ```appGroup```,并将请求转发到相应的 ```svc```。
50
+
51
+同时,gw 通过监听 Kubernetes 资源的变化,动态更新内存中的路由信息,实现动态路由分发。该路由信息已经标记在svc的注解中,key为 `iidp.com/saas`, value的格式如下:
52
+```json
53
+{
54
+ "t1": {
55
+ "g1": [
56
+ "a1",
57
+ "a2"
58
+ ],
59
+ "g2": [
60
+ "a1",
61
+ "a2"
62
+ ]
63
+ },
64
+ "t2": {
65
+ "g3": [
66
+ "a3",
67
+ "a1"
68
+ ]
69
+ },
70
+ "t3": {
71
+ "g1": [
72
+ "a1",
73
+ "a3"
74
+ ],
75
+ "g4": [
76
+ "a2",
77
+ "a4"
78
+ ]
79
+ }
80
+}
81
+```
82
+压缩后为:```{"t1":{"g1":["a1","a2"],"g2":["a1","a2"]},"t2":{"g3":["a3","a1"]},"t3":{"g1":["a1","a3"],"g4":["a2","a4"]}}```
83
+
84
+其中 t1、t2、t3 表示 tenantID,g1、g2、g3、g4 表示 appGroup,a1、a2、a3、a4 表示 appName。
85
+应用市场app在安装的时候携带这些信息调用 distributed 相关 v2 接口即可。
86
+
87
+### 2.6 方案架构图
46 88
47 89
```
48 90
+-----------+ +-----------+